获取 iPhone 麦克风数据以通过 Socket 进行流式传输

2024-01-12

我想从 iPhone 麦克风获取原始音频数据(NSData 格式)以通过套接字进行流式传输。这不是我可以使用 twilio/etc 的情况,因为它是一个研究项目。套接字实现已完成(我可以发送音频文件),但我在获取流式麦克风数据时遇到问题。

这是我的尝试:

class ViewController: UIViewController, AVCaptureAudioDataOutputSampleBufferDelegate
{

    override func viewDidLoad()
    {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        self.setupMicrophone()
    }

    override func didReceiveMemoryWarning()
    {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func setupMicrophone()
    {
        let session = AVCaptureSession()
        session.sessionPreset = AVCaptureSessionPresetMedium

        let mic = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeAudio)
        var mic_input: AVCaptureDeviceInput!

        let audio_output = AVCaptureAudioDataOutput()
        audio_output.setSampleBufferDelegate(self, queue: dispatch_get_main_queue())

        do
        {
            mic_input = try AVCaptureDeviceInput(device: mic)
        }
        catch
        {
            return
        }

        session.addInput(mic_input)
        session.addOutput(audio_output)

        session.startRunning()
    }

    func captureOutput(captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection!)
    {
        // Do something here
    }
}

问题:

  • 委托函数永远不会被调用。

  • 提供给委托的数据(如果被调用)不是 NSData,是否有另一个函数可以提供 NSData?有没有办法将 CMSampleBuffer 转换为 NSData?

任何帮助表示赞赏。

Cheers


Your AVCaptureSession超出范围并被释放。这就是为什么您的代表没有被召集的原因。您可以通过移动来解决此问题session班级范围:

class ViewController: UIViewController, AVCaptureAudioDataOutputSampleBufferDelegate {

   let session = AVCaptureSession()

   override func viewDidLoad() {

一旦你有了音频CMSampleBuffer,您可以将音频数据复制到NSData像这样的对象:

let block = CMSampleBufferGetDataBuffer(sampleBuffer)
var length = 0
var data: UnsafeMutablePointer<Int8> = nil
let status = CMBlockBufferGetDataPointer(block!, 0, nil, &length, &data)    // TODO: check for errors
let result = NSData(bytes: data, length: length)

附注如果你很小心并且想避免复制,你可以使用NSData(bytesNoCopy: data, length: length, freeWhenDone: false)

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

获取 iPhone 麦克风数据以通过 Socket 进行流式传输 的相关文章

  • Android设备到PC的socket连接

    我面临着建立从 Android 设备到 PC 的特定端口的套接字连接的问题 例如8080 我只想创建一个套接字 它将连接到特定端口并在该端口上写入一些数据流 我为此目的编写了一些代码 但代码给了我一个例外 TCP Error java ne
  • 如何在 Firebase 控制台中使用 Apple 新的 APN .p8 证书

    随着最近 Apple 开发者帐户的升级 我面临着一个困难 在尝试创建推送通知证书时 它为我提供了 p8 证书 而不是可以导出到 p12 的 APNs 证书 Firebase 控制台仅接受 p12 证书 那么我如何从这些新的 p8 证书中获取
  • 在没有预览窗口的情况下使用 AVCaptureVideoDataOutputSampleBufferDelegate

    我正在开发一个基于 Swift 的 macOS 应用程序 我需要捕获视频输入 但不将其显示在屏幕上 而不是显示视频 我想将缓冲的数据发送到其他地方进行处理 并最终显示它在 a 中的一个物体上SceneKit scene 我有一个Camera
  • 在 WKWebView 中禁用放大手势

    我正在寻找一种方法来禁用 WKWebView 的 iOS 实现上的 捏合缩放 放大手势 OS X 有一个 magnification BOOL 属性 但在 iOS 上似乎不可用 WKWebView h if TARGET OS IPHONE
  • Parse.com 从相关 PFObject 获取 PFUser

    我正在将照片保存为 PFObject 解析 并使用 PFUser currentUser 用户 ID 作为其键之一 我想在表格视图中显示照片以及该 PFUser 的详细信息 但是当我尝试获取用户时 PFUser user self phot
  • 如何知道我的应用程序使用了多少 iCloud 空间?

    有没有办法查看我的应用程序正在备份到 iCloud 的内容以及它消耗了多少内存 Settings gt iCloud gt Storage Backup gt Manage Storage将显示正在备份的总计内容 iOS 会备份位于应用程序
  • 如何使用 NSUserDefaults 在 Swift 中存储自定义类的数组?

    我有一个名为的自定义类Person当某人输入信息时 它会存储有关某人的各种属性 class Person Person dictionary variable var name String var age String var html
  • 带操作按钮的颤动本地通知

    我在我的 flutter 项目中尝试了 flutter 本地通知插件 它在简单通知上工作正常 但我需要带有操作按钮的通知功能 请帮助我或建议我实现此功能 不幸的是 flutter local notifications 插件尚不支持操作按钮
  • UIScrollView setZoomScale 将应用的旋转设置回零

    我已经从事地图替换工作很长一段时间了 整个事情的工作原理是UIScrollView由一个支持CATiledLayer 为了旋转我的地图 我旋转图层本身 使用CATransform3DMakeRotation 到目前为止效果很好 但如果我打电
  • 适用于 iPhone / iPad / iOS 的快速、精益 PDF 查看器 - 提示和提示?

    最近有很多关于绘制 PDF 的问题 是的 您可以使用UIWebView但这无法提供您所期望的优秀 PDF 查看器的性能和功能 您可以绘制PDF页面到 CALayer http www cocoabuilder com archive coc
  • 覆盖层不与 UITableView 一起滚动 - iOS

    我有一个 UITableView 类 它使用以下方法在转到下一个屏幕时调用加载覆盖 问题是这个加载屏幕不随列表滚动 所以如果你滚动一点并单击某些东西 加载屏幕不会显示 因为它位于顶部 如何让加载屏幕始终保持在 UITableView 的顶部
  • 将 SSLSetEnabledCiphers 与 AFNetworking 结合使用来禁用弱密码

    我正在尝试禁用一些密码 弱 例如单个 DES 单个 DES 40 位等 我尝试过使用这段代码在 Cocoa 中使用 CFSocket CFStream 时如何设置 SSL 密码 https stackoverflow com questio
  • 减少 CoreData 的调试输出?

    我正在开发一个使用 CoreData 的 iOS macOS 项目 它工作正常 但它会向控制台输出大量调试信息 这使得控制台无法使用 因为我的打印语句隐藏在所有与 CoreData 相关的内容中 我有一个非常简单的 CoreData 设置
  • 作为!与 Swift 中 Xcode 6.3 中的 as 运算符对比

    Xcode 6 3 使 Swift 发生了很大变化 我必须更换每个应用程序中的数十个位置as gt as 为什么 现在有什么规则 在 Swift 1 2 之前 as运算符可用于执行两种不同类型的转换 具体取决于要转换的表达式的类型及其要转换
  • AVAssetExportSession 为零 iPhone 7 - Plus 模拟器

    AVAssetExportSession在 iPhone 6 及以下版本上运行良好 但在 iPhone 7 iPhone 7 Plus 模拟器上运行不佳 Xcode 8 0 这段代码return nil在exportSession中 当在i
  • 如何让按钮闪烁?

    我试图在扫描正确时将按钮的颜色 只是闪烁 闪烁 更改为绿色 在出现问题时将按钮的颜色更改为红色 我可以用这样的视图来做到这一点 func flashBG UIView animateWithDuration 0 7 animations s
  • 什么是 WKWebView 中的 WKErrorDomain 错误 4

    fatal error LPWebView encounters an error Error Domain WKErrorDomain Code 4 A JavaScript exception occurred UserInfo 0x7
  • Swift 中的 import 语句是否有相关成本?

    阅读字符串宣言 我看到一个段落 https github com apple swift blob master docs StringManifesto md batteries included关于避免Foundation不需要的时候导
  • UIView晃动动画

    我试图在按下按钮时使 UIView 摇动 我正在调整我找到的代码http www cimgf com 2008 02 27 core animation tutorial window shake effect http www cimgf
  • 在 UIScrollview 上显示缩略图的最佳方法是什么(从服务器下载)

    我想在 UIScrollview 如照片应用程序 上显示许多图像 作为缩略图 所有图像将从服务器下载 据我所知 有几种选择 1 通过创建 UIImageviews 然后将它们添加为主滚动视图上的子视图 2 通过子类化一个UIView类 然后

随机推荐

  • React 错误边界无法捕获错误

    我创建了我的反应应用程序vite在那里我有我的自定义反应错误边界组件从组件包装 事情是它无法捕获错误 我调试我的错误组件 但它无法接收任何值getDerivedStateFromError not componentDidCatch 这是我
  • python 修改方法内的字典

    是否可以在不将字典作为参数传递的情况下修改函数内字典的值 我不想返回字典 而只想修改它的值 这是可能的 但不一定是可取的 我无法想象为什么你不想传递或返回字典 如果你只是不想返回字典 但可以传递它 你可以修改它以反映在原始字典而不必返回它
  • 执行 Espresso 测试时更改区域设置

    我正在创建一个简单的布局 应该支持阿拉伯语言和 RTL 布局 一切正常 现在我想编写一个 Espresso 测试并断言它是否实际显示翻译后的文本 例如对于阿拉伯语 它应该显示阿拉伯语 strings xml 中的文本 到目前为止 我尝试了以
  • golang解码嵌套结构中的JSON请求并将其作为blob插入数据库

    我有一个嵌套结构 用于解码 JSON 请求 type Service struct ID string json id omitempty db id Name string json name db name Contract struc
  • Python随机播放列表不起作用[重复]

    这个问题在这里已经有答案了 我是Python新手 具有 C 背景的我很难理解这种语言的简单性 更不用说 IDLE 是如何工作的了 无论如何 我需要编写一个简单的函数 它接受一个列表并返回一个新列表 其中的元素已打乱顺序 这就是我到目前为止所
  • 如何在 lwuit TextField 或组合框中添加日历

    我正在使用 lwuit 创建一个应用程序 我想在组合框中添加日历 请尽快给我一个想法 您的意思是要在组合框值的末尾添加日历组件的选定日期还是在文本框中显示选定的日期 如果是这样 那么下面的代码将在文本框中显示日历组件的选定日期 Button
  • 检查当前线程是否为主线程

    Objective C 有没有办法检查当前线程是否是主线程 我想做这样的事情 void someMethod if IS THIS MAIN THREAD NSLog ok this is main thread else NSLog do
  • Android Studio 0.5.3 - 为什么“Make Project”不再运行构建?

    自从我升级到 0 5 3 以来 Android Studio 中的 Make Project 没有为我构建 apk 文件 有谁知道我怎样才能做到这一点 我已将 buildToolsVersion 更新为 19 0 3 这是最新版本 每次 A
  • 错误:未找到默认活动,但已声明它

    我遇到过两次奇怪的情况 我的主模块中有清单 igs main
  • Scala 特性 mixin order 和 super call

    我有这个代码 trait base def msg Unit println base trait foo extends base abstract override def msg Unit super msg println foo
  • 将数据帧拆分为分组块

    我想将数据帧分割成块 我创建了一个函数 它能够将数据帧分割成相同大小的块 但是我无法弄清楚如何按组分割 数据帧的每个分割必须包含分组变量的所有实例 我希望能够灵活地确定可以包含多少个组 因为它们相对较小 示例数据框 A 1 A 2 B 3
  • 软键盘添加*和#键

    1 问题 我有一个EditText用户必须在其中输入USSD code Problem是 用于输入USSD用户必须切换到的代码符号键盘 两到三次 这会造成非常糟糕的用户体验 USSD 代码示例 345 77 333 25 123 678 等
  • 有没有办法在(GitHub 风格的)Markdown 中为文本添加上划线?

    我想在 Markdown 文件中为某些文本添加上划线 这可能吗 它可以使用波形符 就像粗体 斜体等一样 下面是来自亚搏体育appGitLab文档 https guides github com features mastering mark
  • Android - 使用 openGL ES 绘制 3D 然后 2D

    在 openGL ES 中绘制一些 3D 内容后 如何绘制 HUD 文本或位图 我试过这个 private void switchTo2D GL10 gl gl glDisable GL10 GL DEPTH TEST gl glMatri
  • Chrome 项目 - Blink 引擎源代码在哪里? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Chrome 的 Blink 引擎的源代码位于哪里 Update 积极的发展似乎正在发生third pa
  • 创建后如何在 Azure 数据工厂中启用诊断

    我正在尝试在通过 c 自动化应用程序创建 azure 数据工厂后使用 ARM 模板启用诊断 我尝试对非计算资源模板使用此处的步骤 https learn microsoft com en us azure monitoring and di
  • 类似于 CloudKit 的多平台 MBaas?

    我也需要在 Android 中实现基于 CloudKit 的应用程序 哪个 MBaas 的架构与 CloudKit 最相似 我需要这些功能 级联删除 能够跟踪从令牌表示的日期开始表中的插入 更新 删除更改 资产管理 基于游标的记录获取 分页
  • 如何向我的网站添加 snapchat 共享按钮。是否可以为 Snapchat 添加共享按钮?

    我正在开发一个网站 我在基于 php html 的网站上添加了许多社交登录或共享按钮 facebook tweeter gplus pintrest 等链接 现在我必须为 snapchat 添加社交共享按钮 是否可以在我的网站上提供链接或按
  • Facebook:有没有办法获取不是我朋友的用户的 current_location?图形 API 或 FQL

    假设我有一个用户 ID 和用户名 我手动打开她的 Facebook 页面 即http www facebook com 用户名 http www facebook com username 就是这样 住在 字段显示她住在任何地方 尽管如此
  • 获取 iPhone 麦克风数据以通过 Socket 进行流式传输

    我想从 iPhone 麦克风获取原始音频数据 NSData 格式 以通过套接字进行流式传输 这不是我可以使用 twilio etc 的情况 因为它是一个研究项目 套接字实现已完成 我可以发送音频文件 但我在获取流式麦克风数据时遇到问题 这是