MPEG-TS分段HTTP直播

时间:2011-12-26 12:15:18

标签: encoding ffmpeg http-live-streaming playlist mpeg

我正在尝试交错MPEG-TS段但失败了。实际上使用笔记本电脑中的内置摄像头捕获了一组片段,然后使用FFMPEG使用以下命令进行编码:

ffmpeg -er 4 -y -f video4linux2 -s 640x480 -r 30 -i %s -isync -f mpegts -acodec libmp3lame -ar 48000 -ab 64k -s 640x480 -vcodec libx264 -fflags +genpts -b 386k -coder 0 -me_range 16 -keyint_min 25 -i_qfactor 0.71 -bt 386k -maxrate 386k -bufsize 386k -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -aspect 640:480

另一个是使用以下命令编码的avi文件:

fmpeg -er 4 -y -f avi -s 640x480 -r 30 -i ./DSCF2021.AVI -vbsf dump_extra -f mpegts -acodec libmp3lame -ar 48000 -ab 64k -s 640x480 -vcodec libx264 -fflags +genpts -b 386k -coder 0 -me_range 16 -keyint_min 25 -i_qfactor 0.71 -bt 386k -maxrate 386k -bufsize 386k -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -aspect 640:480

然后使用开源分段器将输出分段为ts段。

如果两者来自同一来源(均来自相机),则可以正常工作。但是在这种情况下,第二组段冻结。时间过去了,但视频没有移动.. 所以我认为这是一个编码问题。所以我的问题是,如何更改ffmpeg命令才能使其工作?

通过交错我的意思是,有一个播放列表包含第一组段,另一个播放列表包含另一组段,并且客户端调用一个而另一个(HTTP Live Streaming)

第一组段之一的ffprobe输出:

Input #0, mpegts, from 'live1.ts':
  Duration: 00:00:09.76, start: 1.400000, bitrate: 281 kb/s
  Program 1 Service01
    Metadata:
      name            : Service01
      provider_name   : FFmpeg
    Stream #0.0[0x100]: Video: h264, yuv420p, 640x480 [PAR 1:1 DAR 4:3], 29.92 fps, 29.92 tbr, 90k tbn, 59.83 tbc
    Stream #0.1[0x101]: Audio: aac, 48000 Hz, stereo, s16, 111 kb/s

第二组段之一的ffprobe输出:

Input #0, mpegts, from 'ad1.ts':
  Duration: 00:00:09.64, start: 1.400000, bitrate: 578 kb/s
  Program 1 Service01
    Metadata:
      name            : Service01
      provider_name   : FFmpeg
    Stream #0.0[0x100]: Video: h264, yuv420p, 640x480 [PAR 1:1 DAR 4:3], 25 fps, 25 tbr, 90k tbn, 50 tbc
    Stream #0.1[0x101]: Audio: aac, 48000 Hz, stereo, s16, 22 kb/s

谢谢,

1 个答案:

答案 0 :(得分:3)

我在这个主题中看到了很多问题 - 见:

  1. HTTP Live Streaming MPEG TS segment
  2. Update .m3u8 playlist file for HTTP Live streaming?
  3. 我不确定确切的问题 - 但我想大多数人都抱怨说,当你混合来自两个来源的内容不同时就会出现冻结。

    我认为如果PTS和/或PCR不连续并且玩家没有意识到这一点或将其冲洗,则可能出现这种情况。也许,您可以识别时间戳序列,看看是否修复了这个问题。

    另见3.3.11。 http://tools.ietf.org/html/draft-pantos-http-live-streaming-07:EXT-X-DISCONTINUITY

      

    EXT-X-DISCONTINUITY标记表示编码不连续
      在它之后的媒体片段和之前的媒体片段之间   它。可能改变的一组特征是:

         

    o文件格式
         o轨道的数量和类型
         o编码参数
         o编码序列
         o 时间戳序列

    因此,如果问题是上述问题,播放列表文件中的不连续标志可能会有所帮助。请尝试其中的一些,并提供更多细节。我想,这也会帮助很多其他人。