FFmpeg+javacpp中av_log使用

FFmpeg+javacpp中av_log使用

FFmpeg+javacpp+javacv使用


1、ffmpeg中av_log源码

ffmpeg-6.0\libavutil\log.h

ffmpeg-6.0\libavutil\log.c

ffmpeg-6.0\libavformat\dump.c

2、av_dump_format 信息

import static org.bytedeco.ffmpeg.global.avformat.av_dump_format;

2.1.3 dump信息

xml 复制代码
org.bytedeco.ffmpeg.global
Class avformat

java.lang.Object
    org.bytedeco.ffmpeg.presets.avformat
        org.bytedeco.ffmpeg.global.avformat
java 复制代码
String url = "F:\\Music\\Let Me Down Slowly.mp3";
AVFormatContext pFormatCtx = avformat_alloc_context(); // 解封装上下文

if (avformat_open_input(pFormatCtx, url, null, null) != 0) {
    XLog.e("AVFormatContext","open file failed!"); // 打开流媒体
    return;
}

if (avformat_find_stream_info(pFormatCtx, (PointerPointer<Pointer>) null) < 0) {
    XLog.e("AVFormatContext","find stream info failed!"); // 读取流媒体信息
    return;
}
av_dump_format(pFormatCtx, 0, url, 0);

avformat_close_input(pFormatCtx);

3、av_log封装使用:AvLog.java

org/bytedeco/ffmpeg/global/avutil.java

3.1 av_log等级

默认等级 AV_LOG_INFO = 32;

java 复制代码
/**
 * Print no output.
 */
public static final int AV_LOG_QUIET =    -8;

/**
 * Something went really wrong and we will crash now.
 */
public static final int AV_LOG_PANIC =     0;

/**
 * Something went wrong and recovery is not possible.
 * For example, no header was found for a format which depends
 * on headers or an illegal combination of parameters is used.
 */
public static final int AV_LOG_FATAL =     8;

/**
 * Something went wrong and cannot losslessly be recovered.
 * However, not all future data is affected.
 */
public static final int AV_LOG_ERROR =    16;

/**
 * Something somehow does not look correct. This may or may not
 * lead to problems. An example would be the use of '-vstrict -2'.
 */
public static final int AV_LOG_WARNING =  24;

/**
 * Standard information.
 */
public static final int AV_LOG_INFO =     32;

/**
 * Detailed information.
 */
public static final int AV_LOG_VERBOSE =  40;

/**
 * Stuff which is only useful for libav* developers.
 */
public static final int AV_LOG_DEBUG =    48;

/**
 * Extremely verbose debugging, useful for libav* development.
 */
public static final int AV_LOG_TRACE =    56;

public static final int AV_LOG_MAX_OFFSET = (AV_LOG_TRACE - AV_LOG_QUIET);

3.2 不会自动换行

java 复制代码
public class Demo {
    public static void main(String[] args) throws Exception {
        XLog.config("Xh-Demo", false, true);
        /*String url = "F:\\Music\\Let Me Down Slowly.mp3";
        AVFormatContext pFormatCtx = UtilsTool.getFormatContext(url);
        AvLog.dumpFormat(pFormatCtx, 0, url, 0);
        UtilsTool.closeAVFormatContext(pFormatCtx);*/
        XLog.d("av_log_get_level() 等级: " + avutil.av_log_get_level());
        XLog.d("av_log 等级: " + AvLog.getLevel());
        AvLog.setLevel(avutil.AV_LOG_TRACE);

        avutil.av_log(null, avutil.AV_LOG_INFO, "你好");
        avutil.av_log(null, avutil.AV_LOG_INFO, "java\n");

        AvLog.i("你好");
        AvLog.i("java");
        AvLog.i("\n");
    }
}

3.3 AvLog.java

java 复制代码
package org.xhbruce.utils;

import org.bytedeco.ffmpeg.avformat.AVFormatContext;

import static org.bytedeco.ffmpeg.global.avformat.av_dump_format;
import static org.bytedeco.ffmpeg.global.avutil.*;

/**
public static final int AV_LOG_QUIET = -8;
public static final int AV_LOG_PANIC = 0;
public static final int AV_LOG_FATAL = 8;
public static final int AV_LOG_ERROR = 16;
public static final int AV_LOG_WARNING = 24;
public static final int AV_LOG_INFO = 32;
public static final int AV_LOG_VERBOSE = 40;
public static final int AV_LOG_DEBUG = 48;
public static final int AV_LOG_TRACE = 56;
public static final int AV_LOG_MAX_OFFSET = (AV_LOG_TRACE - AV_LOG_QUIET);
 */
public class AvLog {
    private static final String[] AV_LOG_LEVEL = {"AV_LOG_QUIET","AV_LOG_PANIC","AV_LOG_FATAL","AV_LOG_ERROR"
            ,"AV_LOG_WARNING","AV_LOG_INFO","AV_LOG_VERBOSE","AV_LOG_DEBUG","AV_LOG_TRACE","AV_LOG_MAX_OFFSET"};

    private AvLog() {
    }

    public static String getLevel() {
        return matchLevel(av_log_get_level());
    }
    public static void setLevel(int level) {
        av_log_set_level(level);
    }

    public static void t(String message) {
        av_log(null, AV_LOG_TRACE, message);
    }

    public static void d(String message) {
        av_log(null, AV_LOG_DEBUG, message);
    }

    public static void v(String message) {
        av_log(null, AV_LOG_VERBOSE, message);
    }

    public static void i(String message) {
        av_log(null, AV_LOG_INFO, message);
    }

    public static void w(String message) {
        av_log(null, AV_LOG_WARNING, message);
    }

    public static void e(String message) {
        av_log(null, AV_LOG_ERROR, message);
    }

    public static void f(String message) {
        av_log(null, AV_LOG_FATAL, message);
    }

    public static void p(String message) {
        av_log(null, AV_LOG_PANIC, message);
    }

    public static void dumpFormat(AVFormatContext ic, int index, String url, int is_output) {
        av_dump_format(ic, index, url, is_output);
    }

    private static String matchLevel(int level) {
        switch (level) {
            case AV_LOG_QUIET:
                return AV_LOG_LEVEL[0];
            case AV_LOG_PANIC:
                return AV_LOG_LEVEL[1];
            case AV_LOG_FATAL:
                return AV_LOG_LEVEL[2];
            case AV_LOG_ERROR:
                return AV_LOG_LEVEL[3];
            case AV_LOG_WARNING:
                return AV_LOG_LEVEL[4];
            case AV_LOG_INFO:
                return AV_LOG_LEVEL[5];
            case AV_LOG_VERBOSE:
                return AV_LOG_LEVEL[6];
            case AV_LOG_DEBUG:
                return AV_LOG_LEVEL[7];
            case AV_LOG_TRACE:
                return AV_LOG_LEVEL[8];
        }
        return "";
    }
}
相关推荐
Evonso2 天前
静态编译的ffmpeg用法
ffmpeg
_chirs3 天前
编译不依赖动态库的FFMPEG(麒麟国防 V10)
arm开发·ffmpeg
熊猫钓鱼>_>3 天前
从零到一:打造“抗造” Electron 录屏神器的故事
前端·javascript·ffmpeg·electron·node·录屏·record
UpYoung!3 天前
【格式转换工具】专业级多媒体格式转换解决方案——Freemake Video Converter 完全指南:轻量化视频剪辑媒体格式转换
ffmpeg·短视频·实用工具·开源工具·多媒体格式转换·运维必备·视频转换格式
试剂小课堂 Pro4 天前
Ald-PEG-Ald:丙醛与聚乙二醇两端连接的对称分子
java·c语言·c++·python·ffmpeg
MaoSource4 天前
Debian 12 安装 FFmpeg 命令
服务器·ffmpeg·debian
白云千载尽5 天前
交换空间扩容与删除、hugginface更换默认目录、ffmpeg视频处理、清理空间
python·ffmpeg·控制·mpc·navsim
xmRao5 天前
Qt+FFmpeg 实现 PCM 转 WAV
qt·ffmpeg·pcm
eWidget5 天前
Shell循环进阶:break/continue,循环嵌套与优化技巧
运维·开发语言·ffmpeg·运维开发
Knight_AL5 天前
Java + FFmpeg 实现视频分片合并(生成 list.txt 自动合并)
java·ffmpeg·音视频