AVAssetReader 和音频队列流问题

2023-12-01

我在使用 AVAssetReader 时遇到问题,无法从 iPod 库获取样本并通过音频队列进行流式传输。我无法找到任何这样的示例,因此我尝试实现自己的示例,但似乎 AssetReader 在音频队列的回调函数处“搞砸了”。具体来说,当它执行 copyNextSampleBuffer 时,它会失败,即,当它尚未完成时,它会返回 null。我已经确保指针存在,因此如果有人可以提供帮助,那就太好了。

下面是我使用过的回调函数代码。当 AudioQueue 回调未调用此回调函数时,该函数会“起作用”。

    static void HandleOutputBuffer (
        void                *playerStateH,
        AudioQueueRef       inAQ,
        AudioQueueBufferRef inBuffer
        ) {

 AQPlayerState *pplayerState = (AQPlayerState *) playerStateH;
 //if (pplayerState->mIsRunning == 0) return;    



 UInt32 bytesToRead = pplayerState->bufferByteSize;
 [[NSNotificationCenter defaultCenter] postNotificationName:NOTIF_callsample object:nil];


 float * inData =(float *) inBuffer->mAudioData;
 int offsetSample = 0;
 //Loop until finish reading from the music data
 while (bytesToRead) {

  /*THIS IS THE PROBLEMATIC LINE*/
  CMSampleBufferRef sampBuffer = [pplayerState->assetWrapper getNextSampleBuffer]; //the assetreader getting nextsample with copyNextSampleBuffer

  if (sampBuffer == nil) {
   NSLog(@"No more data to read from");
 //  NSLog(@"aro status after null %d",[pplayerState->ar status]);
   AudioQueueStop (
       pplayerState->mQueue,
       false
       );
   pplayerState->mIsRunning = NO;

   return;
  }

  AudioBufferList  audioBufferList;
  CMBlockBufferRef blockBuffer;
  CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer(sampBuffer, NULL, &audioBufferList, sizeof(audioBufferList), NULL, NULL, 0, &blockBuffer);
  AudioBuffer audioBuffer = audioBufferList.mBuffers[0];
  memcpy(inData + (2*offsetSample),audioBuffer.mData,audioBuffer.mDataByteSize);
  bytesToRead = bytesToRead - audioBuffer.mDataByteSize;
  offsetSample = offsetSample + audioBuffer.mDataByteSize/8;



 }
 inBuffer->mAudioDataByteSize = offsetSample*8;

 AudioQueueEnqueueBuffer ( 
        pplayerState->mQueue,
        inBuffer,
        0,
        0
        );


}

我也遇到了同样令人困惑的错误。果然,“设置”音频会话使错误消失了。这就是我设置音频会话的方式。

- (void)setupAudio {
    [[AVAudioSession sharedInstance] setDelegate:self];
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil];
    NSError *activationError = nil;
    [[AVAudioSession sharedInstance] setActive: YES error:&activationError];

    NSLog(@"setupAudio ACTIVATION ERROR IS %@", activationError);
    [[AVAudioSession sharedInstance] setPreferredIOBufferDuration:0.1 error:&activationError];
    NSLog(@"setupAudio BUFFER DURATION ERROR IS %@", activationError);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AVAssetReader 和音频队列流问题 的相关文章

  • 如何从 iOS 应用程序检测不安全的 wifi 网络

    我想检测我的应用程序中是否存在不安全的 wifi 网络 是否有任何公共 iOS API 可以实现相同的目的 没有记录的 API 可以获取该信息 如果您的应用程序需要通过网络发送和接收敏感数据 您通常应该假设没有安全连接
  • 如何将 UIImageView 裁剪为自定义形状

    用户是否可以在该位周围画一条虚线 圆圈 UIImageView他们希望裁剪到 然后为UIImageView调整大小到这些点 这有点像 Photoshop 中的套索 选取框效果 更新 从 iOS 8 x 开始 UIImageView 提供了m
  • 我如何从 iPhone 设备获取电子邮件历史记录..?

    friends 我想从我的 iPhone 访问电子邮件历史记录 并且还希望在收到新邮件时收到通知 如果可能的话 请向我提供源代码片段 Thanks 简而言之 使用任何已记录的 API 都是不可能的
  • 将应用程序登录凭据发送给 AppStore 审核者

    我刚刚将我的应用程序上传到应用程序商店 该应用程序需要用户名 密码才能登录 但在上传过程中从未提示我输入任何凭据 有谁知道我如何向审阅者发送我的凭据 而不必等待他们审阅并请求凭据 您编辑应用程序元数据 标题 描述 关键字等 的页面最底部字段
  • iPhone 3GS 上的 ARM 与 Thumb 性能比较,非浮点代码

    我想知道是否有人有关于 iPhone 3GS 上 ARM 与 Thumb 代码性能的硬性数据 特别是对于非浮点 VFP 或 NEON 代码 我知道 Thumb 模式下的浮点性能问题 更大的 ARM 指令的额外代码大小是否会在某个时刻成为性能
  • 在回调函数中调用目标c函数

    如何在回调函数中调用目标c函数 回调函数 static OSStatus inputRenderCallback void inRefCon AudioUnitRenderActionFlags ioActionFlags const Au
  • iPhone SQLite页面缓存不断增长

    I use sqlite数据库用于存储 还有许多数据库事务 我的问题是 sqlite 页面缓存的内存使用量快速增长 在instruments我可以找到这条线 Graph Category Live Bytes Living Transien
  • 如何使用 SwiftUI 获取多个屏幕上的键盘高度并移动按钮

    以下代码获取键盘显示时的键盘高度 并将按钮移动键盘高度 在转换源 ContentView 和转换目标 SecibdContentView 处以相同的方式执行此移动 但按钮在转换目标处不移动 如何使按钮在多个屏幕上移动相同 import Sw
  • 使用特定的 url 启动 UIWebview

    我目前有一个包含四个按钮的视图 并且希望能够启动 UIWebview 并为每个不同的按钮提供特定的 url 我目前可以使用 url 从外部启动 safari 我知道我可以使用代码在每个按钮中显示 UIWebview 并且可以在 UIWebv
  • 在情节提要中将 Segue 拖至自身

    我想将一个 Segue 从我的视图控制器拖到其自身 所以我可以推送该特定视图控制器的 无限 实例 我知道如何在代码中执行此操作 即以编程方式实例化视图控制器 但是 我想尽可能使用 segues 我发现了一些在故事板中进行自我延续的 技巧 但
  • 如何在 iOS 上固定证书的公钥

    在提高我们正在开发的 iOS 应用程序的安全性时 我们发现需要对服务器的 SSL 证书 全部或部分 进行 PIN 操作以防止中间人攻击 尽管有多种方法可以做到这一点 但当您搜索此内容时 我只找到了固定整个证书的示例 这种做法会带来一个问题
  • UILabel UILongPressGestureRecognizer 不起作用?

    我怎样才能得到UILongPressGestureRecognizer在 uilabel 当我实现以下代码时 它不会调用该函数 那么请告诉我我做错了什么 UILongPressGestureRecognizer longPress UILo
  • 带有文本字段的 iPhone AlertView

    我有一个UIAlertView with a UITextField在里面 我想输入mail id并提交于UIAlertView s ok按钮 但是UITextField in the UIAlertView没有回复 请帮助我 thankz
  • 从plist文件中读取数据

    我正在尝试为我的 iPhone 应用程序实现保存状态 我有一个名为 SaveData plist 的 plist 文件 我可以通过以下方式读取它 NSString pListPath2 bundle pathForResource Save
  • UiTextField 和 resignFirstResponder

    我有一个奇怪的设置 我有一个View called View1 and a ViewController call 视图控制器1 in IB View1是 的孩子视图控制器1 Inside View1 我使用代码创建UITextField并
  • 将自己的结构传递到 opengl es 2.0 着色器中

    我想尝试 OpenGL ES 2 0 编程指南 一书中的照明示例 在着色器中他们制作了两种结构 struct directional light vec3 direction normalized light direction in ey
  • 使用 MFMailComposeViewController 类从 iPhone 应用程序发送带有 IMG 标签的 HTML 电子邮件

    我正在使用 MFMailComposeViewController 类从我的 iPhone 应用程序发送格式化的 HTML 电子邮件 我需要在电子邮件中包含图像 并且我在电子邮件正文中添加了 IMG 标签 IBAction shareWit
  • 在 UIImage 顶部绘制透明圆圈 - iPhone SDK

    我在尝试找出如何在 UIImageView 中的 UIImage 顶部绘制透明圆圈时遇到了很多麻烦 谷歌给了我线索 但我仍然找不到有效的例子 有没有人知道的例子可以证明这一点 最简单的方法就是创建一个半透明的方形 UIView 然后将其图层
  • WhatsApp 显示警告“此项目无法共享。请选择其他项目。”对于 iOS 应用程序。

    我正在开发一个 iOS 应用程序 在该应用程序中 我有社交共享功能 并且社交共享功能使用深度链接来共享 URL 该网址共享对于所有应用程序都运行良好 除了WhatsApp 它会显示一个警报弹出窗口 此项目无法共享 请选择其他项目 以下是我的
  • CGImage/UIImage 在 UI 线程上延迟加载会导致卡顿

    我的程序显示一个水平滚动表面 从左到右平铺有 UIImageViews 代码在 UI 线程上运行 以确保新可见的 UIImageView 分配有新加载的 UIImage 加载发生在后台线程上 一切工作几乎都很好 除了每个图像变得可见时出现口

随机推荐

  • 一个函数在内存中只存储一次吗?

    当我们在对象或全局中的任何地方定义函数时 javascript函数是否会存储在内存中一次 function alert some value obj m function alert some value 如果您定义该函数一次 并将该函数的
  • Dataproc Hive 操作员未运行存储桶中存储的 hql 文件

    我正在尝试使用气流脚本运行云存储中存在的 hql 文件 我们可以通过两个参数将路径传递给 DataprocHiveOperator 查询 gs bucketpath filename q Error occuring cannot reco
  • 如何在Android 11中调整手机屏幕中的应用程序?

    在 Android 11 之前 我已经轻松地将我的应用调整为全屏 我的旧手机的摄像头孔和基本按钮位于屏幕区域之外 我的新手机的摄像头孔和基本按钮位于屏幕区域内 经过很少的设置 我的应用程序在旧手机上全屏显示 样式 xml
  • 用分号连接字符串数组

    这是一种经常出现在我们框架的一部分中的模式 给定一个字符串数组 我们必须将所有字符串连接起来 并用分号分隔 我想知道可以用哪种优雅的方式来完成 我在我们的代码库中看到了一些变化 而且当我必须这样做时 我总是必须再次重新考虑 我目前的模式是这
  • AVUrlAsset 和 WebVTT

    在 iOS TVOS 上 是否可以从 URL 加载远程 vtt 文件并将其用作字幕轨道 同时还从 URL 加载远程 HLS 视频 而不是在 m3u8 播放列表中指定的 VTT 伪代码 AVAsset video asset AVAsset
  • 如何在编辑表单中使用 DoctrineModule\Validator\NoObjectExists - Zend Framework 2 和 Doctrine 2

    最有效的使用方法是什么DoctrineModule Validator NoObjectExistsZend Form 中的验证器也用于编辑 因为当我使用相同的表单来保存编辑的值时 这会验证对象存在并标记表单无效 几周前 我在自定义过滤器中
  • 使用 ssl 加密创建 idhttpserver

    我还不擅长使用 delphi 但是根据一些示例 我已经成功创建了不超过 10 个用户的简单 http 服务器 有两个主要问题我还不知道如何解决 验证 管理用户的正确方法 会话 主要问题是 连接必须安全 所以需要SSL加密 如何实现 我发现的
  • Mac OSx 上的 OpenCL 内核错误

    我编写了一些 OpenCL 代码 该代码在 LINUX 上运行良好 但在 Mac OSX 上失败并出现错误 有人可以帮我确定为什么会发生这些情况吗 错误后显示内核代码 我的内核使用 double 所以我在顶部有相应的编译指示 但我不知道为什
  • 样条图平滑拐角

    我在我的项目中使用 NET 框架中的图表控件 我已将图表控件添加到表单中并进行配置 如下所示 Add a new series chart1 Series Add 1 var series chart1 Series 0 series Ch
  • CDI 事件观察器处理服务器崩溃和重新启动

    我正在尝试使用服务将一个项目持久保存在数据库中 并为后续服务触发 JMS 消息以获取持久保存的项目 以便它可以处理相同的项目 此特定操作发生在单个事务中 但由于有时存在竞争条件 第二个服务无法获取相应的项目 因为它尚未持久化 我的用例非常常
  • 如何根据每次提交的日期将两个分支合并为一个分支?

    假设我有一个 git 存储库 如下所示 merge base A1 A2 A3 A4 branchA B1 B2 branchB 为了让事情变得更简单 假设分支上的提交是对 fileA 的严格修改 而分支上的提交是对 fileB 的严格修改
  • 如何一致地展平 numpy 数组?

    from numpy import array eye matrix x array 1 0 A eye 2 print A dot x prints 1 0 另一方面 B matrix 1 0 0 1 print B dot x prin
  • Google Chrome 扩展:主网页中的dispatchevent

    我的扩展内容脚本中有 从内容脚本中 我尝试在主网页上调度事件 但事件没有发送 什么也没有 为了更加确定 我在所有元素中分派事件 each function i entity console log entity entity trigger
  • c将不同长度的向量绑定到数据帧

    我有一个由两个样本组成的数据框 只有一个样本回答了有关状态焦虑的调查问卷 对于这种情况 我使用以下函数 rowSums 计算了躯体状态焦虑的向量 som lp lt rowSums sample1 c 1 7 8 10 108 na rm
  • 导入模块在 Jupyter Notebook 中有效,但在 IDLE 中无效

    我不明白我做错了什么 我上周重新安装了 Windows 之后我得到了 python 3 6 和我需要的所有库 但是当我尝试在 IDLE 中导入它们时返回错误 ModuleNotFoundError 没有名为 的模块 并且当我使用 pip 在
  • 将 Null-Object 拆箱为原始类型会导致 NullPointerException,可以吗?

    这段代码抛出了一个NullPointerException因为它被拆箱为原始类型并且Long longValue 叫做 对吗 如果您有这样的片段 那就更容易看出 long value Long null But the NullPointe
  • Mvc 4 添加带有脚手架的控制器,给出错误 -“无法检索元数据...”

    尝试添加具有 CRUD 操作和 EF 的控制器时出现以下错误 无法检索 LetLord Models Tenant 的元数据 不支持使用相同的 DbCompiledModel 针对不同类型的数据库创建上下文 相反 为正在使用的每种类型的服务
  • 使用 BlueZ Stack 作为外围设备(广告商)

    Goal 使用 BlueZ 和蓝牙 4LE 适配器创建一个外围设备 宣传 Hello World 的蓝牙等效项 我在哪里 我目前已经安装并下载了 BlueZ 堆栈 我可以使用 hci 工具来识别和查看蓝牙适配器 我已经对 hciconfig
  • Highcharts - 如何减少类别之间的空间?

    我需要减少那个空间 我该怎么做 Planificaci n prioridad 和 gerencia 是类别 里面的数字是按人排列的 去做这个点填充 and 点宽是你想要的 Try this 重要的部分是 plotOptions serie
  • AVAssetReader 和音频队列流问题

    我在使用 AVAssetReader 时遇到问题 无法从 iPod 库获取样本并通过音频队列进行流式传输 我无法找到任何这样的示例 因此我尝试实现自己的示例 但似乎 AssetReader 在音频队列的回调函数处 搞砸了 具体来说 当它执行