2017-08-25 147 views
3

我有一个应用程序(企业,分布式OTA),其中包括记录视频剪辑。突然之间,我们开始获取缺少音频的视频上传,现在这个问题似乎是完全可重现的。我一直在使用PBJVision库,它似乎工作得很好,但我也用SwiftyCam(另一个基于AVFoundation的库)测试了它,结果相同。目前还不清楚这是引进什么时候,但我检查以下内容:视频不再录制音频(PBJVision/AVFoundation)

  • 确保一个NSMicrophoneUsageDescription在目标的.plist
  • 确保摄像头和麦克风的权限都呈现为授予系统设置
  • 设置
  • 尝试在设置禁用麦克风权限(应用程序正确提示用户重新启用权限)
  • 尝试视频捕获库的早期版本中回归的情况下
  • 尝试不同的视频捕获库
  • 为PBJVision/SwiftyCamera显式设置音频启用和比特率,并确保会话至少报告它在日志中有音频(也就是说,库和AVFoundation认为有一个输入设置,输入流是正在处理)
  • 采取与系统摄像头的视频,并上传通过应用程序 - 在这种情况下,声音不工作(这不是硬件问题)
  • 重置设备上的所有内容和权限,使肯定没有某种缓存的权限挂出
  • 确保音量没有静音

保存到相机胶卷的副本也是无声的,因此视频上传时不会发生。我也开始使用AVFoundation来实现录制,但如果这会产生相同的结果,不想浪费时间。什么可能导致一个特定的应用程序不记录视频音频?我查看了相关的问题,并没有提供解决方案来解决我在这里遇到的问题。

编辑:

下面是启动时,记录和停止PBJVision会出现在日志:

[5411:1305718] VISION: camera setup 
[5411:1305718] VISION: switchDevice 1 switchMode 1 
[5411:1305718] VISION: capture session setup 
[5411:1305291] VISION: session was started 
[5411:1305718] VISION: capture session running 
[5411:1305291] VISION: starting video capture 
[5411:1305718] VISION: ready for video (1) 
[5411:1305718] VISION: audio stream setup, channels (1) sampleRate (44100.000000) 
[5411:1305718] VISION: ready for audio (1) 
[5411:1305291] VISION: ending video capture 
[5411:1305963] VISION: capture session stopped 
[5411:1305963] VISION: session was stopped 
[5411:1305291] CMTimeMakeWithSeconds(8.396 seconds, timescale 24): warning: error of -0.021 introduced due to very low timescale 

回答

1

事实证明,这实际上是由于使用第三方库播放声音开始录像后。这显然会抢占录音的音频通道,因为它最终变为空的(请参阅Record Audio/Video with AVCaptureSession and Playback Audio simultaneously?)。在开始录像之前或之后是否开始播放其他声音并不重要。这是一个很好的使用多个库的警告例子,它们都触及相同的系统API--在某些情况下,像这样的一个,它们以不希望的方式进行交互。

在这种情况下,解决方案是确保两个来源不使用相同的AVAudioSessionCategory,因此它们不会发生冲突。