音视频基本概念

多线程好处

充分利用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 然后设置一个定时器,当定时器超时后,刷新新的视频帧,如此反复操作

相关推荐
SimonKing1 小时前
OpenCode AI辅助编程,不一样的编程思路,不写一行代码
java·后端·程序员
FastBean2 小时前
Jackson View Extension Spring Boot Starter
java·后端
Seven973 小时前
剑指offer-79、最⻓不含重复字符的⼦字符串
java
皮皮林55112 小时前
Java性能调优黑科技!1行代码实现毫秒级耗时追踪,效率飙升300%!
java
冰_河12 小时前
QPS从300到3100:我靠一行代码让接口性能暴涨10倍,系统性能原地起飞!!
java·后端·性能优化
桦说编程15 小时前
从 ForkJoinPool 的 Compensate 看并发框架的线程补偿思想
java·后端·源码阅读
躺平大鹅17 小时前
Java面向对象入门(类与对象,新手秒懂)
java
初次攀爬者18 小时前
RocketMQ在Spring Boot上的基础使用
java·spring boot·rocketmq
花花无缺18 小时前
搞懂@Autowired 与@Resuorce
java·spring boot·后端