anyRTC-RTMP-OpenSource
anyRTC-RTMP-OpenSource copied to clipboard
iOS 端视频帧数据获取方式疑问?
目前代码VideoCapture.mm:processVideo方法中,直接从[imageFramebuffer byteBuffer]中获取出来使用,这是不是不够完备?没有显示调用glFinish 会导致 cvpixbuffer 获取的是黑屏数据,而如果显示调用glFInish是耗时的。
没有显示调用glFinish 会导致 cvpixbuffer 获取的是黑屏数据 你遇到这样的情况了吗
我在其它项目使用中有遇到这样的问题,网上看到的原因说是cpu提交了gl指令,但是还没有完全执行完,所以导致cvpixbuffer的图像不完整,还有GPUImageRawDataOutput 也是这么做了。 早上测试了iOS Demo 并没有出现这个问题。 下面是我改过的代码,测试设备iPhone 5: 还有一个疑问,为什么美颜滤镜这里为什么要引入 _emptyFilter,变成 _videoCamera->_filter->_emptyFilter->view, 这个 _emptyFilter 怎么看起来是多余的
- (void)setBeautyFace:(BOOL)beautyFace{
if(_beautyFace == beautyFace) return;
_beautyFace = beautyFace;
[_emptyFilter removeAllTargets];
[_filter removeAllTargets];
[_cropfilter removeAllTargets];
[_videoCamera removeAllTargets];
if(_beautyFace){
_filter = [[GPUImageBeautifyFilter alloc] init];
_emptyFilter = [[GPUImageEmptyFilter alloc] init];
}else{
_filter = [[GPUImageColorInvertFilter alloc] init]; // GPUImageEmptyFilter 修改成反色filterGPUImageColorInvertFilter
}
__weak typeof(self) _self = self;
[_filter setFrameProcessingCompletionBlock:^(GPUImageOutput *output, CMTime time) {
// glFinish(); 如果没有glFInish 直播出去画面跟预览画面不一致,打开这句代码就一致
[_self processVideo:output];
}];