iPhone HTTP Streaming .m3u8和.ts文件 - 如何使用ffmpeg创建

时间:2010-07-09 01:29:12

标签: iphone ffmpeg video-streaming video-encoding

我正在尝试使用ffmpeg获取经过Apple验证的http媒体流,但我遇到了错误。以下是一些错误示例:

  

警告:播放列表内容类型为'application / x-mpegurl',但应该   是'application / vnd.apple.mpegurl','audio / x-mpegurl'之一   '音频/ mpegurl'。

     

警告:258个样本(88.966%)在轨道256中没有时间戳   (AVC1)。 4:us2-1.ts           ~~~~~~~~

     

警告:媒体片段的持续时间超出预期持续时间47.733   %(5.23对10.00秒,限制为20%)。 40:us2-19.ts           ~~~~~~~~~

Average segment duration: 10.16 seconds
Average segment bitrate: 320.12 kbit/s
Average segment structural overhead: 175.89 kbit/s (54.94 %)

Video codec: avc1
Video resolution: 320x320 pixels
Video frame rate: 29.72, 29.78, 29.82, 30.00, 29.64 fps
Average video bitrate: 100.66 kbit/s
H.264 profile: Baseline
H.264 level: 3.0

Audio codec: aac 
Audio sample rate: 48000 Hz
Average audio bitrate: 43.57 kbit/s

以下是我提交的结束文件:http://files.chesscomfiles.com/images_users/using/us2.m3u8

以下是我用来创建此文件的文件:http://files.chesscomfiles.com/images_users/using/using-computers-1.mp4

我已尝试过这些命令,其中包括:

  

ffmpeg -i using-computers-1.mp4 -f mpegts -acodec libfaac -ar 48000   -ab 64k -s 320x320 -vcodec libx264 -vbsf h264_mp4toannexb -b 96k -flags + loop -cmp + chroma -partitions + parti4x4 + partp8x8 + partb8x8 -subq 5 -trellis 1 -refs 1 -coder 0 -me_range 16 -keyint_min 2 - sc_threshold 40 -i_qfactor 0.71 -bt 200k -maxrate 96k -bufsize 96k -rc_eq'minkCplx ^(1-qComp)'-qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -level 30 -g 30 -async 2 us2.ts < / p>      

ffmpeg -i using-computers-1.mp4 -f mpegts -acodec libfaac -ar 48000   -ab 64k -s 320x320 -vcodec libx264 -vbsf h264_mp4toannexb -b 96k -flags + loop -cmp + chroma -partitions + parti4x4 + partp8x8 + partb8x8 -subq 5 -trellis 1 -refs 1 -coder 0 -me_range 16 -keyint_min 25 - sc_threshold 40 -i_qfactor 0.71 -bt 200k -maxrate 96k -bufsize 96k -rc_eq'brinkCplx ^(1-qComp)'-qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -level 30 -g 30 -async 2 us1.ts < / p>      

ffmpeg -i using-computers-1.mp4 -vbsf h264_mp4toannexb -acodec copy -vcodec copy -f mpegts output.ts

如果有人可以帮我弄清楚我应该运行什么ffmpeg命令,我真的很感激!

2 个答案:

答案 0 :(得分:4)

关于第一次警告:

  

警告:播放列表内容类型为   'application / x-mpegurl',但应该是   之一   '应用程序/ vnd.apple.mpegurl',   'audio / x-mpegurl'或'audio / mpegurl'。

可能来自服务器设置。按照此Ion Cannon post

的第4步中的说明操作
  

准备HTTP服务器上传一组   代表流和的文件   流定义文件(ts和   M3U8)。这些文件可以上传到   此时的Web服务器,但在那里   是另一个重要的步骤   确保他们将下载   正确的,这是设置哑剧   类型。有两种哑剧类型   对于流式传输非常重要   含量:

     

.m3u8 application / x-mpegURL

     

.ts video / MP2T

     

如果您正在使用Apache   想要添加以下内容   你的httpd.conf文件:

     

AddType application / x-mpegURL .m3u8

     

AddType video / MP2T .ts

     

如果你是   使用lighttpd你想要放   这在您的配置文件中(如果   你有其他mime类型定义make   确定你只是添加这些并且不设置   它们):

     

mimetype.assign =(“。m3u8”=&gt;   “application / x-mpegURL”,“。ts”=&gt;   “video / MP2T”)

答案 1 :(得分:2)

关于第三次警告:

  

警告:媒体片段持续时间   超出预期的持续时间47.733   %(5.23对10.00秒,限制为20   %)。 40:us2-19.ts ~~~~~~~~~

如果某个段的持续时间与播放列表中该段所列的持续时间不同(m3u8),则通常会发生这种情况。例如,下面的播放列表具有一个片段,并且由播放列表列出为10秒。如果该段的实际持续时间过多(超过20%),则验证者会抱怨。

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10, 
med0.ts 
#EXT-X-ENDLIST

通常,播放列表中的最后一个段与目标略有不同,可以忽略此警告。

并且,作为一般规则,可以忽略这些“警告”消息,但需要认真对待“错误”消息。

然而,第二次警告看起来更严重,并可能导致Apple的拒绝。它可能是你的segmenter命令(你使用mediastreamsegmenter吗?)。

另外,我没有使用“-vbsf h264_mp4toannexb”。而且,我正在使用“-async 50”。

顺便说一下,播放列表的链接无效。