获取 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 进行流式传输 的相关文章

  • 定位精度定义 - iOS

    iOS 上返回的 准确性 或 不确定性 的统计意图是什么 即使是近似值 例如 Android 文档对其返回的精度数字进行了解释 从这个意义上讲 它大约是一个标准差 我们将准确度定义为 68 置信度的半径 换句话说 如果 您以该位置的纬度和经
  • 如何为所有整数类型创建通用整数到十六进制函数?

    我想为所有整数类型创建一个整数到十六进制函数 对于1字节的Int8 它返回两个字母 例如0A 对于2字节的Int16 它返回四个字母 例如0A0B 对于8字节的Int64 它返回16个字母 例如0102030405060708 func h
  • 设置UITextField的光标位置

    我查看了单点触控示例并尝试过 var range new NSRange selectionStart 1 NumberTextField SelectedTextRange IndexedRange GetRange range 但这会在
  • iOS - 在 UITabBar 上方获取所需的阴影

    我试图让我的标签栏阴影看起来像这张图片中看到的那样 这样做的最佳方法是什么 我正在使用 Objective C Thanks 您可以使用以下代码为任何 UI 对象提供阴影 tabBar layer shadowOffset CGSize w
  • 如何以最短的停机时间移交 TCP 侦听套接字?

    虽然这个问题被标记为 EventMachine 任何语言的通用 BSD 套接字解决方案也非常受欢迎 一些背景 我有一个应用程序正在侦听 TCP 套接字 它通过常规的 System V 风格的 init 脚本启动和关闭 我的问题是它需要一些时
  • Xcode 11 - 在 Catalyst Swift 中禁用调整大小模式

    We are 将我们基于 Swift 的 iOS 应用程序转换为 Mac兼容使用Catalyst在 Xcode 11 中 当用户使用时 我们在 UI 中面临一个问题resize应用程序窗口 那么我们可以禁用调整大小模式并为应用程序窗口提供修
  • 如何计算CLLocationDistance的中心坐标

    我想计算我的位置和一些注释之间的中心点 到目前为止我已经这样做了 CLLocation myLoc self locMgr location MKPointAnnotation middleAnnotation locationV anno
  • 在两个可移动 uiview 之间画线

    我有一个带有节点的 滚动视图 UIViews 可以拖动 我正在尝试在选定的之间绘制边缘UIViews使用 calayer 但我不知道当视图位置发生变化时如何重新绘制线条 In my viewControllerI 类在节点数组中添加第一个和
  • 如何在 iPad 应用程序上禁用横向方向?

    我创建了一个全新的单视图 iOS 通用 Swift 应用程序 然后 我在应用程序设置中取消选中 横向左 和 横向右 我在 iPhone 上运行了它 万岁 无论我如何旋转手机 它都会保持纵向模式 然后我在 iPad 上运行它 它会旋转到任何内
  • 在后台运行 URL 请求

    我想在一定的时间间隔内发出 url 请求 例如 每 10 分钟应用程序应该发出一次 url 调用并获取一些 json 数据 应用程序在后台运行时应该能够执行此操作 这可以做到吗 如果是这样 这是否违反 Apple 服务条款 有什么限制吗 i
  • 增量后清除推送通知徽章

    我正在研究 iPhone 中的推送通知 当我收到推送通知时 它在我的应用程序图标上显示 1 下次显示 2 3 4 如果我打开应用程序 它是 0 下次它应该是 1 2 3 4 但它显示最后一个数字和 1 我想在打开应用程序后重置推送通知徽章
  • 带有图像的 UITableView 滚动非常慢[重复]

    这个问题在这里已经有答案了 可能的重复 带图像的表格视图 加载和滚动缓慢 https stackoverflow com questions 4071497 table view with images slow load and scro
  • admob ios7错误音频框架

    我正在将 admob SDK 当前的 集成到我的上一个应用程序 IOS7 Xcode5 中 并且出现了一个新错误 在新项目上也是如此 我想我错过了一些东西 但我多次重新启动该过程 但错误仍然存 在 Undefined symbols for
  • 旋转 GPUImageTiltShiftFilter - GPUImage

    我想要一个非水平 GPUImageTiltShiftFilter 旋转 我想将其旋转到任意旋转角度 我还希望过滤器速度快 可以通过带有 UIRotationGestureRecongizer 的 UI 进行旋转 我该怎么做呢 啊 想通了 不
  • 在后台继续下载

    我正在创建一个应用程序 其中我从服务器下载一些数据 在后台运行时 我希望连接继续运行 以便可以下载数据 我知道有方法应用程序委托 void applicationDidEnterBackground UIApplication applic
  • 在 Swift 中,如何为具有自动布局的 UIView 制作动画,就像页面滑入一样?

    我尝试创建一个 UIView 来表示一个大小与设备屏幕相同的页面 由于该应用程序支持方向 因此我使用 AutoLayout 来构建它 它工作正常 直到我尝试将页面动画化以从右侧滑入 经过一番研究后 我能想到的最好的办法是 myView UI
  • 应用程序仅启用纵向,但 UIImagePickerController 在 iOS6 中旋转

    请注意 下面的答案 不适用于 iOS6 所以我仍然需要答案 我的应用程序仅启用纵向模式 但是 如果我将 UIImagePickerController 作为子视图嵌入其中 并旋转设备 则顶部和底部栏将保持在同一位置 但 UIImagePic
  • 游戏中心玩家显示名称在沙盒中始终为“我”

    我使用用户的游戏中心显示名称和玩家 ID 来维护他们在我的服务器上的个人资料 当我进行测试时 一切似乎都正确执行 但我的沙箱帐户的用户显示名称显示为 Me 而不是附加到我的帐户的显示名称 Billybobbo 这应该在沙盒模式下发生吗 Co
  • 使用自定义格式将字符串转换为 NSDate [重复]

    这个问题在这里已经有答案了 可能的重复 NSString 到 NSDate https stackoverflow com questions 1353081 nsstring to nsdate iPhone 如何将 yyyyMMddTh
  • GCD 与自定义队列

    我想知道这两者的性能有什么区别 dispatch async dispatch get global queue DISPATCH QUEUE PRIORITY HIGH 0 perform complex operation dispat

随机推荐

  • 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 的情况 因为它是一个研究项目 套接字实现已完成 我可以发送音频文件 但我在获取流式麦克风数据时遇到问题 这是