wordpress点评插件网站建设制作优化
wordpress点评插件,网站建设制作优化,囯家信用信息公示系统,那个推广平台好用文章目录 课程目标 封装格式简介 知识点 1. AVFormatContext 结构体 2. 媒体文件格式识别 3. 错误处理机制 实践内容 实践1:打开本地视频文件 实践2:读取媒体文件基本信息 实践3:打印详细的媒体信息 实践4:处理打开文件失败的情况 运行测试 编译项目 运行所有第2课的测试 运…文章目录课程目标封装格式简介知识点1. AVFormatContext 结构体2. 媒体文件格式识别3. 错误处理机制实践内容实践1:打开本地视频文件实践2:读取媒体文件基本信息实践3:打印详细的媒体信息实践4:处理打开文件失败的情况运行测试编译项目运行所有第2课的测试运行直接使用 API 的测试编译并运行(推荐)常见问题Q1: 为什么 `duration` 是 0?Q2: 如何设置打开文件的超时时间?Q3: 如何判断文件格式?Q4: 为什么容器级别的时长和单个流的时长不一致?Q5: 为什么容器级别的码率和单个流的码率不一致?参考音视频系列教程课程目标学习如何使用 FFmpeg 打开和读取媒体文件的基本信息,理解AVFormatContext的作用。封装格式简介在开始之前,先简单了解一下封装格式。我们常见的视频文件(如.mp4、.mkv、.avi)都是封装格式,它们把视频、音频、字幕等数据打包在一起。可以简单理解为:封装格式是"盒子",里面装着编码后的视频和音频数据。封装格式 vs 编码格式:封装格式(如 MP4、MKV):决定如何打包和组织数据编码格式(如 H.264、AAC):决定如何压缩数据举个例子,一个.mp4文件可能包含 H.264 编码的视频和 AAC 编码的音频,MP4 负责把它们打包在一起,并提供同步、元数据等功能。常见的封装格式有 MP4(兼容性好)、MKV(支持多音轨)、FLV(流媒体)等。FFmpeg 可以处理这些格式,我们只需要知道如何打开和读取它们即可。知识点1. AVFormatContext 结构体AVFormatContext是 FFmpeg 中表示媒体文件格式上下文的核心结构体,包含了媒体文件的所有信息。主要字段:iformat:输入格式(如 MP4、MKV 等)nb_streams:流的数量streams:流数组duration:文件时长(以时间基为单位,通常是所有流中最长的时长)bit_rate:总码率(所有流的码率之和)重要提示:容器级别 vs 流级别的时长和码率容器级别(AVFormatContext)的时长和码率与单个流的时长和码率可能不一致:时长差异:容器时长:通常是所有流中最长的时长(例如视频流时长)流时长:每个流有自己的时长,可能略有差异(特别是音频和视频的同步问题)示例:视频流可能是 11.41 秒,音频流可能是 11.40 秒,容器时长取 11.41 秒码率差异:容器总码率:所有流的码率之和(视频码率 + 音频码率 + 其他流码率)流码率:单个流的码率示例:视频码率 2260 kbps + 音频码率 253 kbps ≈ 总码率 2517 kbps如何获取单个流的时长和码率:AVStream*video_stream=fmt_ctx-streams[video_index];// 流的时长(以流的时间基为单位)int64_tstream_duration=video_stream-duration;// 转换为秒:stream_duration * av_q2d(video_stream-time_base)// 流的码率int64_tstream_bitrate=video_stream-codecpar-bit_rate;2. 媒体文件格式识别FFmpeg 可以自动识别多种媒体文件格式:视频格式:MP4、MKV、AVI、MOV、FLV 等音频格式:MP3、AAC、WAV、FLAC 等流媒体格式:RTMP、HLS、RTSP 等3. 错误处理机制FFmpeg 使用返回值表示操作结果:0:成功负数:错误码(使用av_strerror转换为错误信息)AVERROR_EOF:文件结束实践内容实践1:打开本地视频文件API:avformat_open_inputAVFormatContext*fmt_ctx=nullptr;constchar*filename="test.mp4";intret=avformat_open_input(fmt_ctx,filename,nullptr,nullptr);if(ret==0){// 成功打开LOG("Format: %s",fmt_ctx-iformat-name);avformat_close_input(fmt_ctx);}else{// 处理错误charerrbuf[AV_ERROR_MAX_STRING_SIZE