视频直播中avconv/ffmpeg对HLS和DASH切片

视频直播中avconv/ffmpeg对HLS和DASH切片

浏览:123

ffmpeg的HLS和DASH切片命令:

 

hls 切片

命令: ffmpeg -i /home/videos/xxx.ts  -c copy  -f segment   -segment_list_size 3  -segment_list /usr/local/nginx/html/xxx.m3u8    -segment_time 10  -active_window_size 10   -y

/usr/local/nginx/html/xxx%3d.ts

说明:-i 输入文件 -c copy 不编码
          -f 文件格式,表示切片segment   
          -segment_list_size  切片列表中含有几个片,默认为所有
          -segment_time 10 每个片的时间,单位为秒

         -y  过程中产生同样文件直接覆盖

         /usr/local/nginx/html/xxx.m3u8  生成的m3u8文件

        /usr/local/nginx/html/xxx%3d.ts 切片文件存放路径


dash 切片
命令: ffmpeg -i udp://10.0.224.28:1234 -c copy -f dash -window_size 5 -min_seg_duration 3000000 -single_file 0 -init_seg_name initavatar-stream\$RepresentationID\$.m4s -media_seg_name chunkavatar-stream\$RepresentationID\$-\$Number%05d\$.m4s -use_template 0 -bsf:a aac_adtstoasc  ftp://user:password@192.168.32.188/liang/liangc.mpd


说明:-i 输入文件 -c copy 不编码
          -f 文件格式,表示切片dash 
          --window_size 5  实时更新只保留5个切片

         -min_seg_duration 3000000 每个片的时间,单位为us

        -single_file 0  是否是单个文件切片

-init_seg_name initavatar-stream\$RepresentationID\$.m4s 初始化切片文件,只第一次生成

  -media_seg_name chunkavatar-stream\$RepresentationID\$-\$Number%05d\$.m4s切片文件,实时更新

        -use_template 0 -bsf:a aac_adtstoasc   根据需求是否加上   

 ftp://user:password@192.168.32.188/liang/liangc.mpd  生成切片列表文件

 


 

WebM DASH切片:

webm_dash_manifest

WebM DASH 清单混合器.

这个混合器实现了按WebM DASH清单规范生成DASH清单XML文件。它还支持生成DASH直播流

webm_dash_manifest选项

支持如下选项:

  • adaptation_sets

    这个选项参数有如下语法: "id=x,streams=a,b,c id=y,streams=d,e" 这里的x,y都是唯一合适设置的标识符,a,b,c,d和e是相应的音频和视频流的指代。任何合适的数字可以被用于这个选项。

  • live

    如果为1表示创建一个直播流DASH,默认为0

  • chunk_start_index

    第一个块的索引号,默认为0,它将作为清单中‘SegmentTemplate’元素的 ‘startNumber’ 属性值

  • chunk_duration_ms

    每个块的持续时间,单位milliseconds,默认1000,将作为清单中‘SegmentTemplate’元素的‘duration’属性值

  • utc_timing_url

    URL将指示从何处获取UTC时间戳(ISO格式的),它作为清单中 ‘UTCTiming’元素的‘value’ 属性值,默认: None.

  • time_shift_buffer_depth

    最小时间(单位秒)的移动缓冲区,为保障可用的任意值,作为清单中‘MPD’元素的‘timeShiftBufferDepth’属性值,默认: 60.

  • minimum_update_period

    清单最小更新时间 (单位秒), 清单中‘MPD’元素的 ‘minimumUpdatePeriod’ 属性值,默认: 0.

webm_dash_manifest例子

 
ffmpeg -f webm_dash_manifest -i video1.webm \
 
-f webm_dash_manifest -i video2.webm \
 
-f webm_dash_manifest -i audio1.webm \
 
-f webm_dash_manifest -i audio2.webm \
 
-map 0 -map 1 -map 2 -map 3 \
 
-c copy \
 
-f webm_dash_manifest \
 
-adaptation_sets "id=0,streams=0,1 id=1,streams=2,3" \
 
manifest.xml

webm_chunk

WebM直播块混合器

这个混合器输出WebM头和块分离文件,通过DASH它可以被支持WebM直播流的客户端处理。

webm_chunk选项

支持如下选项:

  • chunk_start_index

    第一个块的序号,默认0

  • header

    文件名将写入初始化数据的头

  • audio_chunk_duration

    每个音频块时间,单位milliseconds (默认5000).

webm_chunk例子

 
ffmpeg -f v4l2 -i /dev/video0 \
 
-f alsa -i hw:0 \
 
-map 0:0 \
 
-c:v libvpx-vp9 \
 
-s 640x360 -keyint_min 30 -g 30 \
 
-f webm_chunk \
 
-header webm_live_video_360.hdr \
 
-chunk_start_index 1 \
 
webm_live_video_360_%d.chk \
 
-map 1:0 \
 
-c:a libvorbis \
 
-b:a 128k \
 
-f webm_chunk \
 
-header webm_live_audio_128.hdr \
 
-chunk_start_index 1 \
 
-audio_chunk_duration 1000 \
 
webm_live_audio_128_%d.chk
 
扫描本文章二维码可手机访问: