24.Eclipse下Ndk开发_项目结构重构(ffmpeg音视频同步播放)

简介: 使用生产者消费者模式重构项目,实现音视频同步播放音视频同步涉及到的知识1.IPB帧a) I帧:关键帧,I 帧图像采用帧内编码方式,帧内压缩,包含完整的画面b) P帧:差别帧,与上一个关键帧的差别,需要缓存上一帧才能得到完整的画面c) B帧:双...

使用生产者消费者模式重构项目,实现音视频同步播放

音视频同步涉及到的知识

1.IPB帧

a) I帧:关键帧,I 帧图像采用帧内编码方式,帧内压缩,包含完整的画面
b) P帧:差别帧,与上一个关键帧的差别,需要缓存上一帧才能得到完整的画面
c) B帧:双向差别帧,与前后两帧的差别,需要缓存上一帧和下一帧 才能得到完整画面,P 帧和 B 帧图像采用帧间编码方式

2.如何判断帧的类型

AVFrame->pic_type
AVPacket->flags & AV_PKT_FLAG_KEY

3.DTS和PTS

DTS:Decoding Time Stamp 解码时间戳
PTS:Presentation Time Stamp 显示时间戳

DTS 告诉我们该按什么顺序解码这几帧图像,PTS 告诉我们该按什么顺序显示这几帧图像

音视频流中的每一帧都有时间相关的信息,其中PTS是播放时间,DTS是解码时间。音频的PTS和DTS是一致的,而某些视频各种中可能会存在DTS和PTS不一致的帧,我们这里主要通过PTS来控制播放时间。对解码后的AVFrame使用av_frame_get_best_effort_timestamp可以获取PTS。

为什么说音频的PTS和DTS是一致的,而某些视频各种中可能会存在DTS和PTS不一致的帧?当视频流中没有 B 帧时,通常 DTS 和 PTS 的顺序是一致的。但如果有 B 帧时,解码顺序和播放顺序就不一致了,原因在于B 帧图像采用双向时间预测,采用了未来帧作为参考,因此 MPEG-2 编码码流中图像帧的传输顺序和显示顺序是不同的。在视频流中,先到来的 B 帧无法立即解码,需要等待它依赖的后面的 I、P 帧先解码完成,这样一来播放时间与解码时间不一致,顺序被打乱。所以视频中可能存在不一致的情况,而音频没有类似视频中 B 帧,不需要双向预测,所以音频帧的 DTS、PTS 顺序是一致的

4.FFmpeg中的时间单位

time_base 时间单位(时间基)
不同的结构体又不同的时间单位,AVStream stream中
time = stream->duration
stream->time_base

5.音视频同步的三种方案

a) 音频同步视频
b) 视频同步音频
c) 标准时间(同步音频和视频到外部时钟)

相关文章
|
XML 开发工具 Android开发
FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频
ExoPlayer最初是为了解决Android早期MediaPlayer控件对网络视频兼容性差的问题而推出的。现在,Android官方已将其升级并纳入Jetpack的Media3库,使其成为音视频操作的统一引擎。新版ExoPlayer支持多种协议,解决了设备和系统碎片化问题,可在整个Android生态中一致运行。通过修改`build.gradle`文件、布局文件及Activity代码,并添加必要的权限,即可集成并使用ExoPlayer进行网络视频播放。具体步骤包括引入依赖库、配置播放界面、编写播放逻辑以及添加互联网访问权限。
1709 1
FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频
|
NoSQL 编译器 C语言
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。高级技巧包括内存检查、性能分析和符号调试。通过实践案例学习如何有效定位和解决问题,同时注意保持耐心、合理利用工具、记录过程并避免过度调试,以提高编程能力和开发效率。
598 1
|
Web App开发 5G Linux
FFmpeg开发笔记(四十四)毕业设计可做的几个拉满颜值的音视频APP
一年一度的毕业季来临,计算机专业的毕业设计尤为重要,不仅关乎学业评价还积累实战经验。选择紧跟5G技术趋势的音视频APP作为课题极具吸引力。这里推荐三类应用:一是融合WebRTC技术实现视频通话的即时通信APP;二是具备在线直播功能的短视频分享平台,涉及RTMP/SRT等直播技术;三是具有自定义动画特效及卡拉OK歌词字幕功能的视频剪辑工具。这些项目不仅技术含量高,也符合市场需求,是毕业设计的理想选择。
442 6
FFmpeg开发笔记(四十四)毕业设计可做的几个拉满颜值的音视频APP
|
Android开发 计算机视觉 C++
FFmpeg开发笔记(五十一)适合学习研究的几个音视频开源框架
音视频编程对许多程序员来说是一片充满挑战的领域,但借助如OpenCV、LearnOpenGL、FFmpeg、OBS Studio及VLC media player等强大的开源工具,可以降低入门门槛。这些框架不仅覆盖了计算机视觉、图形渲染,还包括多媒体处理与直播技术,通过多种编程语言如Python、C++的应用,使得音视频开发更为便捷。例如,OpenCV支持跨平台的视觉应用开发,FFmpeg则擅长多媒体文件的处理与转换,而VLC media player则是验证音视频文件质量的有效工具。
771 0
FFmpeg开发笔记(五十一)适合学习研究的几个音视频开源框架
|
达摩院 语音技术 异构计算
语音识别-免费开源的语音转文本软件Whisper的本地搭建详细教程,python版本是3.805,ffmpeg是专门处理音视频的,ffmpeg的下载链接,现在要求安装python和ffmpeg
语音识别-免费开源的语音转文本软件Whisper的本地搭建详细教程,python版本是3.805,ffmpeg是专门处理音视频的,ffmpeg的下载链接,现在要求安装python和ffmpeg
|
存储 编解码 Linux
rodert教你学FFmpeg实战这一篇就够了 - 音视频处理入门篇
rodert教你学FFmpeg实战这一篇就够了 - 音视频处理入门篇
421 1
|
存储 Oracle Java
Java面试题:描述如何使用Eclipse或IntelliJ IDEA进行Java开发?
Java面试题:描述如何使用Eclipse或IntelliJ IDEA进行Java开发?
251 0
C#进程调用FFmpeg操作音视频
因为公司需要对音视频做一些操作,比如说对系统用户的发音和背景视频进行合成,以及对多个音视频之间进行合成,还有就是在指定的源背景音频中按照对应的规则在视频的多少秒钟内插入一段客户发音等一些复杂的音视频操作。本篇文章主要讲解的是使用C#进程(Process)调用FFmpeg.exe进行视频合并、音频合并、音频与视频合并成视频这几个简单的音视频操作。
328 0
|
开发工具 Android开发 git
合作开发(Eclipse+git +码云)
合作开发(Eclipse+git +码云)
358 0

推荐镜像

更多