目前我正在使用AVFoundation
从iPhone相机中抓取帧然后将它们转换为UIImage
然后我通过NSOutputStream
将其传输到我的其他设备。
不幸的是,我很可能因为内存达到300mb而导致内存崩溃。
我的问题:有没有更好的方法来执行此操作或其他方法,使其停止崩溃或在我发送图像之间的延迟时间较短另一台设备?或者我可以把它变成像接收设备上的视频一样的生命流吗?
- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
fromConnection:(AVCaptureConnection *)connection
{
@autoreleasepool {
UIImage *image = [self imageFromSampleBuffer:sampleBuffer];
[_room broadcastChatMessage:image fromUser:@"self"];
dispatch_async(dispatch_get_main_queue(), ^(void){
[_imgView setImage:image];
});
}
// < Add your code here that uses the image >
}
答案 0 :(得分:2)
从iOS设备流式传输视频的最佳选择之一是录制H264视频并从磁盘上的电影文件中提取NAL单元(它们代表帧片)(使用AVFoundation
)并发送他们使用您选择的协议在网络上。您可以在https://github.com/jamesghurley/VideoCore/blob/master/transforms/iOS/H264Encode.mm查看此示例。使用这种技术,延迟非常低。
然而在另一台iOS设备上播放该内容却很复杂。您可以使用FFMpeg实时播放它,或者如果您可以接受一些延迟(3-4秒),您可以设置HTTP代理并通过HLS服务NAL单元。这也是一个复杂的过程,但可能有一个库可以做到。
编辑:稍微更新一下这个答案。 iOS 8中现在有一个名为AVSampleBufferDisplayLayer
的类,它可以直接将H.264 NAL单元作为输入。