Ответ 1
Как я понимаю, вы хотите применять фильтры перед отправкой видеоданных, а также в режиме реального времени. Здесь нет простого исходного кода, но я мог бы рассказать вам путь.
Для видеофильмов реального времени вы можете использовать GPUImage. Он готов использовать класс GPUImageVideoCamera
. Таким образом, вам нужно создать класс, который реализует GPUImageInput
(он является целевым с точки зрения GPUImage), который будет создавать кадр OTVideoFrame
из ввода и добавлять его в конвейер.
Что-то вроде этого:
videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack];
videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;
videoCamera.horizontallyMirrorFrontFacingCamera = NO;
videoCamera.horizontallyMirrorRearFacingCamera = NO;
// filter
filter = [[GPUImageSepiaFilter alloc] init];
[videoCamera addTarget:filter];
// frame producer for OTVideoCapture
frameProducer = [[FrameProducer alloc] init];
[filter addTarget:frameProducer];
// camera view to show what we record
[filter addTarget:filterView];
Также вам нужна специальная реализация протокола OTVideoCapture
для самого OpenTok. Вы можете использовать TBExampleVideoCapture
из образец Lets-Build-OTPublisher в качестве начальной точки. Вам нужно заменить код камеры кодом GPUImageVideoCamera
камеры, чтобы использовать фильтры в режиме реального времени.