IOS视频渲染相对编解码要简单一些,系统也提供了GLKView,当然我们也可以自定义实现。这里我就分享下自己实现的一点经验。
自定义的renderframe
#import <UIKit/UIKit.h>
@class AVCaptureVideoPreviewLayer;
class I420VideoFrame;
@interface VideoRenderFrame : UIView
@property (nonatomic, strong) AVCaptureVideoPreviewLayer *prevLayer;
- (id)initWithParent:(UIView*)parent Preview:(AVCaptureVideoPreviewLayer*)prev;
- (void)setScalingType:(int)scalingType;
- (void)pause;
- (void)resume;
- (void)rawFrameComes:(I420VideoFrame*)raw;
@end
视频渲染又分为本地和远端的,首先来说下本地视频渲染。
ios系统提供了本地视频预览层 AVCaptureVideoPreviewLayer,我们只需要在采集视频时 将其创建出来。
prelayer = [AVCaptureVideoPreviewLayer layerWithSession:_captureSession];
renderframe = [[VideoRenderFrame alloc] initWithParent:parentView Preview:prelayer];
这里的parentView是用户调用playvideo时传入的view,然后在将AVCaptureVideoPreviewLayer添加到 VideoRenderFrame的layer中。
- (id)initWithParent:(UIView*)view Preview:(AVCaptureVideoPreviewLayer*)prev
{
self = [super initWithFrame:view.bounds];
if (self) {
self.backgroundColor = [UIColor blackColor];
self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
self.clipsToBounds = YES;
[view addSubview:self];
[view setAutoresizesSubviews:YES];
_lock = [[NSLock alloc] init];
if