chrome网页视频抓取(从Chromium的源码third_Chrome中的媒体播放架构图)

优采云 发布时间: 2021-12-20 20:11

  chrome网页视频抓取(从Chromium的源码third_Chrome中的媒体播放架构图)

  Linux

  新增的视频/音频标签提供了直接在网页上播放音频和视频的能力,无需任何插件。因此,可以使用 HTML5 开发媒体播放器。互联网上也出现了许多 HTML5 播放器,例如 jPlayer。但是,各种浏览器支持的 HTML5 音频和视频格式非常有限。比如IE9只支持H.264,Firefox只支持VP8和Theora。谷歌浏览器被认为拥有最全面的支持格式。支持的视频格式包括H.264、VP8、Theora,音频包括Vorbis、MP3、AAC、WAV。这些格式对于播放网络在线音视频基本足够了(不包括flash),但是如果我们要播放本地音视频,就会遇到很多不支持的格式,比如rmvb视频,在国内很流行,而且高- 定义视频是最常见的 mkv 和 avi 格式目前并非所有浏览器都支持。从这一点来看,目前基于HTML5的播放器无法替代QQ视频和射击播放器等传统播放器。

  是否可以向浏览器添加对更多音频和视频格式的支持?分析了谷歌的开源浏览器Chromium,发现它的音视频解码是由FFmpeg提供的(代码在第三方\ffmpeg\),和Chrome是一样的,所以可以添加对更多类型的音频和音频的支持视频格式转换为 Chrome。

  Chrome 中的媒体播放架构如下图所示:

  

  Pipeline 是 Google 为 Chrome 开发的媒体框架引擎。 HTML5 视频/音频标签用于实现媒体播放。 FFmpeg 在其中提供了解复用器和*敏*感*词*。所以需要添加对音视频格式的支持,主要是修改FFmpeg。 .

  从Chromium源代码third_party\ffmpeg\chromium\config\Chrome\linux\ia32\config.h可以知道Chrome使用的FFmpeg配置选项。在原来的配置选项后添加以下选项:

  --enable-decoder='rv10,rv20,rv30,rv40,cook,h263,h263i,mpeg4,msmpeg4v1,msmpeg4v2,msmpeg4v3,amrnb,amrwb,ac3,flv' --enable-demuxer='rm,mpegvideo ,avi,avisynth,h263,aac,amr,ac3,flv,mpegts,mpegtsraw' --enable-parser='mpegvideo,rv30,rv40,h263,mpeg4video,ac3'

  使用新的配置选项重新配置编译FFmpeg,并使用生成的3个动态链接库avcodec-54.dll, avformat-54.dll, avutil-51. dll 替换 Chrome 中的原创文件。请注意,用于编译 FFmpeg 的 Chromium 源代码版本应与 Chrome 的版本相似。如果差异过大,更换库可能会导致Chrome无法正常运行。在Windows上编译FFmpeg的方法请参考我的另一篇文档《在Windows上用Chromium编译FFmpeg》。

  这样修改FFmpeg后,就可以在Chrome中使用HTML5 video/audio标签播放更多格式的音视频了。可以播放最常见的mkv、avi、flv、mov、amr。但是rmvb还是不能播放。用Visual Studio 2010跟踪后,我找到了原因。原来常见的rmvb电影视频编码是RV40,音频编码是COOK。这两种编*敏*感*词*类型在 Chrome 中没有定义。它们将在解析 rmvb 时使用。认为是未知的编解码类型(kUnknownVideoCodec和kUnknownAudioCodec),为此需要修改media\base\video_decoder_config.h和media\base\audio_decoder_config.h,将这两种格式分别添加到枚举类型VideoCodec和AudioCodec中,然后也如果要修改media\ffmpeg\,具体修改方法就不赘述了,直接看代码即可。经过这次修改,Chrome的媒体引擎可以识别RV40和COOK两种格式,普通的rmvb电影也可以播放了。

  由此可见,Chrome 播放更多格式的音视频并不难。当然,这只是第一步。还有很多问题。比如播放rmvb电影的时候,拖动进度条就会乱屏。兼容性和稳定性需要做更多的工作。

  窗口

  在 Windows 上的 Chromium 中编译 FFmpeg

  在谷歌开源浏览器Chromium中,HTML5音视频标签的实现使用开源多媒体软件FFmpeg提供解码,与Chrome相同。 FFmpeg源码位于Chromium源码树的third_party\ffmpeg\,但是在Windows上用Visual Studio 2010编译Chromium时,这部分FFmpeg代码不参与编译,而是直接使用预编译好的3个动态链接库(位于third_party\ffmpeg\chromium\binaries\Chromium\win\ia32\)。谷歌文档指出,目前Windows上的这部分FFmpeg代码只能借助MinGW手动编译。参考文档,经过实际验证,现将编译步骤总结如下。

  Google 对 FFmpeg 进行了修改。修改后的代码部分以patch的形式放在third_party\ffmpeg\chromium\patches\中。下载的Chromium源代码中的这些补丁已经打好了,可以直接编译FFmpeg。

  以下步骤在Windows7 64位验证,前提是安装并配置了Chromium开发环境,包括Visual Studio 2010、depot_tools等,假设所有软件安装在C盘,Chromium源代码位于C:\Chromium\。

  1. 从...下载 4 个文件... /third_party/mingw/: README.chromium, mingw-get-inst-20101030.exe, pthreads-w32-2-8-0- release .tar.gz、pthreads-w32.patch.txt。 README.chromium 是本文引用的主要文档。 mingw-get-inst-20101030.exe是MinGW的安装文件,版本比较老,可以到MinGW官网下载最新版本。

  2. 运行mingw-get-inst-20101030.exe,将MinGW安装到C:\MinGW\,安装时检查以下3项:

  C++ 编译器

  MSYS 基础系统

  MinGW 开发者工具包

  3. 下载并解压到 C:

  4. 修改系统环境变量PATH,添加如下路径:C:\MinGW\bin;C:\MinGW\msys\1.0\bin;C:\yasm-1.2.0

  5. 将第一步下载的pthreads-w32-2-8-0-release.tar.gz解压到C:

  6. 将第一步下载的pthreads-w32.patch.txt复制到C:\

  7.在Windows命令行窗口依次运行以下命令:

  c:

  cd pthreads-w32-2-8-0-release

  补丁 -p0

  使干净的 GC 成为静态

  cp pthread.h sched.h /mingw/include

  cp libpthreadGC2.a /mingw/lib

  调用“c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat”

  c:\MinGW\msys\1.0\msys.bat

  8. 出现MinGW/MSYS命令行窗口,在里面运行如下命令:

  cd /c/yasm-1.2.0/

  ./configure

  制作

  cd /c/chromium/src/third_party/ffmpeg/

  ./configure --disable-everything --enable-fft --enable-rdft --disable-network --disable-bzlib --disable-zlib --disable-swscale --disable-amd3dnow --disable- amd3dnowext --enable-shared --optflags=-O2 --enable-decoder='theora,vorbis,vp8' --enable-decoder='pcm_u8,pcm_s16le,pcm_f32le' --enable-demuxer='ogg,matroska,wav '--enable-parser=vp8 --arch=i686 --enable-yasm --extra-cflags=-m32 --extra-ldflags=-m32 --enable-pic

  make -j4

  FFmpeg的配置参数来自third_party\ffmpeg\chromium\config\Chromium\linux\ia32\config.h

  编译完成后会生成3个动态链接库:avcodec-54.dll、avformat-54.dll、avutil-51.dll,会用到当 Chromium 运行时。音频和视频解码。目前,Chromium 中的 FFmpeg 仅支持 Vorbis、Theora 和 VP8 *敏*感*词*。除了这三个之外,Chrome中的FFmpeg还支持H.264、AAC和MP3。如果我们想让 Chromium 的 HTML5 音频/视频标签支持更多的媒体格式,需要做的一件事就是重新配置和编译 FFmpeg。可以参考我的另一篇文章文章《让Chromium支持H.264视频。

  参考资料

  1)third_party\ffmpeg\chromium\README.chromium

  2)third_party\ffmpeg\chromium\patches\README.chromium

  3) ... ngw/README.chromium

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线