ffmpeg函数avcodec_receive_frame总是返回EAGAIN错误

2024-02-15

我在iOS上使用ffmpeg解码he-aac音频文件,解码器是libfdk_aac,这是音频文件:https://cdn.perterpon.com/listen/test/bbc.mp4 https://cdn.perterpon.com/listen/test/bbc.mp4这是av_dump_format result:

Metadata:
    major_brand     : iso6
    minor_version   : 0
    compatible_brands: iso6dash
  Duration: N/A, bitrate: N/A
    Stream #0:0(und): Audio: aac (mp4a / 0x6134706D), 48000 Hz, 2 channels (default)
    Metadata:
      handler_name    : USP Sound Handler

av_read_frame and avcodec_send_packet返回 0,但是avcodec_receive_frame总是回来AVERROR(EAGAIN)

我尝试过 ffmpeg 命令行工具:ffmpeg -i bbc.mp4 bbc.mp3,成功了,并且mp3文件可以在iOS上播放。

这是我的代码:

av_register_all();
AVFormatContext *avFormatContext = avformat_alloc_context();
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"bbc" ofType:@"mp4"];

int ret;
ret = avformat_open_input(&avFormatContext, [filePath UTF8String], NULL, NULL);
if (0 != ret) {
    NSLog(@"avformat_open_input failed: %d", ret);
}

ret = avformat_find_stream_info(avFormatContext, NULL);
if (0 != ret) {
    NSLog(@"avformat_find_stream_info: %d", ret);
}

// the libfdk_aac decoder
AVCodec *codec = avcodec_find_decoder_by_name("libfdk_aac");
AVCodecContext *codecContext = avcodec_alloc_context3(codec);

ret = avcodec_open2(codecContext, codec, NULL);
if (0 != ret) {
    NSLog(@"avcodec_open2 faild: %d", ret);
}

AVFrame *frame = av_frame_alloc();
AVPacket packet;
av_init_packet(&packet);

// start read data and decode data
while (true) {
    ret = av_read_frame(avFormatContext, &packet);
    if (0 != ret) {
        break;
    }
    ret = avcodec_send_packet(codecContext, &packet);
    if (ret != 0) {
        NSLog(@"send package with error: %d", ret);
        continue;
        break;
    }
    while (true) {
        // the ret below is always return -35, means AVERROR(EAGAIN)
        ret = avcodec_receive_frame(codecContext, frame);
        if (ret == AVERROR(EAGAIN)) {
            NSLog(@"avcodec_receive_frame with EAGAIN error: %d", ret);
            break;
        } else if (ret == AVERROR_EOF) {
            NSLog(@"end of file");
            break;
        }
    }
    if (ret == AVERROR(EAGAIN)) {
        continue;
    }
}

我尝试过更换bbc.mp4文件至bbc.mp3文件,并将解码器更改为:AVCodec *codec = avcodec_find_decoder(AV_CODEC_ID_MP3);,一切都运转良好。非常非常非常感谢。


当 avcodec_receive_frame 返回 EAGAIN 时,您必须在再次调用 avcodec_receive_frame 之前使用更多数据(或流末尾的空数据包)调用 avcodec_send_packet。

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

ffmpeg函数avcodec_receive_frame总是返回EAGAIN错误 的相关文章

  • 在 Swift 中自动移动 UISlider

    我想在按下按钮时将 UISlider 从 minValue 循环移动到 maxValue 并在再次按下按钮时将其停止在当前位置 我想使用 Swift 我遇到的主要问题是函数 slider setValue 太快了 我希望动画更慢 IBAct
  • 如何使用 Swift 获取 YouTube 频道的所有播放列表?

    我的问题不是关于从一般频道检索视频 我只想获取该频道创建的所有 播放列表 并检索每个播放列表的缩略图 标题和视频数量 这是一个 YouTube 频道示例 正如您所看到的 有很多已创建的播放列表 截至目前 我只能获取某个频道最新上传的视频 在
  • 线程 1:信号 SIGABRT - AppDelegate.h

    main m Journey Created by Julian Buscema on 2014 07 13 Copyright c 2014 Julian Buscema All rights reserved import
  • 混合静态和动态 UITableViewController 内容会导致 NSRangeException

    我一直在寻找这个错误 并找到了一些具有类似行为的帖子 但没有解决问题的解决方案 我有一个 UITableViewController 在 SB 中声明为静态 它具有以下部分 第 0 部分 配方 是静态的 有 4 个单元格 第 1 部分 口味
  • Xcode 9 中的“addingPercentEncoding”是否损坏?

    在 Swift 3 x 和 Xcode 9 beta 2 中 使用addingPercentEncoding https developer apple com documentation swift string 1690785 addi
  • Swift 中通过不同类调用委托方法

    我正在获取 JSON 菜单 一旦 JSON 返回 我想运行 menuReady 来更新表的内容在 SomeTableViewController 类中 但下面的代码似乎不起作用 AIM Run 菜单就绪 JSON 返回后更新内容 PROBL
  • 我应该在哪个方法中设置 UITextField 的委托?

    在 viewDidLoad 或 init 方法中设置 UITextField 的委托是一个好习惯吗 我尝试在 init 方法中将委托设置为 self 但它没有调用相应的委托方法 当我将代码移动到 viewDidLoad 中时 它注册为将 s
  • 在 UIMenuItem 上设置accessibilityLabel

    我正在尝试设置accessibilityLabel of a UIMenuItem而且似乎没有效果 无论如何 VoiceOver 只是读取项目的标题 let foo UIMenuItem title foo action selector
  • KeyboardAvoidingView - 隐藏键盘时重置高度

    我正在使用 React NativeKeyboardAvoidingView设置我的高度View当显示键盘时 但是当我关闭应用程序中的键盘时 视图的高度不会变回原来的值
  • [UIScreen mainScreen].bounds.size 在 iOS8 中变得依赖于方向吗?

    我在 iOS 7 和 iOS 8 中运行了以下代码 UIInterfaceOrientation orientation UIApplication sharedApplication statusBarOrientation BOOL l
  • 如何使用 Objective-C 协议

    我需要将 Picker 选择的值继承到其他地方 我正在尝试下面的代码 但空值即将到来 请检查我哪里出错了 我必须继承在中传递的字符串值PickerView 请检查代码 选取器1 h import
  • 如何从通讯录 ios 以编程方式编辑电话号码值

    我正在尝试在 iOS 中以编程方式替换特定联系人的特定电话号码 获取联系人表单地址簿 我不知道为什么我无法保存新的电话号码并刷新地址簿以显示更改 我正在这样做 BOOL changeContactPhoneNumber NSString p
  • 使用GCD实现并发读独占写模型

    我试图了解使用 Grand Central Dispatch GCD 实现控制资源访问的并发读独占写模型的正确方法 假设有一个 NSMutableDictionary 被大量读取并且偶尔更新 确保读取始终与字典状态一致的正确方法是什么 当然
  • iOS 以编程方式将 AVI 转换为 MP4 格式

    我的应用程序中有一个查询 因为我想将 AVI 格式的视频转换为 MP4 电影格式 所以有没有什么方法可以以编程方式执行此操作 任何代码片段将不胜感激 你需要使用AVAssetExportSession将视频转换为 mp4格式 下面方法转换
  • iOS Safari 通过单击按钮触发扫描信用卡

    您好 我目前正在创建一个测试应用程序 当用户单击文本字段名称或卡号时 扫描信用卡功能对我有用 我的问题是 我希望当用户单击 button1 时发生同样的情况 这应该打开相机来扫描卡并填充现有的文本字段 即名称 卡号和到期日期 额外的好处是
  • 如何在Mac上使用AVFoundation将图片编码为H264,而不是使用x264

    我正在尝试制作一个 Mac 广播客户端 使用 FFmpeg 但不使用 x264 库编码为 H264 所以基本上 我可以从 AVFoundation 中获取原始帧CMSampleBufferRef or AVPicture 那么有没有一种方法
  • WKWebView:无需 Javascript 即可缩放PageToFit 行为

    如何获得scalesPageToFit显示在 HTML 内容中的行为WKWebView 不使用 JavaScript 在我们的例子中需要禁用 JS 抱歉没有发布任何代码 但我不知道如何实现这一目标 我所知道的和我找到的所有解决方案都是基于J
  • 将文本拆分为数组,同时保留 Swift 中的标点符号

    我想将文本拆分为一个数组 保持标点符号与其余单词分隔开 因此字符串如下 Hello I am Albert Einstein 应该变成这样的数组 Hello I am Albert Einstein 我尝试过sting components
  • 应用程序被终止时是否会收到 iOS 静默通知

    当发送后台推送时 content available 1 对于被用户杀死的应用程序 该应用程序不会启动到后台模式 并且application didReceiveRemoteNotification fetchCompletionHandl
  • 在 PDFView 表单字段中配置键盘设置

    我正在开发一个应用程序 它从服务器加载 PDF 文件并在 PDFView 中显示这些 PDF 文件 这些文件包含用户要在其中键入内容的表单字段 这很好用 PDF 文件将用于教育环境 其中拼写应not可以自动更正并且预测文本应该not能得到的

随机推荐

  • NSPredicate 和数组

    我有一个简短的问题 我有一个NSArray洋溢着Cars 继承自 NSObject Car有 property NSString engine 也被视为 synthesize 现在我想使用过滤数组NSPredicate predicate
  • Bootstrap 中的固定页脚

    我正在尝试引导程序 http getbootstrap com 我想知道 如果内容滚动 如何修复底部的页脚而不使其从页面上消失 要让页脚粘在视口底部 请给它一个固定位置 如下所示 footer position fixed height 1
  • Vue.js v-if 对变量变化没有反应

    我正在使用 vue js 并且在正确使用 v if 方面遇到了一些困难 我正在尝试在模板内渲染条件模板 在创建的方法中 变量isloaded设置为 true 这应该会导致模板重新呈现并让 正在加载数据 消息消失 然而 日志表明 2s 的延迟
  • 如何添加 .NET Framework 安装先决条件

    我在 Microsoft Visual Studio 中有一个 C Windows 窗体项目2017 我添加了 Visual Studio 安装程序安装向导项目来为我的应用程序创建安装程序 这是我第一次使用安装程序项目 安装程序正确地具有
  • 按复杂标准合并/连接 2 个 DataFrame

    我有 2 个大型数据集 每个数据集有 70K 到 110K 我想关联 比较两者 并根据某些条件 标准查找 set2 中的哪些项目可以在 set1 中找到 我当前的策略是按公共字段对两个列表进行排序 然后运行嵌套for循环 执行条件if测试
  • 在客户端用 JavaScript 逐行读取文件

    您能帮我解决以下问题吗 Goal 在客户端 通过 JS 和 HTML5 类在浏览器中 逐行读取文件 无需将整个文件加载到内存中 Scenario 我正在开发应该在客户端解析文件的网页 目前 我正在阅读本文件中描述的文件article htt
  • 如何在同一端口中运行 Angular 和 Node.JS Express?

    这可能是重复的问题 但无法理解如何配置 FE 和 BE 一起运行它们 我已经经历过this https stackoverflow com q 39845526 and this https stackoverflow com q 4678
  • 使用“from x import *”记录文件

    sphinx 的 automodule 和其他自动功能可用于记录包含以下内容的模块from x import 声明不包含导入模块的所有文档 编辑 根据mzjn的观点 只要导入的方法 module 属性与模块名称不同 不应记录它们 然而 对于
  • FBSDKLoginManager 代码从 Objective-C 到 swift

    任何人请帮助我如何将 FBSDKLoginManager 代码转换为快速编程提前感谢我附上 Objective C 中的代码 IBAction btnFacebookPressed id sender FBSDKLoginManager l
  • 使用二维动态分配字符串创建动态分配结构

    我正在尝试扫描字母网格 cases是字母网格的数量 r c是每个网格的行数和列数 我想我可以创建一个内部包含二维数组的结构数组 我已经为此工作了几个小时 但它仍然给我带来问题 警告 警告 C4477 12号线 scanf s 格式字符串 s
  • dexing时如何查找错误原因:MethodHandle.invoke和MethodHandle.invokeExact

    我有一个项目在 Android Studio 或 Gradle 中构建时开始抛出此错误 com android tools r8 ApiLevelException MethodHandle invoke and MethodHandle
  • 使用 PHPUnit 发送 POST 请求

    我有一个 symfony 网站 我正在尝试进行一些单元测试 我有这样的测试 我尝试提交一些东西
  • 忽略 BinaryFormatter 序列化中的非序列化属性

    我有一堂课叫User它是 Serializable 并继承自基类IdentityUser实体框架类且不可序列化 我有房产在Booking类与类型User and Booking类是Serializable我正在尝试使用序列化预订对象Bina
  • 边框半径被内部 div 隐藏

    我有一个 div 作为内容框 并在其中有另一个 div 作为标题 外部 div 设置了 border radius 但内部 div 隐藏了它 HTML div div This is the title div div CSS box he
  • `jcmd PID GC.class_histogram`会在收集数据之前调用完整GC吗?

    当我跑步时jcmd PID help GC heap dump 帮助中明确指出会调用full GC 除非 all指定标志 GC heap dump 影响 高 取决于 Java 堆大小和内容 除非指定了 all 选项 否则请求完整 GC al
  • 服务在短时间内(1分钟)后被终止

    我创建了一项服务 其工作是在用户关闭应用程序时清除通知 一切都运行得很好但是有时 当应用程序在后台运行超过 1 分钟时 服务就会被终止 这意味着通知不会被取消 为什么会发生这种情况 我认为停止服务的唯一方法是使用 stopSelf 或 st
  • 基于多索引 pandas 数据框使用 matplotlib 绘制误差条

    我在 pandas 中有以下数据框 gt gt gt name Hour trt level stress date value 0 D43 9 H control 2019 06 07 0 4561 1 D43 10 H control
  • 如何摆脱 Git 子模块未跟踪状态?

    我似乎无法摆脱 Git 子模块中未跟踪的内容 跑步git status yields On branch master Changes not staged for commit use git add to update what wil
  • 为什么从初始化列表启动向量时不使用移动构造(通过隐式构造函数)

    为了演示移动语义 我编写了以下示例代码 其中包含 int 的隐式构造函数 struct C int i 0 C C int i i i C const C other i other i std cout lt lt A copy cons
  • ffmpeg函数avcodec_receive_frame总是返回EAGAIN错误

    我在iOS上使用ffmpeg解码he aac音频文件 解码器是libfdk aac 这是音频文件 https cdn perterpon com listen test bbc mp4 https cdn perterpon com lis