音视频基本概念

多线程好处

充分利用cpu资源的工具

多线程带来的问题

多线程管理问题

线程的互斥与同步

互斥

资源 有限多个人去抢

同步

有序进行

锁的种类

读写锁 读写分离

自旋锁 等待资源释放(例如)

可重入锁

SDL锁

互斥锁

SDL_CreateMutex/SDL_DestroyMutex

SDL_LockMutex/SDL_UnlockMutex

信号量

SDL_CreateCond/SDL_DestroyCond

SDL_CondWait/SDL_CondSignal

使用锁

复制代码
typedef struct _PacketQueue{
    AVPacketList *first_pkt, *last_pkt;
    int nb_packets;
    int size;
    SDL_mutex *mutex;
    SDL_cond *cond;
}PacketQueue;

基本概念

pts:Presentation timestamp 展示音频和视频时间戳 最终渲染也是根据这个时间戳

dts: Decoding timestamp 解码时间戳

I帧 (关键帧 帧内压缩)

p帧(向前参考帧 帧间压缩 只记录前一帧变化的部分)

B帧(帧间压缩 记录前一帧和后一帧的差别 可参考前后几帧 )

实际帧顺序 I B B P

存放顺序 I P B B

解码时间戳 1423

展示时间戳1234

有b帧的时候pts和dts不一致 无b帧的时候pts和dts是一致的

从哪获取pts

AVpacket 中的pts

AVFrame中的pts

av_frame_get_best_effort_timestamp()

时间基

tbr: 帧率

tbn: time base of stream 流的时间基

tbc: time base of codec 解码时间基

计算当前帧的pTS

PTS = PTS * av_q2d(video_stream->time_base)

下一帧

video_clockl: 预测的下一帧的pts

frame_delay: 1/ tbr

video_clock:音频当前播放的时间戳

音视频同步方式

视频同步到音频

音频同步到视频

音视频同步到外部时钟

视频同步到音频思路

一般的做法,展示第一帧视频帧后获得要显示的下一个视频帧的PTS 然后设置一个定时器,当定时器超时后,刷新新的视频帧,如此反复操作

相关推荐
陈一Tender3 分钟前
JavaWeb后端实战(登录认证 & 令牌技术 & 拦截器 & 过滤器)
java·开发语言·spring boot·mysql
Camel卡蒙3 分钟前
红黑树详细介绍(五大规则、保持平衡操作、Java实现)
java·开发语言·算法
jerryinwuhan7 分钟前
机器人模拟器(python)
开发语言·python·机器人
孤廖30 分钟前
吃透 C++ 栈和队列:stack/queue/priority_queue 用法 + 模拟 + STL 标准实现对比
java·开发语言·数据结构·c++·人工智能·深度学习·算法
我命由我1234532 分钟前
Android 对话框 - 对话框全屏显示(设置 Window 属性、使用自定义样式、继承 DialogFragment 实现、继承 Dialog 实现)
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
驰羽38 分钟前
[GO]GORM中的Tag映射规则
开发语言·golang
Full Stack Developme42 分钟前
java.net 包详解
java·python·.net
非凡的世界1 小时前
深入理解 PHP 框架里的设计模式
开发语言·设计模式·php
小龙报1 小时前
《算法通关指南---C++编程篇(3)》
开发语言·c++·算法·visualstudio·学习方法·visual studio
一叶飘零_sweeeet1 小时前
深入 Spring 内核:解密 15 种设计模式的实战应用与底层实现
java·spring·设计模式