首页 > 编程知识 正文

php视频源码,雷霄骅 ffmpeg

时间:2023-05-05 18:30:04 阅读:40849 作者:1020

FFmpeg封装的专有日志记录系统。 支持日志级别日志级别log level设置和日志回调日志回调支持,使开发人员能够调试和排除问题。

1、日志级别日志在libavutil模块中,log level声明在log.h中:

//静默模式,在不打印日志#define AV_LOG_QUIET -8//的情况下立即崩溃,退出程序#define AV_LOG_PANIC 0//,然后单击# define av define AV_LOG_WARNING 24//信息#defineav_log调试日志#define AV_LOG_DEBUG 48//跟踪日志# define av _ log _ trace 5292; 如何设置日志级别set_log_level ()位于log.c中。 其中av_log_level是静态全局变量,具体如下:

staticintav _ log _ level=av _ log _ info; voidav_log_set_level(intlevel ) { av_log_level=level; ) 2、日志打印常用的日志打印方法av_log ()声明位于log.h。

/** *将特定消息发送到低于当前级别的日志,并默认情况下将所有消息发送到指向stderr * * @param avcl中任何结构的指针。 结构的第一个变量是AVClass或NULL * @param level日志级别* @param fmt字符串格式*/voidav_log(void*avcl,int level,const char *fmt,) 打印前调用va_start开始,打印日志,最后调用va_end结束。

voidav_log(void*avcl,int level,const char *fmt,) { va_list vl; VA_start(VL,fmt ); av_vlog(avcl、level、fmt、vl ); va_end(VL; }在av_vlog ()内部调用av_vlog ) )方法,将参数avc1强烈转换为AVClass指针,并将av_log_callback代入函数指针log_callback,从而生成日志级别

voidav_vlog(void*AVCL,int level,const char *fmt,va_list vl ) { AVClass* avc=avcl? * (视听类* * ) avcl : NULL; void(*log_callback ) ) void*,int,const char*,va_list )=av_log_callback; if(AVCAVC-version=(5016|158|2 ) AVC-log _ level _ offset _ offset level=av _ log _ fatal ) level=* (int isel } 3、日志回调日志回调的设置方法为set_log_level (,代码如下:

void av _ log _ set _ callback (void (* callback ) void*,int,const char*,va_list ) ) av _ log _ callback=}

void av _ log _ default _ callback (void * ptr,int level,const char* fmt,va_list vl ) { static int print _ prefix=1 静态char prev [ line _ SZ ]; AVB打印部件[4]; char line[LINE_SZ]; 静态int is _ atty; int type[2]; 无符号三角网=0; if(level=0) { tint=level0xff00; level=0xff; }if(levelav_log_level ) return; f_mutex_lock(mutex; format_line(ptr,level,fmt,vl,part,print_prefix,type ); nprintf(line,sizeof(line ),' %s%s%s%s ',part[0].str,part[1].str,part[2].str,part[3] ) is_atty(is_atty=isatty ) 2? 1 : -1; # endif if (打印_首选项) flagsav_log_skip_repeated )! strcmp(line,prev ) lineline[strlen(line )- 1]!='r ' ) { count; if(is_atty==1) fprintf(stderr,' Last message repeated %d timesr ',count ); goto end; } if (计数0 ) fprintf ) stderr,' Last message repeated %d timesn ',count ); 计数=0; }strcpy(prev,line ); sanitize (部件[0].str ); colored_fputs(type[0],0,part[0].str ); sanitize (部件[1].str; colored_fputs(type[1],0,part[1].str ); sanitize (部件[2].str; colored _ fputs (av _ clip (level 3,0,NB_LEVELS - 1 ),tint 8,part[2].str ); sanitize (部件[3].str ); colored _ fputs (av _ clip (level 3,0,NB_LEVELS - 1 ),tint 8,part[3].str ); # ifconfig _ valgrind _ backtrace if (level=backtrace _ log level ) valgrind_printf_backtrace('%s ',' ); # endif end : av _ b print _ finalize (部分3,NULL ); f_mutex_unlock(mutex ); }静态void (* av _ log _ callback ) ) void*,int,const char*,va_list )=av_log_default_callback; 让我们看看安卓平台设置的level和callback :

void ffmpeg _ init ({ av _ log _ set _ level ) av_log_info}; av _ log _ set _ callback (log _ callback; } log_callback ()收到回调消息后,可以根据级别打印相应的msg。

voidlog_callback(void*ptr,int level,const char *format,va_list args ) switch(level ) case av _ log _ debu bu bres brer case av _ log _ info : alogi (ffmpeg _ tag,format,args ); 布雷克; case av _ log _ error : aloge (ffmpeg _ tag,format,args ); 布雷克; 默认: break; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。