音视频常见播放器框架分析

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播放器-音视频流媒体高级开发 学习资料、视频教程

常见的音视频封装和编码

常见的的音视频封装和编码格式是怎么样的?
封装格式的推出机构和领域?
封装格式数据结构是什么样的?
视频播放器原理
播放器在显示上,可以分为DirectShow框架的工具,比如VLC,mplayer;非DirectShow框架的工具,如暴风影音,potplayer
哪些工具可以查看音视频文件的信息?
Elecard Format Analyer可以看出来数据是如何封装到一起的。
 
 
 

以上是关于音视频常见播放器框架分析的主要内容,如果未能解决你的问题,请参考以下文章

常用视频格式与视频编解码标准介绍 转

Windows & Esp32基于 libjpeg-9e 编解码库的视频播放器

音视频编解码技术基础知识总结

Android MediaCodec硬件解码视频播放

Java:编写自定义视频编解码器的指南 [关闭]

h5 video 视频播放开发 和 问题集合