基于FFmpeg的视频播放器之一:开篇

FFmpeg的研究几乎都是从ffplay开始的,ffplay是FFmpeg自带播放器,它的源码虽然只有一个文件,但是麻雀虽小五脏俱全,播放器的基本功能都有了。初看ffplay的源码,会感觉特别绕,跳转比较多。深入其中之后,就可以稍作修改封装,并添加UI,就可以实现自己播放器了。
关于ffplay的源码分析,可以参考博客:
https://zhuanlan.zhihu.com/p/44694286
https://www.cnblogs.com/leisure_chn/p/10301215.html

视频播放器播放一个互联网上的视频文件,需要经过以下几个步骤:解协议,解封装,解码视音频,视音频同步。如果播放本地文件则不需要解协议,为以下几个步骤:解封装,解码视音频,视音频同步。他们的过程如图所示。

 解协议:就是将流媒体协议的数据,解析为标准的相应的封装格式数据。视音频在网络上传播的时候,常常采用各种流媒体协议,例如HTTP,RTMP,或是MMS等等。这些协议在传输视音频数据的同时,也会传输一些信令数据。这些信令数据包括对播放的控制(播放,暂停,停止),或者对网络状态的描述等。解协议的过程中会去除掉信令数据而只保留视音频数据。例如,采用RTMP协议传输的数据,经过解协议操作后,输出FLV格式的数据。

解封装:就是将输入的封装格式的数据,分离成为音频流压缩编码数据和视频流压缩编码数据。封装格式种类很多,例如MP4,MKV,RMVB,TS,FLV,AVI等等,它的作用就是将已经压缩编码的视频数据和音频数据按照一定的格式放到一起。例如,FLV格式的数据,经过解封装操作后,输出H.264编码的视频码流和AAC编码的音频码流。

解码:就是将视频/音频压缩编码数据,解码成为非压缩的视频/音频原始数据。音频的压缩编码标准包含AAC,MP3,AC-3等等,视频的压缩编码标准则包含H.264,MPEG2,VC-1等等。解码是整个系统中最重要也是最复杂的一个环节。通过解码,压缩编码的视频数据输出成为非压缩的颜色数据,例如YUV420P,RGB等等;压缩编码的音频数据输出成为非压缩的音频抽样数据,例如PCM数据。

视音频同步:就是根据解封装模块处理过程中获取到的参数信息,同步解码出来的视频和音频数据,并将视频音频数据送至系统的显卡和声卡播放出来。
以上来着雷神博客: [总结]视音频编解码技术零基础学习方法

在上面的流程中,有以下几个线程:

解复用线程:读取本地文件或网络流,将解封装后的音频和视频数据分别保存到缓存队列中。
音频解码和播放线程:解码音频压缩数据为PCM数据,并通过SDL播放,这些都是在SDL的音频线程回调中实现的。
本播放器这里与ffplay源码有不同之处,ffplay的音频解码和播放分别放在了不同的线程中。
视频的处理分两种情况:
视频解码和渲染线程:解码视频压缩数据为图像数据,并直接通过SDL渲染。

视频解码线程:解码视频压缩数据为图像数据。
主线程:通过OpenGL渲染。

本播放器基于Qt5.12.6 MSVC 2017 32位+FFmpeg4.1
下面上一张播放器效果图:

 原文链接:https://blog.csdn.net/caoshangpa/article/details/124456949

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
基于ffmpeg的开源视频播放器是一种可以在各种操作系统上使用的免费软件,它利用ffmpeg库来解码播放视频文件。ffmpeg是一个强大的多媒体处理工具,可以处理各种视频音频格式。基于ffmpeg视频播放器可以支持多种视频格式,包括常见的MP4、AVI、MKV等,同时也能够提供高质量的音频视频播放体验。 这种开源视频播放器的主要优势是其灵活性和可扩展性。开发者可以根据自己的需要对播放器进行定制和扩展,添加新的功能或者改进现有功能。这使得基于ffmpeg视频播放器成为一个非常受欢迎和受欢迎的选择,因为它可以满足用户的不同需求。 除了支持多种视频格式外,基于ffmpeg视频播放器还具有许多其他功能,例如调整音量、播放列表、循环播放、字幕支持、画面调整等。用户可以根据自己的喜好和需求进行设置和调整。 基于ffmpeg视频播放器也具有良好的兼容性和稳定性。由于ffmpeg库经过了广泛的测试和验证,因此可以保证播放器在不同操作系统和设备上的良好运行。 总之,基于ffmpeg的开源视频播放器是一种功能强大,灵活性高,兼容性好的视频播放软件。它为用户提供高质量的视听体验,并且可以根据用户的需求进行定制和扩展。无论是作为普通用户还是开发者,基于ffmpeg视频播放器都是一个出色的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

草上爬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值