HTML5播放视频,并使用ffmpeg对视频转编码
<p>网页加入视频可以用h5自带的video标签,这里用一个jQuery封装优化好的video视频组件videojs。</p><p>videojs官方网站:https://docs.videojs.com/index.html</p>
<p>videojs下载:https://github.com/videojs/video.js/releases</p>
<p>这里有个问题是h5的video标签根据不同的浏览器兼容情况只支持三种编码的视频格式:</p>
<table class="dataintable">
<tbody>
<tr><th>格式</th><th>IE</th><th>Firefox</th><th>Opera</th><th>Chrome</th><th>Safari</th></tr>
<tr>
<td>Ogg</td>
<td>No</td>
<td>3.5+</td>
<td>10.5+</td>
<td>5.0+</td>
<td>No</td>
</tr>
<tr>
<td>MPEG 4</td>
<td>9.0+</td>
<td>No</td>
<td>No</td>
<td>5.0+</td>
<td>3.0+</td>
</tr>
<tr>
<td>WebM</td>
<td>No</td>
<td>4.0+</td>
<td>10.6+</td>
<td>6.0+</td>
<td>No</td>
</tr>
</tbody>
</table>
<p>通常我们使用MP4格式,但是MP4又分为“1.MPEG4(DivX)”、“2.MPEG4(Xvid)”、“3.AVC(H264)”三种类型。要想在h5播放成功,必须转换视频格式为H264才可以,好多做法是用格式工厂来转换,这样工作量大,比较麻烦,这里选择直接用<strong>ffmpeg在代码中进行转码 :</strong></p>
<p><strong style="line-height: 1.5">直接傻瓜命令安装,亲测可行:</strong></p>
<p> sudo add-apt-repository ppa:mc3man/trusty-media<br> sudo apt-get update<br> sudo apt-get install ffmpeg<br> ffmpeg -version</p>
<p>这样也是基本安装了FFmpeg完整版:</p>
<p><img src="https://img2018.cnblogs.com/i-beta/1759710/201911/1759710-20191111204901691-273773391.png" alt=""></p>
<p> </p>
<p> </p>
<p>安装完成可跳过下面的1中的编译安装步骤,直接到第2步使用FFmpeg命令解码视频</p>
<p><strong style="line-height: 1.5">1.安装ffmpeg需要安装下面三个包:</strong></p>
<ol>
<li><strong>yasm</strong>:是一个汇编器,用于ffmpeg编译。</li>
<li>X264:x264是采用GPL授权的视频编码自由软件。x264的主要功能在于进行H.264/MPEG-4 AVC的视频编码,而不是作为解码器(decoder)之用</li>
<li>ffmpeg主要用于音视频转码,以及增删水印等处理,是一款简单实用且强大的音视频处理工具。</li>
</ol>
<p><strong>(1).安装yasm</strong></p>
<p>wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz<br>tar -xzvf yasm-1.3.0.tar.gz<br>cd yasm-1.3.0<br>./configure<br>make<br>make install</p>
<p> </p>
<p><strong>(2).x264安装</strong></p>
<p>为了让ffmpeg使用h264编码。</p>
<p>ffmpeg中自带h264的解码,但是没有包含编码,所以再执行avcodec_find_encoder(CODEC_ID_H264)时返回的结果为NULL,需要额外添加x264支持h264的编码。</p>
<p>下载到这里:</p>
<p>https://code.videolan.org/videolan/x264/tree/stable</p>
<p>选择下载:</p>
<p>wget https://code.videolan.org/videolan/x264/-/archive/stable/x264-stable.tar.gz</p>
<p>编译/部署:</p>
<p>解压压缩包,cd进目录</p>
<p>./configure --disable-asm</p>
<p>make</p>
<p>sudo make install</p>
<p><strong>(3)、libogg </strong><br>libogg-1.3.1.tar.gz <br>Url:http://www.xiph.org/downloads/ <br>安装方法如下:</p>
<div id="" class="dp-highlighter">
<div class="bar">
<div class="tools">
<div class="cnblogs_code">
<pre>wget http://downloads.xiph.org/releases/ogg/libogg-1.3.4.tar.gz<br> ./configure <br> make
make install</pre>
</div>
</div>
</div>
</div>
<p><strong>(4)</strong><span style="line-height: 1.5">、<strong>libvorbis </strong></span></p>
<p>libvorbis-1.3.3.tar.gz <br>Url:http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.3.tar.gz</p>
<p>(libvorbis依赖于libogg, 所以libogg必须先于libvorbis安装)<br>安装方法如下:</p>
<div class="cnblogs_code">
<pre>wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.6.tar.xz</pre>
<pre> ./configure<br> make
make install</pre>
</div>
<p> </p>
<p>(5)、faad2 <br>faad2-2.7.tar.gz <br>http://www.audiocoding.com/downloads.html <br>安装方法</p>
<div id="" class="dp-highlighter">
<div class="bar">
<div class="tools">
<div class="cnblogs_code">
<pre>1 autoreconf -vif
2 ./configure--with-mp4v2 --enable-shared
3 make
4 make install</pre>
</div>
</div>
</div>
</div>
<p>(6)、faac <br>faac-1.28.tar.gz <br>http://www.audiocoding.com/downloads.html<br>安装方法:</p>
<div id="" class="dp-highlighter">
<div class="bar">
<div class="tools">
<div class="cnblogs_code">
<pre>1 tar zxvf faac-1.28.tar.gz
2 cd faac-1.28
3 ./bootstrap
4 ./configure 5 make
6 make install</pre>
</div>
</div>
</div>
</div>
<p>(7)、amr-nb <br>amrnb-10.0.0.0.tar.bz2 <br>http://ftp.penguin.cz/pub/users/utx/amr/ ( 从此处下载最新版本 )<br>安装方法:</p>
<div id="" class="dp-highlighter">
<div class="bar">
<div class="tools">
<div class="cnblogs_code">
<pre>1 ./configure 2 make
3 make install</pre>
</div>
</div>
</div>
</div>
<p>(8)、amr-wb <br>amrwb-7.0.0.1.tar.bz2 <br>http://ftp.penguin.cz/pub/users/utx/amr/ ( 从此处下载最新版本 )<br>安装方法:</p>
<div class="cnblogs_code">
<pre>1 ./configure 2 make
3 make install</pre>
</div>
<p> </p>
<p><strong>(9)安装ffmpeg</strong></p>
<p>官网下载:http://ffmpeg.org/download.html</p>
<p>wget https://ffmpeg.org/releases/ffmpeg-4.1.3.tar.bz2</p>
<p>解压:</p>
<p>bzip2 -d ffmpeg-4.1.3.tar.bz2</p>
<p>tar -xvf ffmpeg-4.1.3.tar</p>
<div class="cnblogs_code">
<pre>./configure --prefix=/usr/local/ffmpeg2 --enable-libmp3lame --enable-libvorbis --enable-gpl --enable-version3 --enable-nonfree --enable-pthreads --enable-libfaac --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-libxvid --enable-postproc --enable-ffserver --enable-<span style="color: rgba(0, 0, 0, 1)">ffplay
make
make install </span></pre>
</div>
<p> ffmpeg完整安装请参考:https://www.cnblogs.com/wanghetao/p/3386311.html</p>
<p>各模块介绍:https://wenku.baidu.com/view/94bfc009581b6bd97f19ea53.html</p>
<p><strong>2.用ffmpeg将视频转为html5支持的编码:</strong></p>
<p><br> (1)转码成ogv (Theora 1 Vorbis): .<br><br> ffmpeg -i WTE.mp4 -b 1500k -vcodec libtheora -acodec libvorbis -ab 160000 -g 30 output.ogv<br><br> (2)转码成webm (VP8 / Vorbis):<br><br> ffmpeg -i WTE.mp4 -b 1500k -vcodec libvpx -acodec libvorbis -ab 160000 -f webm -g 30 output.webm<br><br> (3)转码mp4 (H.264 / ACC):<br><br> ffmpeg -i WTE.mp4 -b 1500k -vcodec libx264 -vpre slow -vpre baseline -g 30 output.mp4 #有点问题,可用下面的命令代替<br> ffmpeg -i WTE.mp4 -b 1500k -vcodec h264 -preset slow -profile:v baseline -g 30 output.mp4</p>
<p> 参考自:https://www.doc88.com/p-7088891528596.html</p>
<p>HTML中一次加入三种格式:</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">video </span><span style="color: rgba(255, 0, 0, 1)">id</span><span style="color: rgba(0, 0, 255, 1)">="my-video"</span><span style="color: rgba(255, 0, 0, 1)"> loop </span><span style="color: rgba(0, 0, 255, 1)">='true' </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="video-js"</span><span style="color: rgba(255, 0, 0, 1)"> controls preload</span><span style="color: rgba(0, 0, 255, 1)">="auto"</span><span style="color: rgba(255, 0, 0, 1)"> width</span><span style="color: rgba(0, 0, 255, 1)">="500"</span><span style="color: rgba(255, 0, 0, 1)"> height</span><span style="color: rgba(0, 0, 255, 1)">="400"</span><span style="color: rgba(255, 0, 0, 1)">
poster</span><span style="color: rgba(0, 0, 255, 1)">="{% static'images/m.jpg' %}"</span><span style="color: rgba(255, 0, 0, 1)"> data-setup</span><span style="color: rgba(0, 0, 255, 1)">="{}"</span><span style="color: rgba(255, 0, 0, 1)"> autoplay</span><span style="color: rgba(0, 0, 255, 1)">="autoplay"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">source </span><span style="color: rgba(255, 0, 0, 1)">src</span><span style="color: rgba(0, 0, 255, 1)">="{{ MEDIA_URL }}video/output.mp4"</span><span style="color: rgba(255, 0, 0, 1)"> type</span><span style="color: rgba(0, 0, 255, 1)">="video/mp4"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">source </span><span style="color: rgba(255, 0, 0, 1)">src</span><span style="color: rgba(0, 0, 255, 1)">="{{ MEDIA_URL }}video/output.webm"</span><span style="color: rgba(255, 0, 0, 1)"> type</span><span style="color: rgba(0, 0, 255, 1)">="video/webm"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">source </span><span style="color: rgba(255, 0, 0, 1)">src</span><span style="color: rgba(0, 0, 255, 1)">="{{ MEDIA_URL }}video/output.ogv"</span><span style="color: rgba(255, 0, 0, 1)"> type</span><span style="color: rgba(0, 0, 255, 1)">="video/ogg"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">p </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="vjs-no-js"</span><span style="color: rgba(0, 0, 255, 1)">></span> To view this video please enable JavaScript, and consider upgrading to a web browser that <span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">a </span><span style="color: rgba(255, 0, 0, 1)">href</span><span style="color: rgba(0, 0, 255, 1)">="http://videojs.com/html5-video-support/"</span><span style="color: rgba(255, 0, 0, 1)"> target</span><span style="color: rgba(0, 0, 255, 1)">="_blank"</span><span style="color: rgba(0, 0, 255, 1)">></span>supports HTML5 video<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">p</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">video</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<p> 这样就可以兼容大部分浏览器,至此就可以在h5中畅通无阻地播放视频了</p>
<p> </p>
<p>以下简单总结下ffmpeg命令参数:</p>
<p>-i 指定要转换视频的源文件<br>-s 视频转换后视频的分辨率<br>-vcodec 视频转换时使用的编解码器(-codecs)<br>-r 视频转换换的桢率(默认25桢每秒)<br>-b 视频转换换的bit率<br>-ab 音频转换后的bit率(默认64k)<br>-acodec 制度音频使用的编码器(-codecs)<br>-ac 制定转换后音频的声道</p>
<p>-ar 音频转换后的采样率</p>
<p>-an 禁用音频</p>
<p>-vn 禁用视频</p>
<p>-acodec copy 复制音频,不转码</p>
<p>-vcodec copy 复制视频,不转码</p>
<p> </p>
<p> </p>
<p><strong>3.抛弃转码繁琐直接使用Chimee</strong></p>
<p>后来意外发现一个兼容性更好的播放插件Chimee,兼容多种视频格式,MP4、M3U8、FLV等多种媒体格式,同时它也帮我们解决了大部分的兼容性、差异化问题,包括全屏、自动播放、内联播放、直播解码等常见媒体播放需求,不用再自己去转码,官网有比较详细的使用文档,可自行去研究:</p>
<p>http://chimee.org/docs/index.html</p>
<p> 4.在推荐一款不错的视频播放器 flowplayer,官网有demo:</p>
<p>https://flowplayer.com/</p><br><br>
来源:https://www.cnblogs.com/pozhu15/p/11833730.html
頁:
[1]