ffmpeg错误号码

bash 复制代码
#define FFERRTAG(a, b, c, d) (-(int)MKTAG(a, b, c, d))
//它负责将四个字符组合成一个32位整数

AVERROR_BSF_NOT_FOUND = -1179861752  
AVERROR_BUG = -558323010  
AVERROR_DECODER_NOT_FOUND = -1128613112  
AVERROR_DEMUXER_NOT_FOUND = -1296385272  
AVERROR_ENCODER_NOT_FOUND = -1129203192  
AVERROR_EOF = -541478725  
AVERROR_EXIT = -1414092869  
AVERROR_FILTER_NOT_FOUND = -1279870712  
AVERROR_INVALIDDATA = -1094995529  
AVERROR_MUXER_NOT_FOUND = -1481985528  
AVERROR_OPTION_NOT_FOUND = -1414549496  
AVERROR_PATCHWELCOME = -1163346256  
AVERROR_PROTOCOL_NOT_FOUND = -1330794744  
AVERROR_STREAM_NOT_FOUND = -1381258232  
AVERROR_BUG2 = -541545794  
AVERROR_UNKNOWN = -1313558101  

使用ffmpeg的时候,如果有错误,会返回一个int型负数。比如AVERROR_EOF就是-541478725。

从错误号解析为字符串方法如下

cpp 复制代码
#include <stdint.h>

#define FFERRTAG(a, b, c, d) (-(int32_t)MKTAG(a, b, c, d))

void getInt32Chars(int32_t value, char* chars)
{
    chars[0] = (value >> 24) & 0xFF;  // 获取高8位
    chars[1] = (value >> 16) & 0xFF;  // 获取次高8位
    chars[2] = (value >> 8) & 0xFF;   // 获取次低8位
    chars[3] = value & 0xFF;          // 获取低8位
}

int main()
{
    int32_t err = FFERRTAG('A', 'B', 'C', 'D');
    char chars[4];
    getInt32Chars(err, chars);

    // 输出字符
    for (int i = 0; i < 4; i++)
    {
        printf("%c", chars[i]);
    }
    printf("\n");

    return 0;
}

有些时候会返回-11、-22等无法解析为字符串的错误号是什么原因?

FFmpeg 中的 AVERROR 宏将错误码转换为负值,以便与 FFmpeg 的错误处理系统兼容。AVERROR 宏的定义通常如下:

cpp 复制代码
#define AVERROR(e) (-(e))

EAGAIN 在大多数系统上定义为11,因此,AVERROR(EAGAIN) 的值为 -11

相关推荐
daizhe18 小时前
基于JavaCV实现FFmpeg设置视频moov前置以及截取封面图片
ffmpeg·音视频·javacv
一点晖光3 天前
ffmpeg合并视频
ffmpeg·音视频
简鹿视频3 天前
mp4视频转换成avi格式攻略
ffmpeg·音视频·视频编解码·格式工厂
呆萌小新@渊洁3 天前
Linux离线环境安装ffmpeg
linux·ffmpeg·php
番茄啊3 天前
FFmpeg 使用RTSP服务器录屏并推流
ffmpeg
CHS_Lab4 天前
“非标”MP4文件的恢复方法
ffmpeg·数据恢复·视频恢复·mp4恢复
一点晖光4 天前
ffmpeg视频分辨率转换
ffmpeg·音视频
数据库生产实战4 天前
Oracle的DBMS_SPACE.SPACE_USAGE和dba_segments计算的对象块数为什么不一样?表空间异常暴增的秘密可能就在这里!
oracle·ffmpeg·dba
hjjdebug4 天前
ffmpeg -map 是什么意思?
ffmpeg·map