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

Posted

技术标签:

【中文标题】iPhone HTTP Streaming .m3u8 和 .ts 文件 - 如何使用 ffmpeg 创建【英文标题】:iPhone HTTP Streaming .m3u8 and .ts files - how to create using ffmpeg 【发布时间】:2011-03-13 15:52:27 【问题描述】:

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

警告:播放列表内容类型是“应用程序/x-mpegurl”,但应该 是“应用程序/vnd.apple.mpegurl”、“音频/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 'blurCplx^(1-qComp)' -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -level 30 -g 30 -async 2 us2.ts

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 'blurCplx^(1-qComp)' -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -level 30 -g 30 -async 2 us1.ts

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

如果有人能帮我弄清楚我应该运行哪些 ffmpeg 命令,我将不胜感激!

【问题讨论】:

【参考方案1】:

关于第一个警告:

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

它可能来自服务器设置。按照此Ion Cannon post 的第 4 步的说明进行操作:

准备HTTP服务器上传一组 代表流的文件和 流定义文件(ts 和 m3u8)。这些文件可以上传到 此时有一个网络服务器,但有 是采取的另一个重要步骤 确保它们将被下载 正确,这就是设置 mime 类型。有两种 MIME 类型 对流媒体很重要 内容:

.m3u8 应用程序/x-mpegURL

.ts 视频/MP2T

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

AddType application/x-mpegURL .m3u8

AddType 视频/MP2T .ts

如果你是 使用 lighttpd 你想把 这在你的配置文件中(如果 您定义了其他 mime 类型 确定你只是添加这些而不是设置 他们):

mimetype.assign = (".m3u8" => “应用程序/x-mpegURL”,“.ts”=> “视频/MP2T”)

【讨论】:

【参考方案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 拒绝。它可能是您的分段器命令(您使用的是 mediastreamsegmenter 吗?)。

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

顺便说一句,指向您的播放列表的链接无效。

【讨论】:

以上是关于iPhone HTTP Streaming .m3u8 和 .ts 文件 - 如何使用 ffmpeg 创建的主要内容,如果未能解决你的问题,请参考以下文章

Http Live Streaming 无法在 Apache 上运行

关于H5播放Http Live Streaming m3u8格式视频

适用于 iPhone 的 HTTP 实时流式传输

Android 流媒体播放 live streaming

iPhone - 应用再次被拒绝,HTTP Live Streaming 64kbps 基线提要

如何将 iPhone-captured-video 转换为 HTTP Live Streaming 文件?