使用 FFmpeg 中的 libavcodec 解码作品

2024-01-11

我正在尝试使用 libavcodec 解码作品。我可以单独使用 libopus 库来做到这一点。但我正在尝试使用 libavcodec 实现相同的目标。我试图弄清楚为什么它在我的情况下不起作用。我有一个 rtp 流并尝试对其进行解码。解码数据包的结果与输入相同。解码帧通常包含 pcm 值,而不是我实际发送的接收 opus 帧。请帮我。

av_register_all();
avcodec_register_all();
AVCodec *codec;
AVCodecContext *c = NULL;
AVPacket avpkt;
AVFrame *decoded_frame = NULL;
av_init_packet(&avpkt);
codec = avcodec_find_decoder(AV_CODEC_ID_OPUS);
if (!codec) {
     printf("Codec not found\n");
     exit(1);
}
c = avcodec_alloc_context3(codec);
if (!c) {
   printf("Could not allocate audio codec context\n");
   exit(1);
}
/* put sample parameters */
c->sample_rate = 48000;
c->request_sample_fmt = AV_SAMPLE_FMT_FLT;
c->channels = 2;
/* open it */
if (avcodec_open2(c, codec, NULL) < 0) {
    printf("Could not open codec\n");
    exit(1);
}

AVPacket avpkt;
AVFrame *decoded_frame = NULL;
av_init_packet(&avpkt);
avpkt.data = Buffer;  // Buffer is packet data here
avpkt.size = len;    // length of the packet
int i, ch;

if (!decoded_frame) {
    if (!(decoded_frame = av_frame_alloc())) {
        RELAY_SERVER_PRINT("Could not allocate audio frame\n");
        exit(1);
    }
}
int ret;
int got_frame = 0;
ret = avcodec_decode_audio4(c, decoded_frame, &got_frame, &avpkt);
if (ret < 0) {
        fprintf(stderr, "Error decoding audio frame (%s)\n", av_err2str(ret));
        return ret;
    }
printf("length %i\n", decoded_frame->pkt_size);

我有同样的问题。我的流是用 8kHz 编码的,而 ffmpeg 总是用 48kHz(硬编码)初始化 libopus。

参见ffmpeg代码片段:

static av_cold int libopus_decode_init(AVCodecContext *avc)
{
    (...)
    avc->sample_rate    = 48000;
    avc->sample_fmt     = avc->request_sample_fmt == AV_SAMPLE_FMT_FLT ?
                          AV_SAMPLE_FMT_FLT : AV_SAMPLE_FMT_S16;
    (...)  
}

我已将其替换为:

if (avc->sample_rate == 0)
    avc->sample_rate = 48000;

现在解码工作了。我想知道这个解码器是否支持动态比特率变化。

原始帧的长度必须通过以下方式计算:

int frame_size = decoded_frame->nb_samples * av_get_bytes_per_sample(decoded_frame->sample_fmt);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 FFmpeg 中的 libavcodec 解码作品 的相关文章

  • 如何使用 FFmpeg 从图像创建视频? [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的
  • FFmpeg:如何估计音频流中的样本数量?

    我目前正在编写一个小型应用程序 它利用 FFmpeg 库来解码 C 中的音频文件 尤其是 avformat 和 swresample 现在我需要音频流中的样本总数 我知道确切的数字只能通过实际解码所有帧才能找到 我只需要一个估计 这里的首选
  • 使用 ffmpeg api 调用将 3gp (amr) 转换为 mp3

    使用 ffmpeg api 调用将 3gp amr 转换为 mp3 我尝试使用 libavformat ffmpeg 构建自己的函数 将 3gp 音频文件 用 Android 移动设备录制 转换为 mp3 文件 我使用 av read fr
  • Android ffmpeg 简单 JNI 包装器

    我一直在尝试使用带有命令行访问的 ffmpeg 二进制文件一段时间 但一无所获 使用runtime exec 看起来我能够让它工作的唯一方法是使用 C 中的包装器来使用 JNI 访问构建的 ffmpeg 库 主要问题 我已经有超过五年没有编
  • 如何找到 Discord 机器人所连接的语音聊天

    我正在制作一个通过语音识别激活的不和谐机器人 我一开始就让他加入语音频道 正在运行 我试图发出命令让他离开 const commando require discord js commando class LeaveChannelComma
  • FFMPEG - 以特定时间间隔在视频上叠加多个视频

    我想以指定的时间间隔将多个视频叠加在单个视频上 尝试过不同的解决方案 但它不会像我一样工作 我使用下面的命令将视频叠加在视频上 String cmdWorking3 new String i yourRealPath i gifVideoF
  • 使用 FFmpeg 在特定时间将一个视频叠加在另一个视频上

    我正在尝试将一个视频与另一个视频叠加 我按照OP发布的原始命令进行操作here https stackoverflow com questions 35269387 ffmpeg overlay one video onto another
  • 如何使用 FFMPEG 获得最佳的 FLV 整体质量?

    我希望以最小的文件大小实现最佳质量的 FLV 毕竟 这不是每个人的目标吗 如果这有什么影响的话 这些视频将会被直播 目前 我的视频宽度不超过 320 像素 有些是宽屏 因此它们的高度略小于 240 像素 就目前情况而言 转换后的 FLV 的
  • 从视频或音频文件中删除人声

    有没有一种方法可以从音频 视频中删除人声 所以最终音乐就留在上面了 我想使用任何软件 如 adobe 等 或使用命令行 如 ffmpeg sox 来执行此操作 但我更喜欢命令行来轻松调整设置 我从事卡拉 OK 工作有一段时间了 没有办法可靠
  • FFmpeg - 找不到 ExecuteBinaryResponseHandler - Android/Java

    我正在尝试制作一个用于反应原生的模块 它将把视频变成 gif 我对 android studios java 几乎没有经验 但我很想了解更多 我在用这个图书馆 https github com WritingMinds ffmpeg and
  • pkg-config 无法在 ffmpeg 构建上找到库(linux)

    我正在尝试在 ubuntu 上为 android 构建 ffmpeg I ve cross compiled all the dependencies I need for my configuration I ve set up the
  • Python 子进程中的 ffmpeg - 无法找到“管道:”的合适输出格式

    尝试通过 Python 使用 ffmpeg 将字幕刻录到视频中 在命令行中工作正常 但是当从 Python 子进程调用时 p subprocess Popen cd Downloads yt ffmpeg i video vf subtit
  • 来自 http 直播 m3u8 文件的 FFMPEG mp4? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何从 http 直播 m3u8 文件中提取 mp4 我尝试了下面这个命令 ffmpeg i input file f rawvideo
  • 使用 FFMPEG 的 HLS FLAC 流

    我使用以下命令从 FLAC 文件创建了一个 HLS 流 并输出 FLAC ffmpeg i 10 brass in pocket flac map 0 a c a 0 flac f hls hls playlist type vod mas
  • FFMPEG 没有按预期“切割”

    我通过一个简单的 system process 使用 FFMPEG 来自 java 应用程序 并尝试将视频切成块 我正在尝试将其切成 10 秒的增量 我的 FFMPEG 命令如下所示 ffmpeg i SampleVideo mp4 ss
  • 有没有简单的方法来提取附件 b 格式的 h264 原始流?

    当我使用命令行使用 ffmpeg 提取视频流时 ffmpeg i 一些文件 vcodec copy an f rawvideo h264 什么 out h264 对于 Adob e Media Encoder 生成的某些媒体文件 只有 m4
  • ffprobe/ffmpg 静音检测命令

    我正在研究流静音检测 它正在 ffmpeg 中执行以下命令 ffmpeg i http mystream com stream af silencedetect n 50dB d 0 5 f null 2 gt log txt 我想获得日志
  • 从 Perl 守护程序运行时,为什么 FFMpeg 在五秒后停止?

    我用 Perl 编写了一个小守护程序 它调用 FFMpeg 对视频进行编码 但编码在 5 秒左右后停止 我用这段代码来启动它 my t echo ffmpeg command gt gt self gt FFMPEG OUTPUT my l
  • Android 上的 GStreamer

    谁能给我一些关于让 GStreamer 在 Android 上工作的提示 我以前从未使用过它 我想将它与 FFmpeg 一起使用 我已经编译了 FFmpeg 并且在 Android 上运行良好 我只是想使用 GStreamer 来帮助完成一
  • 使用 ffmpeg 将 h.264 avi 容器转换为 mp4

    我想使用 ffmpeg 将 h 264 avi 容器转换为 mp4 容器 我发现这个有效 ffmpeg i myfile avi vcodec copy myfile mp4 ffmpeg version N 51169 gcedf276

随机推荐

  • 字典无法识别浮点键

    我有一本叫做 G 的字典 当我输入G keys 输出的一个示例是 gt gt gt G keys 1490775 0 12037425 0 1493775 0 12042675 0 1481055 0 12046305 0 1503105
  • 获取数据库中唯一约束和索引的列表

    我必须获取所有唯一键约束的列表以及特定数据库的索引 我正在做这样的事情 SELECT FROM sys sysobjects WHERE type u AND name LIKE
  • 为什么骨干路由需要默认路由

    我用backbone js 创建一个测试用例 http jsfiddle net VWBvs 5 http jsfiddle net VWBvs 5 路线定义为 var AppRouter Backbone Router extend ro
  • vararg 的 Scala 模式匹配

    我只是想在 scala 上做一些实践 并尝试自己实现 List concat 函数 这是代码 def concat A lists Traversable A List A println concat called lists match
  • 如何使用 Backbone.js,但以 NO-RESTful 方式?

    我现在是一名前端开发人员 我有一个项目用BackboneJS就可以了 服务端是别人写的 有谁可以告诉我如何以非 RESTful 方式覆盖删除 更新 添加等操作 服务器端的 URL 可能是这样的 add www domain com addB
  • 什么是属性对象?

    我对 python 并不陌生 但我有一个非常基本的问题 我在玩python 发现有 type 属性 gt gt gt property
  • 如何深度比较 2 个 Lua 表,它们可能有也可能没有表作为键?

    也发布在 Lua 邮件列表上 所以我一直在编写深复制算法 我想测试它们 看看它们是否按照我想要的方式工作 虽然我确实可以访问原始 gt 复制映射 但我想要一个通用的深度比较算法 该算法必须能够比较表键 表作为键 我的深度复制算法 可以在这里
  • 私有非常量和公共常量成员函数 - 和平共存?

    我正在尝试创建一个具有两个同名方法的类 用于访问私有成员 一种方法是公共且 const 限定的 另一种方法是私有且非常量的 由友元类使用 通过引用返回的方式修改成员 不幸的是 我收到编译错误 使用 g 4 3 当使用非常量对象调用该方法时
  • 带有 SVM 基分类器的 AdaBoost 的执行时间

    我刚刚用这些参数制作了一个 Adaboost 分类器 1 n estimators 50 2 base estimator svc 支持向量分类器 3 learning rate 1 这是我的代码 from sklearn ensemble
  • NETSDK1073:无法识别 FrameworkReference“Microsoft.AspNetCore.App”

    我使用 NET Core 5 0 100 preview 7 20366 6 Blazor webassemble Microsoft Visual Studio Community 2019 预览版 16 7 0 预览版 6 0 file
  • 在 Actionscript 上播放声音

    我有一个简单的拖放游戏 在 Flash 中启动并且大部分工作正常 我已经添加了我的动物 您可以将它们拖放到正确的位置 我还添加了声音 这样当动物被放到正确的位置时 它就可以工作 但是每次我将新动物添加到正确的位置时 它都会起作用 播放那个声
  • Objective-C 中的 NSBundle 和 mainBundle 是什么?

    关于iOS上的Objective C应用程序 我在Apple开发者网站上阅读了一些示例程序 我发现几乎所有的应用程序都包含一个词叫做 NSBundle https developer apple com documentation foun
  • 使用时间跨度对具有相同值的连续行进行分组

    抱歉标题含糊 我只是不知道如何描述这个难题 给出一个教室的时间表如下 Classroom CourseName Lesson StartTime EndTime 1001 Course 1 Lesson 1 0800 0900 1001 C
  • 在 ASP.NET 中发送大量电子邮件

    这是我发送大量电子邮件的代码 我想优化此代码以确保它能够正常工作并且可以成功发送所有电子邮件 我应该怎么办 我知道在发送之间设置中断可能很有用 但我该怎么做呢 主要问题是避免将电子邮件分类为垃圾邮件并减少发送失败的电子邮件数量 var li
  • 使用 Chrome Identity API 获取 id_token

    我正在开发一个 Google Chrome 扩展程序 以允许用户使用他们的 Google 帐户进行身份验证 我决定使用Chrome Identity API 要对我的应用程序中的用户进行身份验证 我需要获取 ID Token 签名令牌 有没
  • 未捕获的类型错误:无法读取 null 的属性“on”[重复]

    这个问题在这里已经有答案了 我收到这个未捕获的类型错误 我不确定是什么原因造成的 也许与 JQuery 有关 这是确切的代码 when add to cart link is clicked addtocart on click funct
  • 使用 javascript 将外部 .htm 文件加载到 div 中

    所以我得到了这个代码 JavaScript html a href file htm class ajax Link a 它在 Firefox 中完美运行 但是当我在 Chrome 中单击链接时 什么也没有发生 而 IE 只是打开一个包含该
  • R 中的 padr:以用户定义的间隔进行填充

    我正在以 5 分钟的时间间隔处理时间序列数据 部分 5 分钟时间序列缺失 我想对数据集重新采样 以用 NaN 值填充缺失的 5 分钟时间段 我在这里找到了有关如何解决此问题的大量信息 R 插入缺少日期 时间的行 https stackove
  • 在数组中查找几个感兴趣的区域

    假设我进行了一项实验 其中我让 python 程序运行了很长一段时间 在那段时间里 我对一些数量与时间的关系进行了多次测量 每次测量都以 1 到 3 秒之间的某个值分隔 所使用的时间步长比该值小得多 比如 0 01 秒 即使只取 y 轴 这
  • 使用 FFmpeg 中的 libavcodec 解码作品

    我正在尝试使用 libavcodec 解码作品 我可以单独使用 libopus 库来做到这一点 但我正在尝试使用 libavcodec 实现相同的目标 我试图弄清楚为什么它在我的情况下不起作用 我有一个 rtp 流并尝试对其进行解码 解码数