我正在开发一个应用程序,用户上传视频并使用jwplayer,jplayer,flowplayer等将其播放回浏览器。有些视频会立即播放,而其他视频会等到整个视频文件都被下载。
我正在使用ffmpeg将视频转换为mp4格式。
以下是我尝试过的其中一个视频文件的详细信息。
General
Complete name : 429183132058337290450_AutoFF.mp4
Format : MPEG-4
Format profile : Base Media
Codec ID : isom
File size : 10.2 MiB
Duration : 24s 333ms
Overall bit rate : 3 501 Kbps
Video
ID : 1
Format : AVC
Format/Info : Advanced Video Codec
Format profile : High@L4.1
Format settings, CABAC : Yes
Format settings, ReFrames : 3 frames
Codec ID : avc1
Codec ID/Info : Advanced Video Coding
Duration : 24s 333ms
Bit rate mode : Variable
Bit rate : 3 351 Kbps
Width : 1 024 pixels
Height : 560 pixels
Display aspect ratio : 16:9
Frame rate mode : Constant
Frame rate : 30.000 fps
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 8 bits
Scan type : Progressive
Bits/(Pixel*Frame) : 0.195
Stream size : 9.72 MiB (96%)
Language : Japanese
答案 0 :(得分:7)
我也遇到过一些MP4视频的问题。我正在将上传的视频转换为mp4(h.264 + aac)并且它们不会缓冲。原因是此格式包含文件末尾播放所需的一些重要元数据,因此必须在播放开始之前加载整个文件。解决方案是在转换结果上使用名为qt-faststart
(https://github.com/danielgtaylor/qtfaststart)的小程序。此程序将此元数据重定位到文件的开头,从而可以进行渐进式下载播放。
答案 1 :(得分:5)
将ffmpeg
与-movflags +faststart
选项一起使用。这会将moov
原子重新定位到文件的开头,从而允许客户端开始播放,而无需先完全下载文件。
您可以在编码命令中使用它,或者您可以将它与现有文件一起使用,只需重新复用:
ffmpeg -i input.mp4 -c copy -movflags +faststart output.mp4
答案 2 :(得分:0)
在使用ffmpeg创建MP4视频时,我遇到了同样的问题 - 最终有效,只是将preload =“metadata”添加到html5标签:
<video preload="metadata"><source src="..." /></video>