HLS video segmenting complications. How to create a transport stream with ffmpeg

2

6

I have h264 videos, and currently we're using Apple's HTTP Video Streaming tools and mediafilesegmenter to segment these files. What I need to do is to switch to alternative segmenter based on this very popular open-sourced segmenter

The problem is that this segmenter does not just take any video, but takes only MPEG-TS videos. So I have to convert my h264 videos to TS first.

I can do that with ffmpeg. I'm using this:

ffmpeg -i encoded.mp4 -vcodec h264 -i encoded.mp4 -sameq -acodec aac -strict experimental -f mpegts output.ts  

But this creates fairly larger output. And the reason is that Apple's segmenter keeps the same codec - AVC and the same audio codec - AAC, whereas ffmpeg changes video format to MPEG Video.

The question is: can I somehow keep the same AVC video codec and still convert video to a transport stream?

So my goal is to keep the same video quality and same video codecs as Apple's medifilesegmenter does.

UPD: Okay... it seems that ffmpeg CAN split videos into segments:

ffmpeg -i encoded.mp4 -c copy -map 0 -vbsf h264_mp4toannexb -f segment -segment_time 10 -segment_list test.m3u8 -segment_format mpegts segment%d.ts

That's still has one problem: it doesn't create http live streaming index file. (-segment_list creates a file with list of segments, but it doesn't look like HLS index). So, you still have to create index file

iLemming

Posted 2012-06-19T17:09:49.750

Reputation: 507

Answers

5

Try:

ffmpeg -i in.mp4 -acodec copy -vcodec copy out.ts

Ffmpeg also has a segmenter. See http://ffmpeg.org/ffmpeg.html#segment_002c-stream_005fsegment_002c-ssegment

user319862

Posted 2012-06-19T17:09:49.750

Reputation: 248

yeah I know that now, but is it compliant with HLS? I'm asking because it doesn't create correct .m3u8 index files. So you still have to build those somehow. Later today I'm gonna try to manually create m3u8 and play these segmented videos – iLemming – 2012-06-20T14:11:41.810

@agzam: Here is the spec for HLS http://tools.ietf.org/html/draft-pantos-http-live-streaming-08

– user319862 – 2012-06-23T14:24:29.117

@agzam: http://tools.ietf.org/html/draft-pantos-http-live-streaming-08#section-8.2 shows you what a simple m3u8 can look like

– user319862 – 2012-06-23T14:26:12.300

2

Try setting -segment_list_type to m3u8. From the look of it the list is fine for static file conversion but not live streams, as segment duration is not added to the list until close_list is called.

The list type should be set from the list name file extension in current releases, but it isn't.

Mike Clark

Posted 2012-06-19T17:09:49.750

Reputation: 21

2

Try setting -segment_list_flags live

FDisk

Posted 2012-06-19T17:09:49.750

Reputation: 131

1Can you elaborate on this? Thanks. – fixer1234 – 2015-11-06T15:46:41.283