我将解释我当前的项目以及我想做的事情。
当前项目: 我有一个iOS应用程序,正在录制视频并将其保存到磁盘。我正在使用Apple的Avfoundation库来记录并显示设备上的捕获屏幕。
我想这样做:
我想保留当前功能添加webrtc。问题是webrtc项目已经在使用AVCaptureSession,你不能在同一个应用程序上有两个会话。
我在问这个问题,但似乎很复杂。有人告诉我写一个cricket :: VideoCapturer的子类但是我不确定我是否需要在C ++中重写这个背后的每个类。另外我看到AvCapturesession是在rtc_video_capturer_ios.h中写的,但是我不明白如何从我当前的项目中将AVCaptureSession传递给这个类。
有没有人有这方面的例子?我需要一个方向。
非常感谢你的帮助。
答案 0 :(得分:1)
如果你正在使用Google WebRTC库,有一种方法可以做到这一点,但我还没有一个完全稳定的解决方案。我在https://groups.google.com/forum/?fromgroups=&hl=sv#!topic/discuss-webrtc/8TgRy9YWvVc找到了这些信息,并且能够在我的代码中实现类似的功能。
查看RTCAVFoundationVideoSource,它包含一个可以使用的captureSession,它代表AVCaptureSession。
即使你没有使用谷歌的代码(我看到你参考板球?),你应该可以做类似的事情。
然后你可以尝试这样的事情:
<a href="http://bad/song/references"> <font size=10> getName(song)</font></a>
找到输出,保存对videoBufferDelegate的引用(即WebRTC发送videoBuffers的位置),然后添加自己的引用。
当您实现AVCaptureVideoDataOutputSampleBufferDelegate来处理(写入)缓冲区时,您需要实现以下内容:
for output in sourceAVFoundation.captureSession.outputs {
if let videoOutput = output as? AVCaptureVideoDataOutput {
self.videoOutput = videoOutput
NSLog("+++ FOUND A VIDEO OUTPUT: \(videoOutput) -> \(videoOutput.sampleBufferDelegate)")
externalVideoBufferDelegate = videoOutput.sampleBufferDelegate
videoOutput.setSampleBufferDelegate(self, queue: videoBufferDelegateQueue)
}
}
对缓冲区做任何你想做的事情,但重要的是将缓冲区转发到你之前保留引用的externalVideoBufferDelegate - 这使得WebRTC可以继续处理和转发视频帧。