2

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

警告:播放列表内容类型为“application/x-mpegurl”,但应为“application/vnd.apple.mpegurl”、“audio/x-mpegurl”或“audio/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 命令,我将不胜感激!

4

2 回答 2

4

关于第一个警告:

警告:播放列表内容类型为“application/x-mpegurl”,但应为“application/vnd.apple.mpegurl”、“audio/x-mpegurl”或“audio/mpegurl”之一。

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

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

.m3u8 应用程序/x-mpegURL

.ts 视频/MP2T

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

AddType 应用程序/x-mpegURL .m3u8

AddType 视频/MP2T .ts

如果您使用的是 lighttpd,您可能希望将其放入您的配置文件中(如果您定义了其他 mime 类型,请确保您只添加这些并且不要设置它们):

mimetype.assign = ( ".m3u8" => "application/x-mpegURL", ".ts" => "video/MP2T" )

于 2010-07-19T19:09:51.523 回答
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

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

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

但是,第二个警告看起来更严重,可能会导致苹果拒绝。它可能是您的分段器命令(您使用的是 mediastreamsegmenter 吗?)。

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

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

于 2010-07-19T19:23:36.973 回答