音视频面试必问:如何设计一个播放器

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

音视频常见播放器框架分析相关推荐

  1. C#基于WindowsMediaPlayer实现音视频文件播放器

    原文地址:http://www.c-sharpcorner.com/uploadfile/e628d9/playing-audio-and-video-files-using-C-Sharp/ 目的 ...

  2. Android播放器框架分析之AwesomePlaye

    详见:http://blog.csdn.net/mirkerson/article/details/40184479</> 转载于:https://www.cnblogs.com/1995 ...

  3. ffmpeg播放器 android,Android使用FFmpeg(六)--ffmpeg实现音视频同步播放

    关于 准备工作 正文 依旧依照流程图来逐步实现同步播放: 从流程图可以看出,实现同步播放需要三个线程,一个开启解码的装置得到packet线程,然后分别是播放音频和视频的线程.这篇简书是以音频播放为基准 ...

  4. 高德智慧景区随身听播放器框架设计与实现

    简介:我们开发选型并没有采用传统的TTS技术(由文本内容生成机器语音),而是采用了更加通用音频格式(比如mp3),作为讲解的音频输入源,方便讲解者进行二次创作.本文将简单回顾高德智慧景区随身听播放器的 ...

  5. 【网络通信 -- 直播】音视频常见封装格式 -- MEPG2 TS

    [网络通信 -- 直播]音视频常见封装格式 -- MEPG2 TS [1]相关码流基本概念 ES 流(Elementary Stream)基本码流,直接取自编码器的数据流,可以为音频(AAC 等).视 ...

  6. Qt仿腾讯视频简易播放器 【源码开源】

    Qt仿腾讯视频简易播放器1.0.0.0 开源 文章目录 Qt仿腾讯视频简易播放器1.0.0.0 开源 (一).控件介绍 (二).效果图 工程代码 Qt交流群 结尾 (一).控件介绍 Qt仿腾讯视频简易 ...

  7. 音视频常见概念:软解硬解、IBP帧、GOP、YUV编码

    音视频常见概念 软解与硬解 IBP帧 GOP YUV编码 RGB与YUV相互转换 参考资料 软解与硬解 视频解码分为软解和硬解. 所谓"软解"就是通过软件让 CPU 进行视频解码处 ...

  8. android 播放器架构,Android播放器框架设计系列-1

    视频播放器框架已经非常成熟了,但是由于项目需求各种各样,第三方库使用起来需要大量修改定制,并且还会出现各种问题,因此把之前项目中开发的模块提取出来进行完善扩展,写了一套自研的播放框架,并且引入Jetp ...

  9. 音视频转码器产品规格

    音视频转码器产品规格 QQ:16614119 一.            产品简介: 音视频转码器是一套商业级的实时.非实时转码产品.提供常用编码格式之间的转换:支持远程控制转码任务:支持多种输入输出 ...

  10. android 视频播放器通用的编码框架,Android播放器框架设计系列-1

    视频播放器框架已经非常成熟了,但是由于项目需求各种各样,第三方库使用起来需要大量修改定制,并且还会出现各种问题,因此把之前项目中开发的模块提取出来进行完善扩展,写了一套自研的播放框架,并且引入Jetp ...

最新文章

  1. windows pxe 安装linux,菜鸟学Linux 第103篇笔记 pxe自动化安装linux
  2. [译]Kotlin + buildSrc:更好的管理Gadle依赖
  3. 架构师之路 — 部署架构 — 超大规模负载均衡架构演进
  4. android信鸽推送demo_【厚积薄发】手游推送方案
  5. 【数据结构与算法】之深入解析“分发糖果”的求解思路与算法示例
  6. 工业交换机为何要老化测试
  7. ElasticSearch中的简单查询
  8. java 同步和异步_知道什么叫同步和异步吗?
  9. RTP协议与RTCP协议简介
  10. Hadoop生态系统各组件功能
  11. leedcode每日一题:860. 柠檬水找零
  12. 新手指南:到国外域名注册商注册域名
  13. 前端实现图片验证码效果(数字和字母)
  14. sysbench 压力测试工具(实战)
  15. 卸妆·回归:“超级医保局时代“的医院信息化转型
  16. 图像分类算法优化技巧
  17. 项目实战第三篇:STM32多功能智能小车硬件选型2(传感器选型篇)
  18. 基础(一):SCSI硬盘与IDE硬盘有什么区别
  19. mo管理器初始化python失败_python~异常及初始化包
  20. Springboot 通过流返回文件

热门文章

  1. 变频器压频比的正确设置方法
  2. 基于JSP的旅游网站论文
  3. 韦东山《嵌入式Linux应用开发完全手册》配套视频教程
  4. 数字盲打怎么练_键盘上的数字键怎么练才能盲打?
  5. CAN详解--各家CAN分析仪与软件的比较
  6. 力软下拉框多选_力软快速开发平台:方便快捷的Web开发平台
  7. Linux x86-64 IOMMU详解(一)——IOMMU简介
  8. matlab画图(plot)命令。长期更新!
  9. BZOJ-4706 B君的多边形 OEIS
  10. CSDN 个人博客域名设置