ios 录制视频并同时播放音频

2024-03-07

我想同时录制视频和播放音频。当开始录制视频时,预加载的音频开始播放,当停止视频录制时,音频也停止播放。

我尝试使用第三方库录制视频“迅捷相机" (https://github.com/Awalz/SwiftyCam https://github.com/Awalz/SwiftyCam)并在开始写入视频录制文件时在委托方法中开始播放音频。

主要 ViewCOntroller 代码如下:

override func viewDidAppear(_ animated: Bool) {
 super.viewDidAppear(animated)
 var temp = Data()
 let audioPath = Bundle.main.path(forResource: "ab1-FAST", ofType: "mp3")
        temp = FileManager.default.contents(atPath: (audioPath)!)!
     do {
            player = try  AVAudioPlayer(data: temp)
        }
        catch let error {

            print(error)
        }

        self.configureAudioSession()
        player!.delegate = self
        self.player!.prepareToPlay()
}

    // MARK: -
    // MARK: - SwiftyCamViewControllerDelegate method

func swiftyCam(_ swiftyCam: SwiftyCamViewController, didBeginRecordingVideo camera: SwiftyCamViewController.CameraSelection) {
  self.player?.play()
}

func swiftyCam(_ swiftyCam: SwiftyCamViewController, didFinishRecordingVideo camera: SwiftyCamViewController.CameraSelection) 
{
        if self.player != nil{
            if (self.player?.isPlaying)! {
                self.player?.stop()
            }
        }
}


@IBAction func btnStartStopClick(_ sender: UIButton) {

        sender.isSelected = !sender.isSelected
        if sender.isSelected{

            DispatchQueue.main.async {
                self.objVideoRecorderVC.startVideoRecording()
            }
        }else{
             self.objVideoRecorderVC.stopVideoRecording()

        }
  }

swiftycam 库:

/**

    Begin recording video of current session

    SwiftyCamViewControllerDelegate function SwiftyCamDidBeginRecordingVideo() will be called

    */
public func startVideoRecording() {
        guard let movieFileOutput = self.movieFileOutput else {
            return
        }

        if currentCamera == .rear && flashEnabled == true {
            enableFlash()
        }

        if currentCamera == .front && flashEnabled == true {
            flashView = UIView(frame: view.frame)
            flashView?.backgroundColor = UIColor.white
            flashView?.alpha = 0.85
            previewLayer.addSubview(flashView!)
        }

        sessionQueue.async { [unowned self] in
            if !movieFileOutput.isRecording {
                if UIDevice.current.isMultitaskingSupported {
                    self.backgroundRecordingID = UIApplication.shared.beginBackgroundTask(expirationHandler: nil)
                }

                // Update the orientation on the movie file output video connection before starting recording.
                let movieFileOutputConnection = self.movieFileOutput?.connection(withMediaType: AVMediaTypeVideo)


                //flip video output if front facing camera is selected
                if self.currentCamera == .front {
                    movieFileOutputConnection?.isVideoMirrored = true
                }

                movieFileOutputConnection?.videoOrientation = self.getVideoOrientation()

                // Start recording to a temporary file.
                let outputFileName = UUID().uuidString
                let outputFilePath = (NSTemporaryDirectory() as NSString).appendingPathComponent((outputFileName as NSString).appendingPathExtension("mov")!)


                movieFileOutput.startRecording(toOutputFileURL: URL(fileURLWithPath: outputFilePath), recordingDelegate: self)
                self.isVideoRecording = true
    DispatchQueue.main.async {
                    self.cameraDelegate?.swiftyCam(self, didBeginRecordingVideo: self.currentCamera)
                }
            }
            else {
                movieFileOutput.stopRecording()
            }
        }
    }

问题:有时开始播放音频会延迟一微秒。 当音频开始播放并在视频录制中录制声音时,有时会正确同步,有时会出现声音延迟。

I check it with merge audio with original audio and there is some delay as shown below image. the issue is not always but random delay and not sync.enter image description here

enter image description here are any solutions? how to do record video and play audio at the same time(on single button click) start and no delay and no sync issue? is any other way?

用于播放音频使用:AVAudioPlayer

用于录制视频:Swiftycam (AVCaptureSession)


您可以尝试以下几件事:

1)在后台队列中播放音频:

dispatch_async(dispatch_get_global_queue(QOS_CLASS_BACKGROUN‌​D, 0)) {
    self.player.play()
}

2)移动您的代码viewDidAppear(包括prepareToPlay()) to viewDidLoad。我认为这将是一个不太有用的建议,因为播放是用户发起的,但之间存在延迟prepareToPlay()当你的音频准备好时。

如果您尝试这些并且延迟仍然太多,您可能不得不使用除AVAudioPlayer, 例如OpenAL.

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

ios 录制视频并同时播放音频 的相关文章

  • 为什么performSegueWithIdentifier在viewDidLoad中不起作用?

    我试图在视图控制器上调用 viewDidLoad 后立即触发故事板转场 Segue 附加了一个标识符 当从链接到按钮或其他控件的方法内部调用时 它可以正常工作 但它在 viewDidLoad 内部不起作用 它只是默默地失败了 viewDid
  • iOS、通用链接、Swift。 continueUserActivity 未调用

    我正在为我们的 iOS 应用程序实现通用链接 这是我的一小部分 AppDelegate private func application application UIApplication openURL url URL sourceApp
  • Swift SpriteKit edgeLoopF​​romRect 问题

    下面的代码可以识别底部和顶部边缘场景和球按预期弹开 但是 那左边缘和右边缘现场的情况一直被破坏 如果施加足够的力 球会离开屏幕 然后最终返回 就好像场景的边缘超出了 iPhone 模拟器窗口的边缘 import SpriteKit clas
  • 从 UIPickerView 的选定行设置 UIButton 的标题

    详细场景是这样的 我使用循环创建 10 个按钮并设置 0 9 的标签 点击每个按钮时 我将调用 UIPickerView 在其中加载来自不同数组的数据 到这里我就得到了预期的结果 但我希望 pickerView 中选定的行应设置为相应按钮的
  • 将自定义数据包含到 iOS 故障转储中

    你好 堆栈溢出 有一个简单的问题要问您 当我的应用程序在用户的设备上崩溃时 是否可以将自定义错误数据嵌入到自动生成的 iOS 故障转储中 例如 我的 SQlite 数据库由于某种原因无法运行 例如 数据库文件已损坏 我无法从这个错误中恢复
  • CALayer边框奇怪问题

    我正在向 CALayer 添加边框 但有一些奇怪的行为 在我应用的边框之后出现模糊边框 参见屏幕截图 这是我的代码 void configureLabel self hidden YES self textAlignment NSTextA
  • iOS:生成pdf时绘制文本时如何设置字体?

    我在ios应用程序中使用drawpdf函数生成pdf 同时调用nsobject类中的drawtext函数 它根据我指定的框架和字符串清楚地绘制文本 我的代码是 void drawText NSString textToDraw inFram
  • 为什么 iOS 启动屏幕很慢?

    我的 iOS 应用程序启动屏幕大约需要 3 5 秒 我有一张将在启动屏幕后加载的地图 我的用户必须等待启动屏幕加载 然后再等待 3 秒才能加载地图 有没有办法最大限度地减少启动屏幕时间 基本上这种延迟意味着you在启动过程中做了一些非常错误
  • 在 iPhone 3GS 与 iPhone 4 上为 Mobile Safari 嵌入 HTML5 视频

    我在服务器上的 mp4 文件中有 H 264 AAC 编码的视频 mime 类型的视频 mp4 添加到 Web 服务器 IIS 7 并且我有一个带有视频标签的页面
  • 用户验证 Facebook 后未调用应用程序打开 Url 方法

    我已将 ios 应用程序中的 facebook 升级到 3 0 并使用提供的代码https developers facebook com docs howtos login with facebook using ios sdk http
  • ReactiveCocoa 将 SignalProducers 合二为一

    我正在使用 ReactiveCocoa 并且我有几个 SignalProducers let center NSNotificationCenter defaultCenter let signalProducer1 center rac
  • 调整 UIImage 的大小而不将其完全加载到内存中?

    我正在开发一个应用程序 用户可以在其中尝试加载非常非常大的图像 这些图像首先在表格视图中显示为缩略图 我的原始代码会在大图像上崩溃 因此我重写它以首先将图像直接下载到磁盘 是否有一种已知的方法可以调整磁盘上图像的大小 而无需通过以下方式将其
  • TableViewController 的 viewDidLoad 未触发

    我一直在关注这个tutorial http www appcoda com ios programming sidebar navigation menu 有一个滑出式菜单 我添加了一个 TableViewController 它将显示文章
  • Firebase ref.removeAllObservers() 是否也会递归删除子观察者?

    我看到了一些与此相关的问题 但没有一个真正证实了我的疑问 If I removeAllObservers 在父节点上 这是否也会递归地删除可能已附加在所有子节点和子节点的子节点等处的所有其他观察者 递归地 API 文档为removeAllO
  • iOS:如何知道 reloadData() 已完成其任务?

    我想滚动到给定索引 self boldRowPath 但是当我调试时scrollToRow之前执行reloadData 如何知道reloadData已完成 func getAllTimeEvent self arrAllTimeEvent
  • 模态转场需要点击 2 次而不是 1 次

    我的 UITableView 需要点击 2 次才能显示所选单元格的详细信息页面 一次用于选择 另一次用于显示详细信息视图 我希望有一个 CLI 直接显示所单击单元格的详细视图 我在 UITableViewManager m 中使用此方法的模
  • SpriteKit的更新函数:时间与帧率

    一般来说 我对编程和 Spritekit 很陌生 并且有兴趣探索毫秒和帧率之间的关系 以及如何使用更新函数作为两者之间的中介 帧率与毫秒 从本质上讲 帧速率和时间之间的主要区别在于时间始终一致 而帧速率则不然 由于密集的图形程序 它可能会下
  • 是否可以跨 2 个不同的 iOS 应用程序访问数据?

    假设我在 App1 中存储了一些 ID 数据 并希望在同一设备上的 App2 中访问它 平台上可以这样吗 如果没有的话有什么解决方法吗 您可以使用iOS 钥匙扣 http developer apple com library ios do
  • 像 TraceGL 一样分析 Objective C 中的代码路径?

    TraceGL 是一个非常简洁的项目 它允许 JS 程序员跟踪 Javascript 中的代码路径 它看起来像这样 我想为 Objective C 构建类似的东西 我知道运行时使跟踪方法调用变得相当容易 但是我如何跟踪控制流 例如 在上面的
  • ios - 如何声明静态变量? [复制]

    这个问题在这里已经有答案了 C 中声明的静态变量如下 private const string Host http 80dfgf7c22634nbbfb82339d46 cloudapp net private const string S

随机推荐

  • Laravel 身份验证,我无法检索登录的用户

    Auth check 总是返回 false 这很奇怪 因为登录函数将我重定向到 redirectTo url 因此尝试成功 但之后我无法检索用户 我正在使用 Laravel 5 2 14 和 Xampp 我不知道还要写什么 因为它应该是开箱
  • Swing 桌面开发

    我有一个关于 java 桌面 GUI 应用程序的非常普遍的问题 我的经验 在过去的几年里 我开发了许多桌面应用程序 其中一些单独使用 Swing 一些使用 Spring RCP 这很棒 但我仍然不能只押注于一个已经超过 3 年没有更新的框架
  • 设备重新启动后,AVSampleDisplayBuffer 随机挂起

    问题描述 AVSampleBufferDisplayLayer 似乎在 iOS 12 3 1 上挂起 gt iOS 12 2 也受到影响 重启 看起来 5 分钟后一切又恢复正常了 该问题在 iOS 11 上无法重现 在我们的生产代码中 我们
  • 在 /usr/share/phpMyAdmin/libraries/Error.class.php 中找不到 phpMyAdmin 类“PMA_Message”

    我刚刚收到此错误 过去 2 年 phpMyAdmin 中没有错误 PHP 致命错误 在第 24 行 usr share phpMyAdmin libraries Error class php 中找不到类 PMA Message 我尝试搜索
  • 如何强制 ghc 的分析器更深入地了解库?

    我正在尝试分析我的程序 所以我编译它 prof and auto all标志并运行 P获取详细的分析报告 ghc make prof auto all Test hs Test RTS P 这是一份分析报告 COST CENTRE MODU
  • R 将 KS 测试逐行应用于 2 个矩阵

    我在 R 中有两个矩阵 A 和 B 行数相同 但列数不同 我想运行一个柯尔莫哥洛夫 斯米尔诺夫检验 https stat ethz ch R manual R devel library stats html ks test html每个矩
  • 在 PowerShell 中拆分不带分隔符的字符串

    我想分割一个字符串并将结果标记存储在变量中 例如我的字符串是160519 我想以一种方式分割它16 05 and 19存储在单独的变量中 我尝试使用 split 但是因为我的字符串没有分隔符 所以我发现很难剪切字符串 如果使用正则表达式 实
  • 从另一个表单添加到列表视图

    我想知道如何通过在 form2 中的文本框输入数据来更新 form1 中的列表视图 如果我将所有文本框放在同一个表单上 我的代码可以正常工作 我想我需要对第二个表格的一些参考 但无法让它工作 任何能让我朝着正确方向前进的建议都会很好 也有任
  • RegisterStartupScript 似乎无法在更新面板内进行页面回发

    好的 所以我正在开发一个使用自定义日期选择器控件的系统 我知道还有其他控件 但为了保持一致性 我想了解为什么我当前的问题发生并修复它 所以它是一个带有文本框的自定义用户控件 在 Page PreRender 上执行以下操作 protecte
  • 在asp.net core rc2应用程序的ActionFilterAttribute中访问IConfiguration [重复]

    这个问题在这里已经有答案了 我正在编写将验证验证码的属性 为了正常工作 它需要知道秘密 我将其保留在设置中 秘密管理器工具 但是我不知道如何从属性类读取配置 asp net core中的DI支持构造函数注入 不支持属性注入 所以这会报编译错
  • 将图像从浏览器保存到手机图库

    因此 纯粹从安全角度来看 这似乎不太可能 但我需要做好基础工作 有没有人遇到过将浏览器中的图像保存到用户图库的方法 在本例中 我专门谈论来自站点服务的 javascript 不是音位间隙 虽然我知道您可以点击并按住图像进行保存 但我希望为技
  • 帮助小商店在“乔尔测试”中获得更高分数的工具

    关于问题 1 至问题 4乔尔测试 http www joelonsoftware com articles fog0000000043 html我认为都是关于正在使用的开发工具和为开发人员提供的支持系统 您使用源代码管理吗 你能一步完成构建
  • 如果您按住 Ctrl 键单击或按住 Rt 键单击通知图标,如何获得不同的上下文菜单?

    我有一个基于系统托盘的应用程序 如果您右键单击它 我有一个很好的上下文菜单 但是如果您左键单击它 我希望显示一个不同的上下文菜单 现在我让不同的菜单显示出来 private void niTrayIcon MouseClick object
  • 如何使这个 SwingWorker 代码可测试

    考虑这段代码 public void actionPerformed ActionEvent e setEnabled false new SwingWorker
  • 角度.net core api cors预检请求错误

    我无法使 cors 工作 Angular net core 2 1 我收到此错误 访问 XMLHttpRequest 位于 https dev SaveAPP https dev SaveAPP 从原点 https 页面 https pag
  • dc.js - 动态更改折线图中堆叠层的 valueAccessor 并重绘它

    我正在尝试实现一个仪表板来显示基本数据 我实际上完全陷入了一个问题 奇怪的是 我在网上找不到任何类似的东西 所以我没有太多关于如何继续前进的线索 我主要有两个图表 a lineChart called stackChart that 使用
  • 极端情况、意外和不寻常的 MATLAB [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 JavaFX 中重新加载应用程序?

    我有一个小游戏 里面有New Game按钮 有很多变量需要重置New Game按钮被按下 是否有任何方法可以轻松地重新加载整个应用程序或任何替代方案来刷新场景 阶段或变量 我只想在首次加载应用程序时将其带入初始阶段 我在互联网上浏览了不同的
  • PHP 按位异或 vs. JavaScript 按位异或

    我正在尝试找到一种方法来制作PHP Bitwise XOR结果与以下结果相符JavaScript Bitwise XOR 我遇到了这个问题的不同问题 但都没有答案 这里有几个 Javascript 和 PHP 异或等效项 https sta
  • ios 录制视频并同时播放音频

    我想同时录制视频和播放音频 当开始录制视频时 预加载的音频开始播放 当停止视频录制时 音频也停止播放 我尝试使用第三方库录制视频 迅捷相机 https github com Awalz SwiftyCam https github com