- 博客(13)
- 收藏
- 关注
原创 ffplay源码分析__audio_decode_frame()
audio_decode_frame函数主要功能是从FrameQueue中取出解码后的音频数据,判断是否需要重采样。如果需要,把音频数据重采样后再给SDL使用。audio_decode_frame()可以分为三部分。第一部分从音频FrameQueue中读取解码后的音频数据,第二部分判断是否需要重采样,第三部分是重采样功能。
2025-05-02 17:45:08
719
原创 ffplay源码分析__解码函数decoder_decode_frame
decoder_decode_frame函数的主要功能是:判断从PacketQueue取出的MyAVpacketList序列号是否和Decoder的序列号一致,如果两者不一致,就一直从队列中取,直到取到的序列号一致为止。如果两者序列号一致,就用avcodec_send_packet函数向解码器输送数据,然后通过avcodec_receive_frame从解码器获取解码后的数据返回。正确取到解码数据后返回1,读取到解码器末尾时返回0,其余返回负数。
2025-04-22 11:38:41
1014
原创 win10环境下msys+vs2022编译ffmpeg6.1
本文是在windows10,msys2+vs2022的环境下,编译ffmpeg6.1。
2025-04-21 21:52:23
898
原创 ffplay源码__音频解码线程audio_thread
audio_thread主要功能是从音频PacketQueue中读取数据并解码,然后把解码后的数据插入到音频FrameQueue中。audio_thread和video_thread基本流程一致,都用到解码函数decoder_decode_frame(),队列函数frame_queue_peek_writable()和frame_queue_push()。
2025-04-12 19:08:59
677
原创 ffplay源码分析__视频解码线程video_thread
video_thread线程是在read_thread线程中创建的,主要作用是从视频PacketQueue队列中获取AVPacket数据用于解码,并把解码后的数据封装成Frame,保存到视频的FrameQueue中。真正的解码是在decoder_decode_frame()中完成。把解码数据插入到队列是用三个函数完成,分别是frame_queue_peek_writable(),queue_picture(),frame_queue_push()。
2025-04-10 10:25:17
691
原创 ffplay源码分析__sdl_audio_callback回调函数
sdl_audio_callback 函数在 SDL 音频处理中扮演关键角色,它在单独的线程中被调用,负责向 SDL 音频驱动填充音频数据。该函数通过 audio_decode_frame 从音频帧队列中获取解码数据,并根据需要进行重采样。随后,数据被填充到 SDL 音频缓冲区中,如果缓冲区未满,则继续填充;如果发生错误,则输出静音。SDL 采用双缓冲机制,确保音频的连续播放。此外,音频时钟的更新依赖于缓冲区的填充状态,通过计算剩余数据和时间戳来同步音频播放时刻。
2025-04-08 17:52:19
7
原创 ffplay源码__stream_component_open函数分析
1、stream_component_open函数是在read_thread子线程被调用的。其中有三个地方调用了stream_component_open()函数,实际运行时只有音频和视频部分生效,所以又产生了两个子线程audio_thread和video_thread。
2025-03-17 11:26:47
659
原创 ffplay源码_read_thread线程分析(三)
本文详细介绍了在VS2017的Debug x86模式下调试运行FFplay的初始化过程。首先,通过SDL_CreateMutex()创建wait_mutex锁,用于配合SDL_CondWaitTimeout函数。接着,初始化媒体索引数组并分配AVPacket和AVFormatContext的内存。然后,设置中断回调函数和字典,用于处理耗时操作和传递额外参数。通过avformat_open_input()函数打开媒体文件,并获取媒体信息。随后,判断是否为网络流,并查找最佳媒体流。最后,打开音视频流,读取文件数
2025-03-12 13:08:49
904
原创 ffplay源码分析__stream_open函数(二)
FFplay是 FFmpeg 官方提供的一个播放器的实现,支持快进快退,逐帧播放,滤镜等。本文是在VS2017的Debug x86模式下调试运行的,ffplay.c移植到VS2017工程可以参考ffplay移植vs2017stream_open函数主要是做了些初始化工作,并创建了读文件线程read_thread。先分析部分结构体。
2025-03-11 09:17:32
828
原创 win10环境下msys2+vs2017编译ffmpeg(64位含ffplay)
本文在win10下用msys2和vs2017编译ffmpeg 64位(包含ffplay),以及把ffplay.c移植到vs2017环境中,便于学习。ffmpeg 的源码是跨平台的,通过 configure(shell脚本) 实现不同平台的编译规则。在 configure 的时候指定--toolchain=msvc就可以使用 msvc 来编译 ffmpeg。
2024-11-29 12:07:19
1872
原创 win10环境下msys2+vs2017编译ffmpeg(32位含ffplay移植)
本文在win10下用msys2和vs2017编译ffmpeg32位。ffmpeg 的源码是跨平台的,通过 configure(shell脚本) 实现不同平台的编译规则。在 configure 的时候指定就可以 使用 msvc 来编译 ffmpeg。
2024-11-22 15:21:08
1933
原创 win10环境下msys2+mingw编译ffmpeg(64位含ffplay)
windows下用msys2 mingw64环境编译ffmpeg64位,包含ffplay.exe
2024-11-17 11:21:05
2374
ffplay.c+vs2017工程文件(ffplay播放器)
2025-02-12
windows环境下ffmpeg4.4.5-32位库文件.rar
2025-02-11
windows环境下ffmpeg4.4.5-64位库文件(含ffplay).rar
2025-02-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人