在网页上播放多种后缀的视频文件的临时解决方案

来源:互联网 发布:linux解压文件命令 编辑:程序博客网 时间:2024/05/16 20:27

公司有一个项目,要在网页上播放各种视频文件。HTML5的video标签可以支持:1)带有 Theora 视频编码和 Vorbis 音频编码的 Ogg 文件;2)带有 H.264 视频编码和 AAC 音频编码的 MPEG 4 文件;3)带有 VP8 视频编码和 Vorbis 音频编码的 WebM 文件。但是明显只有mp4文件才是常见格式,其他的常见格式如:avi、rmvb和mkv都无法支持。
后来使用了ffmpeg+node-demux来解视频中每一帧的画面,然后使用yuv-canvas来将解出的yuv420格式的画面画到canvas上。我测试过的视频文件封装包括:mp4、avi、mkv、flv都能搞定。但是要注意:1)ffmpeg对于各种视频格式的解码器效率不一;2)使用node-demux的pause并不会停止解码,因此不能使用play来从暂停的地方继续播放。此外,这个解决方案有个要命的问题:没声音。
这周就想这个包来同时解码视频和音频。找了半天也没有找到。最有希望的是webchimera。它是基于vlc的,理论上应该可以支持各种格式的视频。但是它两年前就停止更新了,pre-built版本也比较老。
最后的解决方案如下:视频沿用现在的解决方案,音频使用audio标签来播放。在用户上传视频的时候,使用ffmpeg将视频中的音频压成同名mp3格式存储下来。然后,在用户播放视频时,播放同名mp3文件。可能有人说,你都压mp3了,直接在上传时压mp4不就得了。这个是这样:压mp3时间非常短,一般十几秒或者几十秒就好了。压mp4时间就长了。这种方案也有一个问题:音视频可能不同步(音视频确实没有做同步)。我在测试中见过音视频可能相差1秒的。但是一般感觉不到不同步,即使有字幕也不太能感觉到不同步。

阅读全文
0 0
原创粉丝点击