一刀全解庖丁牛---音视频播放器(一)---全貌
共 1094字,需浏览 3分钟
·
2022-02-09 17:34
不识庐山真面目,只缘身在此山中
音视频编解码及渲染综述可参见文章:
倚天屠龙化长虹——音视频编解码与渲染
https://zhuanlan.zhihu.com/p/350594727多媒体音视频技术领域众多,其中凌驾于codec编解码之上的播放器占据重要地位,无论是视频播放、音视频通话、多人视频即时通话,短视频,直播......都必须使用播放器进行播放,本篇概述一下相关的总体结构;
根据支持的格式,播放器可以分为:
1)系统播放器,操作系统自带播放器,比如Android手机上存在mediaplayer,此播放器只能解析特殊容器及codec,比如MP4(H.264),如果放入RMVB、AVI格式则会报错不支持;
2)万能播放器,基本支持所有格式的播放器,甚至很多不常见的格式都支持,容器解复用部分可以使用ffmpeg进行解析,或者使用扩展解复用器进行提取音频、视频,而codec部分则判断是否是H.264或者H.265,进而软解码或硬加速解码;
播放器简单示意图如图所示,可以分成以下几个部分,容器内部放置了音频、视频,此处的音频、视频都是压缩过的码流,任何展示都必须进行解码,得到raw数据,视频最终需要YUV数据,音频PCM数据,最终两端各自进行渲染,并且音视频同步,故每个码流包packet必须包含一个时间戳,以此作为同步依据,有时候我们发现播放的时候音画不同步,就有可能是时戳问题或者同步策略,需要对症下药获取解决策略,播放器选择的不同,其展示效果可能存在不同;
容器可以认为是一个冰箱(MP4,FLV,MKV,AVI,M3U8,RTMP,RTSP)
第一步:打开冰箱(解复用),取出西瓜(视频),冰糖橘(音频),此时带皮不能吃(需解codec)
第二步:将西瓜、冰糖橘处理(解码codec),获取到真正的果肉(原始RAW数据)
第三步:开吃,吃水果得讲究掺着吃,吃几口冰糖橘,吃一口西瓜(渲染并音视频同步),掺着吃才够味儿
这里容易存在误区,视频码流、音频码流都是压缩后的相对很小的二进制数据,需要解codec获取RAW数据,RAW数据都是固定尺寸的,比如视频解码出720p YUV数据,解码出双声道44.1K采样率的PCM数据,所有的后处理都应该在RAW数据或渲染侧进行,比如视频增强(对比度增强、去噪、美颜、AR),音频变速变调等在PCM处理,压缩码流不能进行任何后处理;
本文从整体框架上解析了播放器的重要组件,其中每个组件都有非常多的细节知识需要了解,先整体再局部,层层递进……
相关内容已录制视频,欢迎大家观看,先整体把握知识结构更为重要!
如果喜欢,还请 关注、收藏、转发~~~十分感谢!