
视频播放器
Tom哈哈
这个作者很懒,什么都没留下…
展开
-
9、ffplay音频的波谱图及频谱图源码分析
ffplay音频的波谱图及频谱图源码分析当ffplay指定启动参数-showmode [0/1/2]时,值为0,正常播放(默认);值为1,显示波形;值为2,显示频谱图。在ffplay中由show_mode变量控制显示方式取值分别为:SHOW_MODE_VIDEO/SHOW_MODE_WAVES/SHOW_MODE_RDFT在函数video_display(…)中判断是否有音频流并且show_...原创 2019-10-23 14:43:56 · 1961 阅读 · 0 评论 -
8、ffplay字幕解码及渲染源码分析
ffplay字幕解码及渲染源码分析字幕解码逻辑static int subtitle_thread(void *arg){ VideoState *is = arg; Frame *sp; int got_subtitle; double pts; for (;;) { if (!(sp = frame_queue_peek_writ...原创 2019-10-23 14:43:22 · 464 阅读 · 0 评论 -
7、ffplay视频渲染模块
ffplay视频渲染模块源码分析main函数中,在stream_open(…)之后调用event_loop()不断的从SDL中查看是否有SDL事件发生,如果有事件发生就取出事件处理,否循环从pictq队列中取出AVFrame渲染到屏幕上。static void refresh_loop_wait_event(VideoState *is, SDL_Event *event) { do...原创 2019-10-23 14:42:55 · 595 阅读 · 0 评论 -
6、ffplay音视频同步原理
ffplay音视频同步原理以视频同步到音频上进行分析:音频播放过程中更新音频pts视频播放渲染过程中更新视频pts视频渲染过程中发现pts大于音频pts则sleep一定时间视频解码出AVFrame发现小于音频的pts还会进行丢帧处理由于以音频的pts为主时钟,音频播放只要按照速度一直播放即可。视频播放就要时刻要留意音频的pts,当视频播放慢了,就要去追赶音频。当视频播放快了,要停下...原创 2019-10-23 14:42:20 · 331 阅读 · 0 评论 -
5、ffplay音频解码模块源码分析
ffplay音频解码模块源码原理分析一、初始化二、音频数据写入输出设备sdl_audio_callback(…)输出数据的回调函数,将被SDL循环调用。//参数stream为音频缓冲区,len为缓冲区长度,将音频数据拷贝到stream,由SDL将stream中的数据送入硬件播放//opaque 为userdata,在函数audio_open(...)中赋值给SDL_AudioSpec结构...原创 2019-10-23 14:41:52 · 480 阅读 · 1 评论 -
4、ffplay解码线程源码分析
ffplay解码线程原理分析一、视频解码模块1、从AVPacket 解码出AVFramestatic int decoder_decode_frame(Decoder *d, AVFrame *frame, AVSubtitle *sub) { int ret = AVERROR(EAGAIN); for (;;) { AVPacket pkt; ...原创 2019-10-23 14:41:16 · 360 阅读 · 0 评论 -
3、ffplay同步时钟源码分析
ffplay同步时钟源码分析同步时钟用于音视频同步(A-V sync)A-V同步可以选择以音频同步、视频同步、外部时钟同步一、数据结构typedef struct Clock { double pts; /* 渲染时间,单位秒 */ double pts_drift; /* 渲染时间-当前更新时间。这个写法真奇葩?^~^*/ double...原创 2019-10-23 14:40:42 · 415 阅读 · 0 评论 -
2、ffplay FrameQueue源码分析
ffplay FrameQueue 源码分析一、FrameQueue结构typedef struct FrameQueue { Frame queue[FRAME_QUEUE_SIZE]; int rindex;//队头索引 int windex;//队尾索引 int size;//队列元素个数 int max_size;//队列最大容量 int...原创 2019-10-23 14:38:27 · 265 阅读 · 0 评论 -
1、ffplay PacketQueue源码分析
ffplay PacketQueue源码分析一、数据结构typedef struct PacketQueue { MyAVPacketList *first_pkt, *last_pkt;//串联AVPacket链表,分别指向队头和队尾 int nb_packets;//队列中元素的个数 int size;//队列持有数据的字节大小 int64_t durati...原创 2019-10-23 14:33:18 · 318 阅读 · 0 评论