Android视频滤镜添加硬解码方案

这篇博客介绍了Android平台上硬解码视频播放和编辑的基础概念,包括音视轨、编解码、软硬解码,以及Extractor、Codec、Muxer等组件的使用。重点讨论了MediaCodec在硬解码中的作用,以及如何在硬解码情况下添加滤镜。内容涵盖H.264/AVC、Surface和相关视图组件,以及Yuv、OpenGL和GLSL在处理视频数据中的角色。
摘要由CSDN通过智能技术生成

由于工作的需求,研究过了一段时间的Android 的音视频播放渲染以及编辑方面的知识,这里就自己一些浅薄的了解对所了解做一个简单的介绍和记录,如有不对的地方请指正!同时也会记录下硬件解码的情况下完成滤镜的添加。

这里以MP4格式的视频作为介绍,因为在实际的移动开发中,传输播放渲染的基本都是MP4文件。

这里先介绍一些基础概念,当理解了这些,再去查看以及学习关于音视频的一些著名开源项目,如Grafika,ExoPlayer,IJKPlayer,GPUImage等开源项目学习会更加方便!

安利一下自己的库,基于MediaCodec的硬件解码的添加滤镜的库
PinFilter
实现了滤镜的添加,预览,播放,录制功能。

基础概念

音视轨,编解码,软硬解码

VideoTrack(视轨),AudioTrack(音轨)分别对应视频文件的画面和声音的数据存储,一般来说常见的MP4一般都是一条VideoTrack,一条AudioTrack。当然有一些左右声道,背景音或存在多条AudioTrack的情况存在。


无论是声音信息还是图像信息储存在MP4中都是经过编码(encode)的,可以理解为按照一定规则压缩过的。所以你要进行MP4的播放,就需要将图像信息和音频信息取出来,然后经过解码(decode)还原成原始的可供渲染和播放的音视频单元。


以上就是编解码的基础概念,事实上音视频数据在MP4中是以Box的形式存储的,感兴趣的可以自己搜索学习。而MP4无论播放还是处理音视轨都是单独分开的,所以这就需要你将音轨和视轨从MP4文件中分离出来,而这个分离的过程就称之为解复用,所以同理,将音视轨重新合在一起的过程就称之为复用


所以可以看出来,我要进行视频播放需要做的就是解复用取得音视轨,然后分别进行解码还原成原始可显示的数据,接着去渲染和播放,解复用 -》解码 -》播放。
我们如果要进行视频编辑就需要,解复用 -》解码 -》处理数据-》编码-》复用生成MP4。


而使用代码运行,将Video/AudioTrack解码的方式称为软解码,软解码最出名的就是开源项目FFMPEG,基本上所有的视频领域都有它的影子。
同样,由于软解码/编码是运行在CPU中的,所以无论是在cpu,内存的使用率还是解码效率上面都可能存在一些限制和瓶颈。因此,ffmpeg的实际运用中的优化也是很重要的。


事实上,除了软件码以外,手机,PC等视频播放设备上都存在硬件解码器(一种寄存器)来专门做视频的播放工作,我们把调用硬件解码器进行解码的方式称为硬解码。硬解码无疑在效率上更加高效,但是由于各大厂商的缘故,对于硬件解码器都有自己的调整,所以在硬解码的时候,各种机器的适配就显得尤为重要

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值