
ffmpeg
文章平均质量分 86
指掀涛澜天下惊
指掀涛澜天下惊,抚筝百载,清绝吾命。何必挑弦与谁听,昂首万里,江山无人。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
音视频基础知识-色彩空间
1. YUV444和原数据一样[yuv,yuv,yuv,yuv,yuv,yuv,yuv,yuv] 每像素占位3字节。我们知道RGB取值范围是[0~255], 归一化操作是(除以255)当前值/255.0 那么它的值范围[0~1]如YUV444格式 [yuv1,yuv2,yuv3,yuv4,yuv5,yuv6,yuv7,yuv8]2. YUV422 数据 [yu,yv,yu,yv,yu,yv,yu,yv] ,每像素占位2字节。3. YUV420 数据 [yu,y,yu,y,yv,y,yv,y] ,原创 2024-12-25 10:10:57 · 777 阅读 · 0 评论 -
ffplay播放器源码(七)overlay滤镜
2.定义滤镜字符串,然后给 avfilter_graph_parse2 函数解析,再用avfilter_graph_get_filter()和av_buffersrc_add_frame_flags()函数把各个滤镜的输入输出连接起来,用起来比较最简单的,但获取滤镜名称会让初学者犯晕。3.5 avfilter_graph_get_filter()查找滤镜名称,avfilter_graph_get_filter(filter_graph, "Parsed_buffer_0");//编号4最后sink滤镜源。原创 2024-12-13 10:41:47 · 1290 阅读 · 0 评论 -
ffplay播放器源码(六)音视频同步
ffplay用get_clock()实现获取当前媒体时间,用set_clock_at()实现更新媒体时间,其中c->pts_drift字段代表媒体时钟公式中的(-Tf+pts)在get_clock()函数中可以看到 retrun (c->pts_drift + time)-(time - c->last_updated) * (1.0 - c->speed)1.当音频为主时钟,音频流播放线程不需要调整,视频流播放时间需要参考音频流时间轴,如果视频流快了停下来等待音频流时间轴,慢了则快速播放。原创 2024-12-02 17:16:16 · 1196 阅读 · 0 评论 -
ffplay播放器源码(三)之设计控制原理分析
先由stream_open()函数初始化一些数据信息比如视频包队列,音频包队列,字幕包队列等,然后创建read_thread()线程.分配AVCodecContext并将其字段设置为默认值,用avcodec_free_context()释放。2.利用SDL设置音频设备播放信息 ,播放回调函数sdl_audio_callback()相关代码。ps[in,out] 可以avformat_alloc_context() ,如视频流序号 av_find_best_stream(ic,原创 2024-11-21 15:38:24 · 840 阅读 · 0 评论 -
ffplay播放器源码(二)之基础数据结构分析2
ecoder_decode_frame()包括了视频解码处理,音频解码处理,字幕解码处理,以上代码只保留视频解码相关部分这样分析起来比较简单。video_thread()主要功能是 通过get_video_frame()解码得到视频帧数据经过 滤镜处理 最后将视频帧数据加到队列中。视频流解码 get_video_frame() 调用decoder_decode_frame()进行解码。1.初始化解码器信息(视频解码器,音频解码器,字幕解码器,读视频文件得解码器信息),创建解码线程。原创 2024-11-15 14:03:40 · 385 阅读 · 0 评论 -
ffplay播放器源码(一)之基础数据结构分析1
FrameQueue队列读数据(出队列),视频流,音频流,字幕流,分区有不同的处理。初始化区别:视频流、音频流的队列 keep_last是1,所以rindex_shown是1,而字幕流keep_last是0,所以rindex_shown是0。只有写进去队列了,才可以读,所以 windex 永远是在 rindex 前面的,写数据之前先调用frame_queue_peek_writable()得到可写指针,然调用av_frame_move_ref()复制数据帧,最后调用。)size加1,为下次写队列准备。原创 2024-11-08 09:41:12 · 989 阅读 · 0 评论 -
在windows 10 使用msys2 + MSVC(VS2017)编译ffmpeg6.0源码 & ffplay播放器移植到 mfc工程
得到视频区域大小,GetDlgItem(IDC_PLAY)->GetSafeHwnd()得到窗口句柄,我们要把ffplay视频窗口显示在mfc上,所以转窗口句柄过去。这里使用c++ lambda表达式 开启线程,调用RunFFpaly函数,相当于"ffplay.exe 视频文件路径", 将ffplay模块main(int argc, char **argv)入口改成RunFFpaly函数。1. ffplay是用C语言写,mfc是c++的工程,所以要将"预编译头"禁用,不然编译会报很错误。原创 2024-11-01 14:00:06 · 405 阅读 · 0 评论 -
在windows 10 使用msys2 + MSVC(VS2017)编译ffmpeg6.0源码 & ffplay播放器移植到 win32工程
1. msys2 下载安装MSYS2,https://www.msys2.org/2. msys2 环境配置 2.1 打开 msys2 msys : 2然后输入以下命令安装:pacman-Syupacman -S base-develpacman -S yasm nasm gcc pacman -S mingw-w64-x86_64-toolchainpacman -S gitpacman -S makepacman -原创 2023-04-21 11:03:39 · 2936 阅读 · 3 评论