成都易站网站建设,wordpress 投票插件,唐山市住房城乡建设局网站,安卓商城文章目录 前言一、Libavutil 简介二、AVLog 测试1、示例源码2、运行结果 三、AVDictionary 测试1、示例源码2、运行结果 四、ParseUtil 测试1、示例源码2、运行结果 前言 libavutil 是一个实用库#xff0c;用于辅助多媒体编程#xff0c;本文记录 libavutil 库学习及 demo 例… 文章目录 前言一、Libavutil 简介二、AVLog 测试1、示例源码2、运行结果 三、AVDictionary 测试1、示例源码2、运行结果 四、ParseUtil 测试1、示例源码2、运行结果 前言 libavutil 是一个实用库用于辅助多媒体编程本文记录 libavutil 库学习及 demo 例程展示。 一、Libavutil 简介
libavutil 是一个实用库用于辅助多媒体编程。此库包含安全的可移植字符串函数、随机数生成器、数据结构、附加数学函数、加密和多媒体相关功能如像素和样本格式的枚举。
libavcodec 和 libavformat 并不依赖此库。
从 FFmpeg 官网的文档 -libavutil 来看 avutil 主要有以下几种功能
数学函数字符串操作内存管理相关数据结构相关错误码及错误处理日志输出其他辅助信息比如密钥、哈希值、宏、库版本、常量等
FFmpeg 中 libavutil 的示例目前包含
AVLogAVOption (AVClass)AVDictionaryParseUtil
二、AVLog 测试
AVLog 是 FFmpeg音视频处理库中的一个日志系统用于记录和输出日志信息。它提供了一种可配置的方式使开发者能够根据自己的需求控制日志输出的详细程度和目标。
AVLog 的设计目标是提供一个灵活和可扩展的日志系统以便在音视频处理过程中记录各种事件、错误和调试信息。它可以用于调试和分析应用程序或库的运行时行为特别是在处理音视频数据时。
AVLog 提供了多个日志级别包括
QUIET静默最低日志级别不输出任何日志信息。PANIC紧急当发生严重错误时触发可能导致程序崩溃或不可恢复的错误。FATAL致命当发生严重错误时触发但程序可能还能继续执行。ERROR错误记录错误信息表示发生了一些操作失败或异常情况但程序仍然可以继续执行。WARNING警告记录警告信息表示发生了一些潜在问题或不符合预期的情况。INFO信息记录一般的信息用于追踪应用程序的运行状态。VERBOSE详细记录更详细的信息用于调试和排查问题。DEBUG调试记录详细的调试信息包括函数调用、变量值等。
1、示例源码
#include stdio.hextern C {#include libavcodec/avcodec.h#include libavformat/avformat.h#include libavutil/opt.h#include libavutil/parseutils.h#include libavutil/avutil.h
};void test_log(){/ av_register_all();AVFormatContext *pAVFmtCtx NULL;pAVFmtCtx avformat_alloc_context();printf(\n);av_log(pAVFmtCtx,AV_LOG_PANIC, Panic: Something went really wrong and we will crash now.\n);av_log(pAVFmtCtx,AV_LOG_FATAL, Fatal: Something went wrong and recovery is not possible.\n);av_log(pAVFmtCtx,AV_LOG_ERROR, Error: Something went wrong and cannot losslessly be recovered.\n);av_log(pAVFmtCtx,AV_LOG_WARNING, Warning: This may or may not lead to problems.\n);av_log(pAVFmtCtx,AV_LOG_INFO, Info: Standard information.\n);av_log(pAVFmtCtx,AV_LOG_VERBOSE, Verbose: Detailed information.\n);av_log(pAVFmtCtx,AV_LOG_DEBUG, Debug: Stuff which is only useful for libav* developers.\n);printf(\n);avformat_free_context(pAVFmtCtx);
}int main(int argc, char* argv[])
{av_log_set_level(AV_LOG_DEBUG);test_log();return 0;
}avformat_alloc_context()分配一个 AVFormatContextavformat_free_context()可用于释放上下文以及其中由框架分配的所有内容av_log()如果 level 小于或等于当前 av_log_level则将指定的消息发送到日志。默认情况下所有日志消息都发送到 stderr。可以通过设置不同的日志回调函数来更改此行为。
2、运行结果 [NULL 01e0fc40] Panic: Something went really wrong and we will crash now.
[NULL 01e0fc40] Fatal: Something went wrong and recovery is not possible.
[NULL 01e0fc40] Error: Something went wrong and cannot losslessly be recovered.
[NULL 01e0fc40] Warning: This may or may not lead to problems.
[NULL 01e0fc40] Info: Standard information.
[NULL 01e0fc40] Verbose: Detailed information.
[NULL 01e0fc40] Debug: Stuff which is only useful for libav* developers.三、AVDictionary 测试
AVDictionary 是 FFmpeg音视频处理库中的一个字典结构用于存储键值对的元数据信息。它提供了一种通用的方式来管理和操作多种类型的元数据例如音视频流的元数据、编解码器的参数、封装格式的选项等。
AVDictionary 的设计目标是提供一种灵活和可扩展的数据结构用于表示和传递各种元数据信息。它可以用于读取和写入多种音视频文件格式并且支持动态添加、修改和查询字典中的元素。
AVDictionary 提供了一系列的函数来对字典进行操作包括
av_dict_set()向字典中添加或修改键值对。av_dict_get()根据键查询字典中的值。av_dict_count()获取字典中键值对的数量。av_dict_copy()复制一个字典。av_dict_free()释放字典及其内部分配的内存。
除了基本的操作函数外AVDictionary 还支持迭代器遍历字典中的键值对以及支持将字典转换为字符串格式进行打印或保存。
1、示例源码
#include stdio.hextern C {#include libavcodec/avcodec.h#include libavformat/avformat.h#include libavutil/opt.h#include libavutil/parseutils.h#include libavutil/avutil.h
};void test_avdictionary(){AVDictionary *d NULL;AVDictionaryEntry *t NULL;av_dict_set(d, name, zhangsan, 0);av_dict_set(d, age, 22, 0);av_dict_set(d, gender, man, 0);av_dict_set(d, email, wwwwww.com, 0);//av_strdup()char *k av_strdup(location);char *v av_strdup(Beijing-China);av_dict_set(d, k, v, AV_DICT_DONT_STRDUP_KEY | AV_DICT_DONT_STRDUP_VAL);printf(\n);int dict_cnt av_dict_count(d);printf(dict_count:%d\n,dict_cnt);printf(dict_element:\n);while (t av_dict_get(d, , t, AV_DICT_IGNORE_SUFFIX)) {printf(key:%10s | value:%s\n,t-key,t-value);}t av_dict_get(d, email, t, AV_DICT_IGNORE_SUFFIX);printf(email is %s\n,t-value);printf(\n);av_dict_free(d);
}int main(int argc, char* argv[])
{test_avdictionary();return 0;
}2、运行结果 dict_count:5
dict_element:
key: name | value:zhangsan
key: age | value:22
key: gender | value:man
key: email | value:wwwwww.com
key: location | value:Beijing-China
email is wwwwww.com四、ParseUtil 测试
ParseUtil 提供了一些实用的函数和方法用于解析和转换编解码器参数字符串以及处理编解码器参数的操作。它主要用于解析编解码器的选项和参数并将它们转换为适当的数据结构供 FFmpeg 使用。
一些常见的功能和用途包括
解析编解码器参数ParseUtil 可以解析编解码器参数字符串将其拆分为键值对或特定格式的数据。转换参数数据类型它可以将参数字符串中的数值或其他特定格式的数据转换为适当的数据类型如整数、浮点数等。构建编解码器参数结构ParseUtil 可以根据解析的结果构建编解码器参数的数据结构以便在 FFmpeg 中使用。错误处理它提供了一些错误处理机制用于检测和处理无效的参数字符串或错误的参数格式。
1、示例源码
#include stdio.hextern C {#include libavcodec/avcodec.h#include libavformat/avformat.h#include libavutil/opt.h#include libavutil/parseutils.h#include libavutil/avutil.h
};void test_parseutil(){char input_str[100] {0};printf( Parse Video Size \n);int output_w 0;int output_h 0;strcpy(input_str, 1920x1080);av_parse_video_size(output_w,output_h,input_str);printf(w:%4d | h:%4d\n,output_w,output_h);//strcpy(input_str,vga);//640x480(4:3)//strcpy(input_str,hd1080);//high definitionstrcpy(input_str,pal);//ntsc(N制720x480, pal啪制720x576av_parse_video_size(output_w, output_h, input_str);printf(w:%4d | h:%4d\n,output_w,output_h);printf( Parse Frame Rate \n);AVRational output_rational {0,0};strcpy(input_str,15/1);av_parse_video_rate(output_rational,input_str);printf(framerate:%d/%d\n,output_rational.num,output_rational.den);strcpy(input_str,pal);//fps:25/1av_parse_video_rate(output_rational,input_str);printf(framerate:%d/%d\n,output_rational.num,output_rational.den);printf( Parse Time \n);int64_t output_timeval;//单位微妙 1S1000MilliSeconds, 1MilliS1000MacroSecondsstrcpy(input_str,00:01:01);av_parse_time(output_timeval,input_str,1);printf(microseconds:%lld\n,output_timeval);printf(\n);
}int main(int argc, char* argv[])
{test_parseutil();return 0;
}av_parse_video_size()用于解析视频大小字符串并将其转换为对应的宽度和高度av_parse_video_rate()用于解析视频帧率字符串并将其转换为对应的帧率值av_parse_time()用于解析时间字符串并将其转换为对应的时间值以微秒为单位
2、运行结果 Parse Video Size
w:1920 | h:1080
w: 720 | h: 576Parse Frame Rate
framerate:15/1
framerate:25/1Parse Time
microseconds:61000000我的qq2442391036欢迎交流