iPad无法使用HTML5渲染H.264视频

9
我有一些H.264编码的视频,在Web浏览器中可以正确地呈现HTML5,但在iPad上不能正确地呈现。当我使用从互联网上下载的H.264视频时,我的视频在iPad上正常呈现,因此这不是一个HTML问题。
以下是关于我的视频的ffmpeg信息 -
我的原始.mov视频:

Seems stream 1 codec frame rate differs from container frame rate: 6000.00 (6000/1) -> 30.00 (30/1)

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'a_video.mp4':

Metadata:

major_brand     : qt  
minor_version   : 537199360
compatible_brands: qt  

Duration: 00:00:42.74, start: 0.000000, bitrate: 220 kb/s

Stream #0.0(eng): Audio: aac, 44100 Hz, stereo, s16, 94 kb/s
Stream #0.1(eng): Video: h264, yuv420p, 762x464, 122 kb/s, 30 fps, 30 tbr, 3k tbn, 6k tbc
使用 Handbrake 将 .mov 转换为 mp4 后,但在 iPad 上无法渲染。

Seems stream 0 codec frame rate differs from container frame rate: 180000.00 (180000/1) -> 29.97 (30000/1001)

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'a_video.m4v':

Metadata:

major_brand     : mp42  
minor_version   : 0
compatible_brands: mp42isomavc1  
encoder: HandBrake 0.9.5 2011010300  

Duration: 00:00:42.77, start: 0.000000, bitrate: 169 kb/s

Stream #0.0(und): Video: h264, yuv420p, 752x464 [PAR 381:376 DAR 381:232], 35 kb/s, PAR 145161:141376 DAR 145161:87232, 29.97 fps, 29.97 tbr, 90k tbn, 180k tbc
Stream #0.1(eng): Audio: aac, 44100 Hz, stereo, s16, 128 kb/s

这里是我在网上找到的一个.mp4文件,可以在iPad上播放:

似乎流1的编解码器帧率与容器帧率不同:180000.00(180000/1) -> 25.00(25/1)

从'a_video_3_emu.mp4'输入#0,mov,mp4,m4a,3gp,3g2,mj2:

元数据: major_brand : M4VP
minor_version : 1
compatible_brands: M4VPM4A mp42isom
encoder : CoreMediaAuthoring 677, CoreMedia 420.17, i386

持续时间:00:01:38.01,开始:0.000000,比特率:1023 kb/s

流#0.0(und):音频:aac,32000 Hz,单声道,s16,97 kb/s
流#0.1(und):视频:h264,yuv420p,480x360 [PAR 1:1 DAR 4:3],914 kb/s,25 fps,25 tbr,90k tbn,180k tbc

有人发现我编码视频的方式有问题吗?

编辑

起初我的理论是iPad对不同的容器格式敏感;但事实并非如此。我拍摄了一段可以正确在iPad上播放的视频并将其转换为.mov格式,它仍然可以在iPad上正确播放。因此,iPad处理底层H.264流的方式可能存在问题。


在桌面浏览器上查看页面时,mp4文件是否能正常工作? - Niklas
是的。这只会在iPad上发生。这与mp4和m4v有关。 - jgoldberg
我刚刚在iPad上运行了这个命令,用于处理已经渲染好的视频:ffmpeg -i a_video_3_emu.mp4 -acodec copy -vcodec mpeg4 output.mp4。output.mp4在iPad上仍然可以使用。看起来问题可能不是容器问题,而是底层流的问题。 - jgoldberg
3个回答

3
如果您有一个 H.264 视频流 - 无论容器是什么 (mov、m4v、mp4) - 并且您的 HTML5 视频在 Web 浏览器中呈现但在 iPad 上没有呈现,那么有两种可能的解决方法:
第一种解决方案是将 H.264 视频流转换为 MPEG4。 ffmpeg -i video_h264_not_working.mov -acodec copy -vcodec mpeg4 video_mpeg.mov (或者,在 Handbrake 中选择 MPEG4 而不是 H.264。)
第二种解决方案是使用以下参数重新处理 H.264 视频: ffmpeg -i video_h264_not_working.mov -vcodec libx264 -r 25 -b 516k -bt 516k -crf 22 -vpre normal video_h264.mov 第二种解决方案来自:http://houseoflaudanum.com/navigate/howtos/html5-video-no-webm/ 我猜测在前一种情况下,MPEG4 编解码器对 iPad 更加宽松;而在后一种情况下,iPad 不喜欢原始 H.264 编码中的某些流参数,因此需要进行“清理”。
要确定您的视频流实际上是什么,只需执行 ffmpeg -i myvideo.mov。

1

我使用免费的Miro Video Converter(适用于OS X和Windows),并按照Mark Pilgrim在Dive Into HTML5中推荐的方法,成功地对HTML5视频进行编码和转码。

Miro Video Converter可以将几乎任何视频文件转换为MP4、Theora或MP3(仅音频)。它具有预设,可将视频转换为流行手机、iPod和其他媒体播放器的正确大小和格式。只需转换您的视频并将其复制到设备上即可。

这是一种超级简单的方式,可以将几乎任何视频转换为MP4、WebM(vp8)、Ogg Theora或Android、iPhone等格式。您会感到高兴,因为它是100%免费和开源的。

另一个真正的视频转换工具是Video Monkey,这是一款专门为Mac开发的免费视频编码应用程序。它是在伟大的工具Visual Hub消失后创建的。Video Monkey从Visual Hub视频转换工具中大量借鉴,无论是在概念上还是从最初发布到SourceForge作为TranscoderRedux的原始代码转储中。

我有同样的问题。Miro不起作用。事实上,当我将.wmv转换为.webm以在Chrome中使用时,它会崩溃。(供参考:Handbrake和VLC也无法在iPad上工作,但两者都可以生成各种格式的视频,可在Chrome中使用) - Bobby

0

sudo port install ffmpeg 并尝试这个秘密配方:

#!/bin/bash
BR=512k
WIDTH=640
HEIGHT=272
input=${1}

# strip off the file extension
output=$(echo ${input} | sed 's/\..*//' )

# works for most videos
ffmpeg -y -i ${input} -f mpegts -acodec libmp3lame -ar 48000 -ab 64k -s ${WIDTH}x${HEIGHT} -vcodec libx264 -b ${BR} -flags +loop -cmp +chroma -partitions +parti4x4+partp8x8+partb8x8 -subq 7 -trellis 0 -refs 0 -coder 0 -me_range 16 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -bt 200k -maxrate ${BR} -bufsize ${BR} -rc_eq 'blurCplx^(1-qComp)' -qcomp 0.6 -qmin 30 -qmax 51 -qdiff 4 -level 30 -aspect ${WIDTH}:${HEIGHT} -g 30 -async 2 ${output}-iphone.ts

将宽度和高度调整为原始视频大小,并根据需要设置比特率。将原始视频作为参数传递给脚本。可与几乎任何源格式一起使用。您需要macports来使用端口命令。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接