浙江省职业建设学院官方网站,nofollow标签对网站收录的影响,德州市建设工程协会网站,工程建设企业等采用ffmpeg网站#xff1a;About FFmpeg
1 库介绍
#xff08;1#xff09;libavutil是一个包含简化编程函数的库#xff0c;包括随机数生成器、数据结构、数学例程、核心多媒体实用程序等等。
#xff08;2#xff09;libavcodec是一个包含音频/视频编解码器的解码器和编…ffmpeg网站About FFmpeg
1 库介绍
1libavutil是一个包含简化编程函数的库包括随机数生成器、数据结构、数学例程、核心多媒体实用程序等等。
2libavcodec是一个包含音频/视频编解码器的解码器和编码器的库。
3libavformat是一个包含多媒体容器格式的拆装器和拆装器的库。
4libavdevice是一个包含输入和输出设备的库用于抓取和呈现许多常见的多媒体输入/输出软件框架包括Video4Linux、Video4Linux2、VfW和ALSA。
5libavfilter是一个包含媒体过滤器的库。 libswscale是一个执行高度优化的图像缩放和色彩空间/像素格式转换操作的库。
6libswresample是一个执行高度优化的音频重采样重矩阵和样本格式转换操作的库。
2 实现步骤 上面是主要用到的函数
1av_register_all(): 注册 FFmpeg 支持的所有解码器、编码器、格式等
2avformat_network_init(): 初始化网络支持如果需要从网络流中读取数据 调用一次即可 3avformat_alloc_context(): 分配一个 AVFormatContext它是 FFmpeg 中用于管理多媒体文件或流的核心结构。返回值是一个指向 AVFormatContext 的指针。
4avformat_open_input(): 打开一个输入文件或流并将其信息加载到 AVFormatContext 中。这一步会解析文件格式如 MP4、AVI 等并为后续的流处理做准备。
5avformat_find_stream_info(): 获取输入文件或流的详细信息包括音视频流的编码格式、帧率、分辨率等。这一步会填充 AVFormatContext 中的 AVStream 信息。
6av_read_frame(): 从输入文件或流中读取一帧数据。每次调用 av_read_frame() 会返回一个 AVPacket它包含了一帧的编码数据。如果读取成功继续处理帧数据如果读取失败或到达文件末尾则停止。
7AVPacket: 包含编码的帧数据如压缩的视频或音频数据。AVFrame: 包含解码后的帧数据如解压缩后的视频或音频数据。AVPacket 需要通过解码器如 avcodec_send_packet() 和 avcodec_receive_frame()解码为 AVFrame。
8avformat_close_input(): 关闭输入文件或流并释放相关资源。这一步会释放 AVFormatContext 中的所有流信息。
9avformat_free_context(): 释放 AVFormatContext 及其占用的内存。
总结
1初始化 FFmpeg 环境。
2创建并初始化 AVFormatContext。
3打开输入文件或流获取流信息。
4循环读取帧数据AVPacket并通过解码器解码为 AVFrame。
5处理解码后的帧数据如播放、保存等。
6关闭输入流并释放资源。
3 代码
使用VS新建cmake工程实现上述步骤。 参考
ffmpeg 4.22库文件GitCode - 全球开发者的开源社区,开源代码托管平台
详细参考MMAVPlayer/chapter3 at main · StudyWinter/MMAVPlayer · GitHub