如何现场转码wmv文件以在html5播放器中播放?

时间:2018-10-13 03:14:12

标签: html5 ffmpeg html5-video video.js

我已经为此工作了一段时间,但仍然没有找到可行的解决方案。我需要一种实时转换(转码).wmv文件以便在html5网络播放器中播放的方法。

我有一个Linux服务器(Apache)设置,可通过专为Chrome和Firefox浏览器设计的html5网络播放器(Video.js)流式传输视频文件。我正在处理的文件类型是.mp4(H.264)、. mkv和.wmv。对我来说,好消息是我可以本地处理mp4和mkv,但不能播放wmv。另外,我必须处理大量文件,定期更改,并且可能很大

经过大量研究并多次阅读了您不能直接流式传输wmv的方法之后,我意识到我有两个选择。可以将文件转换为受支持的格式,也可以实时转码文件以在Web播放器中使用。由于文件数量及其大小(以及定期更改),转换文件根本不可行。因此,我被实时流式传输/转码所困扰。我认为ffmpeg可以解决这个问题,但是我还没有弄清楚如何使ffmpeg直播到html5播放器中。

那么我该如何获取现有的.wmv文件并在html5播放器中对其进行实时流式传输?

到目前为止我尝试过的事情:

试图创建一个m3u8播放列表,并希望它能神奇地起作用。

ffmpeg -i "hello.wmv" -s 640x480 -c:v libx264 -f ssegment -hls_flags delete_segments -segment_list playlist.m3u8 -segment_list_type hls -segment_list_size 10 -segment_list_flags +live -segment_time 10 out_%6d.ts

仅在ffmpeg仍在进行时复制到mp4并进行流式传输。显然没有用。

ffmpeg -i "hello.wmv"  -vcodec copy video.mp4

在ffmpeg仍在进行时,转换为webm格式并流式传输webm。实际上,这确实在html播放器中将视频显示了几秒钟:

ffmpeg -i "hello.wmv" -codec:a libvorbis -codec:v libvpx -b:a 128k -b:v 1200k video.webm

不需要使用Ffmpeg(也考虑使用vlc),需要html5播放器。完全转换然后流式传输是不可行的选择,因为文件大小可能太大并且会定期更改。我可以使用什么命令/程序来流式传输文件以便在html播放器中播放?

1 个答案:

答案 0 :(得分:0)

尝试了许多不同的方法之后,我终于提出了一个可行的解决方案。为将来可能遇到的任何人发布此处。我最终得到的解决方案是使用HLS(实时流)对文件进行分段。然后,使用输出的.m3u8文件在html5播放器的视频代码中使用它。

以下是我在ffmpeg中使用的内容。请注意,我将预设设置为超快(因为按照我所见,libx264非常慢)。我确定ffmpeg可以使用更有效的参数,并且我肯定会继续进行更多测试,但这已被确认可以正常工作:

ffmpeg -i "hello.wmv" -preset ultrafast -c:v libx264 -f ssegment -hls_flags delete_segments -segment_list play_file.m3u8 -segment_list_type hls -segment_list_size 0 out_%6d.ts 

在html视频标签中,只需使用:

 <source src="play_file.m3u8" type="application/x-mpegURL">

请注意以后可能遇到的任何人:如果在使用x-mpegURL类型时遇到“文件不支持错误”,那么源js出了点问题。确保具有hls.js(在我的情况下为videojs-contrib-hls.js),否则它将引发错误。花了我很长时间才弄清楚实际上不是问题,而是浏览器,而是html js。

我认为该解决方案几乎适用于ffmpeg支持的任何视频类型。只需更改输入文件,并在必要时弄乱编解码器。