平台支持vp8硬件解码,播放器就可以支持吗
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了平台支持vp8硬件解码,播放器就可以支持吗相关的知识,希望对你有一定的参考价值。
参考技术A WebRTC是一个实时的视频通信功能,android平台上的Chrome也提供了支持,在Chrome 29之后WebRTC功能趋于稳定,所以在之后的版本中默认被打开。也就是说不需要在”chrome://flags”中手动去打开该功能。本节主要介绍一下android平台上Chrome支持WebRTC硬件加速编解码的现状:
首先介绍一下WebRTC的视频传输的大致流程,摄像头在一端拍下图片,然后编码,通过RTP传输给另一端,另一端接收到图片后,解码,最后显示到屏幕上。该过程反复进行就实现了端对端的视频通信。
这里重点介绍一下编码和解码,Google实现的WebRTC只支持VP8编解码,不支持当今流行的H264(由于专利费用问题),VP8编码是Google开发的一种编码,已经开源了,开发者可以免费使用,更多信息可以参考http://www.webmproject.org/code/
在Android平台上WebRTC的视频编解码共有三种方案,即调用第三方编解码库(libvpx)和调用Android平台上的MediaCodec编解码,而MediaCodec编解码又可细分为两种,其一是MediaCodec的软件解码,其二是真正的GPU硬件加速编解码。MediaCodec采用软件或硬件编解码取决于平台GPU有没有实现VP8的编解码,如果平台支持,MediaCodec自然就会调用硬件去加速编解码,否则MediaCodec就会调用软件的编解码来完成。据写本文为止,只有三星的Nexus10支持VP8的硬件解码。至于VP8的硬件编码,目前还没有厂商支持,因为VP8的解码除了WebRTC需要之外,播放VP8编码的视频也可以受益,而VP8的硬件编码只有WebRTC有该需求,所以厂商在支持解码比编码的动力更强一些。在WebRTC实现的早期阶段(chrome 30之前),Android平台上都是采用第一种方式(调用libvpx)来完成编解码的。在chrome 31及其以后就会调用平台自带的MediaCodec完成编解码。
下面介绍一下这三种解码的效率如何:采用MediaCodec的硬件加速解码与libvpx相比,fps没有明显的变化保持在28左右,但是cpu的利用率可以减少一半,这样就可以解放CPU去执行其他的任务,UI响应会更及时,带来更好的用户体验。
Android视频框架 Vitamio 打造自己的万能播放器
Vitamio 是一款 Android 与 iOS 平台上的全能多媒体开发框架,全面支持硬件解码与 GPU 渲染。
Vitamio 功能强大,能够流畅播放720P甚至1080P高清MKV,FLV,MP4,MOV,TS,RMVB等常见格式的视频,还可以在 Android 与 iOS 上跨平台支持 MMS, RTSP, RTMP, HLS(m3u8) 等常见的多种视频流媒体协议,包括点播与直播。
1Vitamio的下载
官方下载:
https://www.vitamio.org/Download/
官方文档:
https://www.vitamio.org/docs/API/
2.Vitamio的VideoView控件
VideoView用于播放视频文件,可以加载各种来源的图像(如资源或ContentProvider),注意计算视频尺寸,以便在任意布局管理器中使用,它还提供了诸如缩放等显示选项。
VideoView也提供封装了许多MediaPlayer的方法,例如getVideoWidth、setSubShown。
3.Vitamio的用法
(1)引入vitamio框架到 Android Studio 或者 Eclipse
(2)在布局中定义VideoView
<io.vov.vitamio.widget.VideoView
android:id="@+id/vv"
android:layout_width="match_parent"
android:layout_height="match_parent" />
(3)MainActivity中调用
// 插件vitamio框架检查是否可用
if (!LibsChecker.checkVitamioLibs(this)) {
return;
}
final VideoView vv = (VideoView) findViewById(R.id.vv);
vv.setVideoPath("http://192.168.1.20:8080/movie.mp4"); //设置播放路径
vv.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
vv.start();
}
});
// 设置video的控制器
vv.setMediaController(new MediaController(this));
(4)使用Vitamio一定要在清单文件额外初始化InitActivity
<!-- 初始化InitActivity,固定写法 -->
<activity android:name="io.vov.vitamio.activity.InitActivity"></activity>
注意:InitActivity不要和MainActivity混淆。
4.Vitamio框架的原理
(1)音视频解码 原理:
基本上都使用了开源项目FFmpeg(C语言开发的),包括windows平台的很多播放器都用到了。
FFmpeg源码下载地址:http://ffmpeg.mplayerhq.hu/
(2)Vitamio也是使用了FFmpeg开源项目。
以上是关于平台支持vp8硬件解码,播放器就可以支持吗的主要内容,如果未能解决你的问题,请参考以下文章
QT软件开发-基于FFMPEG设计视频播放器-支持软解与硬解