如何从 AVCaptureAudioDataOutput 播放音频样本缓冲区

2023-12-07

我尝试制作的应用程序的主要目标是点对点视频流。 (有点像使用蓝牙/WiFi 的 FaceTime)。

使用 AVFoundation,我能够捕获视频/音频样本缓冲区。然后我发送视频/音频样本缓冲区数据。现在的问题是在接收端处理样本缓冲区数据。

至于视频样本缓冲区,我能够从样本缓冲区获取 UIImage。但对于音频样本缓冲区,我不知道如何处理它以便播放音频。

所以问题是我如何处理/播放音频样本缓冲区?

现在我只是绘制波形,就像苹果的 Wavy 示例代码一样:

CMSampleBufferRef sampleBuffer;

CMItemCount numSamples = CMSampleBufferGetNumSamples(sampleBuffer);
NSUInteger channelIndex = 0;

CMBlockBufferRef audioBlockBuffer = CMSampleBufferGetDataBuffer(sampleBuffer);
size_t audioBlockBufferOffset = (channelIndex * numSamples * sizeof(SInt16));
size_t lengthAtOffset = 0;
size_t totalLength = 0;
SInt16 *samples = NULL;
CMBlockBufferGetDataPointer(audioBlockBuffer, audioBlockBufferOffset, &lengthAtOffset, &totalLength, (char **)(&samples));

int numSamplesToRead = 1;
for (int i = 0; i < numSamplesToRead; i++) {

    SInt16 subSet[numSamples / numSamplesToRead];
    for (int j = 0; j < numSamples / numSamplesToRead; j++)
        subSet[j] = samples[(i * (numSamples / numSamplesToRead)) + j];

    SInt16 audioSample = [Util maxValueInArray:subSet ofSize:(numSamples / numSamplesToRead)];
    double scaledSample = (double) ((audioSample / SINT16_MAX));

    // plot waveform using scaledSample
    [updateUI:scaledSample];
}

要显示视频,您可以使用 (这里是:获取ARGB图片并转换为Qt(诺基亚qt)QImage,您可以用其他图像替换)

将其委托给班级

 - (void)captureOutput:(AVCaptureOutput *)captureOutput
    didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
           fromConnection:(AVCaptureConnection *)connection

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);

CVPixelBufferLockBaseAddress(imageBuffer,0);

SVideoSample sample;

sample.pImage      = (char *)CVPixelBufferGetBaseAddress(imageBuffer);
sample.bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer);
sample.width       = CVPixelBufferGetWidth(imageBuffer);
sample.height      = CVPixelBufferGetHeight(imageBuffer);

QImage img((unsigned char *)sample.pImage, sample.width, sample.height, sample.bytesPerRow, QImage::Format_ARGB32);

self->m_receiver->eventReceived(img);

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

如何从 AVCaptureAudioDataOutput 播放音频样本缓冲区 的相关文章

  • 了解 AVCaptureSession 会话预设的分辨率

    我正在 iOS 中访问相机并使用会话预设 如下所示 captureSession sessionPreset AVCaptureSessionPresetMedium 相当标准的东西 但是 我想提前知道由于此预设而获得的视频的分辨率 特别是
  • AVFoundation 在后台/锁屏上播放音频 Swift

    我正在尝试找到一种使用 AVFoundation 在用户处于锁定屏幕上或在使用我的应用程序期间锁定应用程序时播放音频的方法 class ViewController UIViewController AVAudioPlayerDelegat
  • 如何在 SwiftUI 中管理 AVPlayer 状态

    我有 SwiftUI 中的 URL 列表 当我点击某个项目时 我会呈现一个全屏视频播放器 我有一个 EnvironmentObject它处理一些查看器选项 例如 是否显示时间码 我还有一个显示和隐藏时间码的切换开关 我只在本例中包含了该切换
  • popToRootViewControllerAnimated 不显示根视图控制器

    我需要一些关于导航控制器问题的帮助 我有一个navigationController with 4 ViewControllers推 我推的最后一个 vc 提出了进一步的ViewController模态地 模态ViewController提
  • ios 将 alpha 通道视频叠加在另一个视频上

    我一直在尝试创建一个视频模板 该模板使用 alpha 通道视频叠加在 mp4 视频和图像上 这就是我需要创建视频的方式http viewptch ptchcdn com rendered 52b28a9f8d4f980f3a3f99c3 c
  • 如何将外部项目添加到 Xcode 4?

    我遇到了在 Xcode 4 中包含项目的问题 我拥有所有文档 但它适用于 Xcode 3 而不是 Xcode 4 如何添加ZXingWidget xcodeproj到我的 Xcode 4 项目 在 Xcode 4 中 您主要是要创建一个新的
  • @iPhone:如何在我们的应用程序中创建 twitter + OAuth 自定义登录

    我正在制作iphone应用程序 我正在使用 OAuth 集成 Twiiter 我的问题是我想要自己的登录页面 而不是像 twitter 提供的新 OAuth 集成那样由 twitter 提供 通过在新的 OAuth 中创建自定义登录页面 是
  • 重用cocos2d动作

    是否可以 并且是一个好的实践 为使用相同操作的多个 CCSprite 重用相同的操作 因为如果我有 10 个 CCSprite 所有这些都需要缩放 我创建了一个名为scaleAction 的缩放操作 是否可以对精灵重复使用相同的动作 当我尝
  • 如何在 iPhone 上实现炫酷的警报/信息叠加?

    我了解如何在我的 iPhone 应用程序中包含标准警报 并且可以使用 确定 或 关闭 按钮将其关闭 请参阅图中的示例 如何制作一个很酷的警报 通知覆盖层 就像 foursquare 应用程序中看到的那样 请参阅图片中的 foursquare
  • WaveSurfer JS 无法在 Firefox 中为特定的 mp3 音频文件生成图表

    我们面临着在 Firefox 中使用 wavesurfer JS 对某些特定格式的 mp3 文件绘制音频可视化 图表 的问题 它总是给我们这样的错误 传递给decodeAudioData 的缓冲区包含未知的内容类型 但同一个文件在 chro
  • 在 Android 中通过蓝牙接收音频

    我想创建一个能够接收音频流的 Android 应用程序 我想过使用 A2DP 配置文件 但似乎 Android 不支持 A2DP 接收器 看起来有很多人正在寻找这个问题的解决方案 但是接收普通的比特流 然后在应用程序中将数据转换为音频呢 我
  • iOS 4.3 上的cameraOverlayView 问题

    我使用带有cameraOverlayView的选择器控制器在相机视图中显示产品的图像 在应用到覆盖层之前 产品图像会调整大小 它在 iOS 4 2 上运行良好 但在 iOS 4 3 上产品图像显示为全尺寸 pickerController
  • CMSampleBufferSetDataBufferFromAudioBufferList 返回错误 12731

    我正在尝试捕获应用程序声音并将其传递给 AVAssetWriter 作为输入 我正在设置音频单元的回调以获取 AudioBufferList 问题始于将 AudioBufferList 转换为 CMSampleBufferRef 它总是返回
  • AVCaptureSession 具有多个方向问题

    我正在尝试实现条形码扫描仪 我有一个 AVCaptureSession 它从 AVCaptureDevice 接收视频 我想支持所有方向 使用以下代码 当我运行应用程序时 纵向一切正常 然而 在横向方向上 视图会旋转 但视频输入不会旋转 所
  • 使用GCD实现并发读独占写模型

    我试图了解使用 Grand Central Dispatch GCD 实现控制资源访问的并发读独占写模型的正确方法 假设有一个 NSMutableDictionary 被大量读取并且偶尔更新 确保读取始终与字典状态一致的正确方法是什么 当然
  • 如何使用AVAssetWriter将h264流写入视频?

    我想将 h 264 流从服务器传输到视频文件 但是当我使用assetwrite finishwrite XCode 报告 Video var mobile Applications DE4196F1 BB77 4B7D 8C20 7A5D6
  • 将标题和图像添加到导航栏

    我需要将 UIViewController 的名称和图像设置为导航栏 到目前为止 我可以显示图像 但标题当然丢失了 show image UIImage image UIImage imageNamed bar icon png UIIma
  • 在 iPhone 应用程序中获取路线和路线导航

    我正在开发一款应用程序 该应用程序将重点关注在驾驶时为用户提供路线和逐段指示 他们在驾驶过程中留在应用程序中非常重要 因此我真的不想让他们离开应用程序并转到内置的地图应用程序 我最近对如何包含此功能进行了大量研究 众所周知 这并不容易 因为
  • 具有函数的 NSSortDescriptor

    我在使用 NSSortDescriptor 方面的经验有限 它可以通过一键进行排序 而且效果很好 但这是我现在需要的 我有一组数字对 例如 2 3 44 5 6 17 33 7 173 21 我想根据给定函数 myfunction x y
  • 检测 iPhone 屏幕是否打开/关闭

    有没有办法检测 iPhone 的屏幕是打开还是关闭 例如 当按下手机的屏幕锁定按钮时 我一直在使用 void applicationWillResignActive UIApplication application 为此类事件做准备 在大

随机推荐

  • Android - 如何将文件附加到短信?

    我需要通过短信发送联系方式 所以 我使用 vcf 文件 不过 我需要将它附加到 android SDK 中的短信 android中有这样的功能 我在智能手机上尝试过 我几天来一直在寻找做到这一点的方法 到目前为止我发现的一切都是这个构建 v
  • 将 B 隐藏在 A
    B

    我有一个 h2 foo br bar h2 我想隐藏 bar 但我找不到合适的选择器 有可能吗 我认为你应该将 B 包裹起来 span B span 并隐藏该跨度
  • dataSnapshot 具有对象,但 getValue() 将返回 null

    所以我现在正在为这个问题苦苦挣扎大约三个小时 我有这个用户类别 public class User private String user id private String userName private long phoneNumbe
  • 如何在Python中查找任何包的“导入名称”?

    我想知道是否有任何可靠且一致的方法来获取Python包 导入名称 命名空间 例如 Package Django 干草堆 导入名称 草垛 or Package 蟒蛇 导入名称 Python 到目前为止我知道 PyPi 不存储我用 PyPiXm
  • C#.net 中的弹出窗口

    如何在单击按钮时弹出子窗体 我希望子 winform 位于屏幕中央 并且整个背景屏幕应该模糊 并且在表单的右上角应该可以看到一个小的关闭按钮 我在网上搜索过但一无所获 使用Winforms 制作一个新的窗口窗体 默认情况下它有一个关闭按钮
  • 键“P​​RIMARY”的重复条目。忽略字符串的空格

    mysql gt CREATE TABLE primary2 boom text id int PRIMARY KEY boom 5 Query OK 0 rows affected 0 04 sec mysql gt INSERT INT
  • SQL 存储过程参数已损坏?

    我有一个存储过程 目前只是假设将您的字符串输入验证为有效日期 我尝试在程序之外运行它 它工作完美 但是一旦我将其放入程序中 参数就会更改为零 我的程序如下 CREATE PROCEDURE spDateRange DateMin varch
  • C - 按升序插入链表

    我正在尝试创建一个程序 将数字按升序插入链接列表中 这是我的插入功能 它适用于插入一些数字 但不适用于其他数字 我认为这与最后一部分有关 但我无法弄清楚 node insert node head int value check if he
  • vb.net查询显示数据表的特定行[基础]

    如何在表中显示查询返回的特定行 查询代码为 SELECT name STD Fees paid FROM register WHERE paid Fees lt 0 我收到错误 An unhandled exception of type
  • 将 boost::bind 函数存储在 std::map 中

    我正在创建一堆函数 它们都有效地执行相同的操作 long Foo check long retValue unsigned toCheck const std set
  • peerjs/webrtciceConnectionState 失败

    我已经尝试解决这个问题有一段时间了 我正在尝试使用peerjs 建立一个简单的连接 我可以成功连接到具有 id 的对等点USER ID 但是 他们无法连接到我 当他们尝试连接时 我收到以下日志 iceConnectionState更改为fa
  • 安装报纸时导入错误

    我对 python 很陌生 正在尝试导入报纸以进行文章提取 每当我尝试导入模块时 我都会得到ImportError cannot import name images 有人遇到过这个问题并找到解决方案吗 我能够通过创建一个来解决这个问题im
  • NLTK WordNetLemmatizer:未按预期进行词形还原

    我正在尝试使用 NLTK 的 WordNetLemmatizer 对句子中的所有单词进行词形还原 我有很多句子 但我只是使用第一句话来确保我正确执行此操作 这是我所拥有的 train sentences 0 Explanation Why
  • 带文本的热图注释

    我正在尝试绘制这个heat map Col 2 Col 3 and Col 1 are x y and z轴 我想注释单元格 后来我尝试使用Col 0 作为轴上的标签 供人类阅读 感谢宝贵的建议 谢谢 Input 0839d22dae7b
  • PowerPivot:如何确定计算列中每组的最大值

    我正在 Power Pivot for Excel 2013 中构建数据模型 并且需要能够识别特定组的列中的最大值 不幸的是 我认为可行的内容以及我之前搜索的内容给了我一个错误或不适用 有一个类似的问题处理计算的度量而不是列 并且在 Pow
  • socket.io 和express:404 未找到

    我的应用程序 js const express require express morgan require morgan bodyParser require body parser path require path mongoose
  • 弹性加载策略文件 crossdomain.xml

    我想将 crossdomain xml 文件放置在与根目录不同的位置 因为它只会产生很多依赖性问题 我怎样才能告诉flex从我的crossdomain xml文件中查找而不是根目录 我是否将loadPolicy代码添加到我的flex应用程序
  • dotnet core 2.1:从 xunit 项目引用 Web 项目时“发现不同版本之间存在冲突”

    当我偶然发现这个奇怪的事情时 我正在将 net core 2 0 应用程序升级到 2 1 的路上 如果我创建一个 Web 项目 然后创建一个引用第一个项目的 xunit 项目 那么一旦我使用任何 Newtonsoft Json 类 我就会收
  • 如何使用Spark Sql进行递归查询

    我正在尝试使用 Spark sql 递归查询分层数据集并识别所有嵌套子项的父根 我尝试过使用自连接 但它只适用于 1 级 有什么想法或指示吗 Thanks 您可以使用基于 Graphx 的解决方案来执行递归查询 父 子或分层查询 这是许多数
  • 如何从 AVCaptureAudioDataOutput 播放音频样本缓冲区

    我尝试制作的应用程序的主要目标是点对点视频流 有点像使用蓝牙 WiFi 的 FaceTime 使用 AVFoundation 我能够捕获视频 音频样本缓冲区 然后我发送视频 音频样本缓冲区数据 现在的问题是在接收端处理样本缓冲区数据 至于视