音视频常见播放器框架分析
Posted 攻城狮百里
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了音视频常见播放器框架分析相关的知识,希望对你有一定的参考价值。
音视频面试必问:如何设计一个播放器
1.常见播放器框架分析
2.如何解决播放端延迟的问题
3.音视频如何做同步
4.快进、快退、逐帧播放如何实现
音视频开发技术精讲《常见播放器框架分析》
播放器框架
SDL2播放音频
使用SDL播放解码后的音频数据,SDL播放音频数据的流程
如下:
播放器-播放做了哪一些事情?
打开媒体文件
分析媒体流成分
查找相应的解码器
数据读取线程-读取数据包并放入包缓存队列 av_read_frame
解码线程-解码数据包得到数据帧并放入帧缓存队列
audio_ thread 音频解码线程
video_ thread视频解码
音频回调接口-读取音频数据帧
sdl_audio_callback
视频刷新线程-以音频为基准做同步显示图像
video_refresh
播放器-静音和音量控制的本质
音量控制的本质:控制采样点的幅值
静音,将采样点数值置为0
音量+,提升采样点的幅值
音量-,降低采样点的幅值
播放器-静音和音量控制的本质
ffplay控制音量的方式
最大音量:输出解码后的原始数据
静音:即是输出数值为0的数据 toggle_ mute( )
改变音量:通过SDL_ MixAudio改变解码后数据的幅值update_ volume()
比如下图所示(sdI audio_ callback函数内) :
以下是ffplay的方式供参考
播放器-快进快退
快进和快退的本质是seek到某个点重新开始播放。
- 跳转到指定的数据位置avformat_ seek_ file
- 清空packet队列
- 清空frame队列(在ffplay里面是通过serial去控制)
- 清空解码器
seek/快进/快退: stream_ seek()/ avformat_ seek_ file()
seek播放流程
- 左右箭头产生seek事件;
- 将文件seek到指定时间点,清空packet队列,刷新解码器.
- 切换时钟序列(ffplay)
注意:不同的容器(比如MP4和FLV) seek的机制是不一样的。有些容器
seek的时间会快些,有些则相对耗时。这个和容器的存储结构有关系。
FFmpeg/WebRTC/RTMP/RTSP/HLS/RTP播放器-音视频流媒体高级开发 学习资料、视频教程
常见的音视频封装和编码
以上是关于音视频常见播放器框架分析的主要内容,如果未能解决你的问题,请参考以下文章