赞
踩
本章节主要以本地音视频播放为例,简要描述讲解一个基本的播放器中,音视频播放如何实现同步的。
通用媒体播放器框架
其中各个组件模块:
1、Media Demux: 进行媒体文件的解析,分别解析出音频流数据包和视频流数据包。主要使用 libavformat库中的函数。
2、Video Decoder:视频解码器,解码后的视频帧放入到帧队列,主要使用libavcodec库中的函数。
3、Audio Decoder:音频解码器,解码后的PCM数据放入缓存队列,主要使用libavcodec库中的函数。
4、Video Post-process:视频帧后处理,通常是进行色彩格式转换、大小缩放、特效等处理,主要使用libswscale库中的函数。
5、Audio Post-process:音频帧后处理,通常是重采样、均衡器、变声等处理,主要使用libswresample库中的函数。
6、Video Display:视频帧显示,正常播放时直接显示到界面控件。这个是跟平台相关的处理,通常使用 OpenGL进行视频帧渲染,包括一些特效处理。
7、Audio Render:音频设备输出,通常的音频设置输出每播放完一段会有相应的回调通知。这个是跟平台相关的处理,需要调用系统平台支持的一些API进行音频输出,如果要跨平台处理,可以考虑使用 OpenSL接口(前提是平台支持)
另外:
(1)音视频同步控制(AV Sync Control)通常都是在音视频数据解码后进行同步控制。
(2)很多时候,视频后处理(Video Post Process) 和 视频显示(Video Display) 模块可以集中在一个模块中,直接在GPU中进行处理。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。