功能描述
实时视频传输过程中,Qtt SDK 通常会启动默认的视频模块进行采集和渲染。在以下场景中,你可能会发现默认的视频模块无法满足开发需求:
- app 中已有自己的视频模块
- 希望使用非 Camera 采集的视频源,如录屏数据
- 需要使用自定义的美颜库或有前处理库
- 某些视频采集设备被系统独占。为避免与其它业务产生冲突,需要灵活的设备管理策略
接口描述
@interface QttChannelEngine : NSObject /* * 配置外部视频源。该方法需要在加入频道前调用。 * @param enable 是否使用外部视频源: - true: 使用外部视频源 - false: (默认)不使用外部视频源 * @param useTexture 是否使用 Texture 作为输入: - true: 使用 texture 作为输入 - false: (默认)不使用 texture 作为输入 * @return - 0(ERR_SUCCESS): 成功. - < 0: 失败. */ - (void)setExternalVideoSource:(BOOL)enable useTexture:(BOOL)useTexture pushMode:(BOOL)pushMode;
/* * 使用 ExternalVideoFrame 将视频帧数据传递给 Qtt SDK * @param frame 待传输的视频帧。详见 ExternalVideoFrame * @return - 0(ERR_SUCCESS): 成功. - < 0: 失败. */ - (BOOL)pushExternalVideoFrame:(ExternalVideoFrame* _Nonnull)frame; @end
|
注:传输视频帧。详见ExternalVideoFrame
示例代码
N21数据格式使用方法
-(void)customVideoCapture:(CVPixelBuffer)pixelBuffer timeStamp:(CMTime) timeStamp { ExternalVideoFrame *frame = [[ExternalVideoFrame alloc] init]; frame.buf = pixelBuffer; //传入视频帧的内容数据 frame.format = VIDEO_PIXEL_NV12; //NV21 格式 frame.stride = DEFAULT_CAPTURE_WIDTH; //传入视频帧的行间距 frame.height = DEFAULT_CAPTURE_HEIGHT; //传入视频帧的高度 frame.rotation = 270; //指定是否对传入的视频组做顺时针旋转操作,可选值为 0, 90, 180, 270。默认为 0 frame.timeStamp = timeStamp; //传入的视频帧的时间戳,以毫秒为单位。不正确的时间戳会导致丢帧或者音视频不同步 [engine pushExternalVideoFrame:frame]; }
|
TEXTURE_2D数据格式使用方法
-(void)customVideoCapture:(CVPixelBufferRef)textureID timeStamp:(CMTime) timeStamp { ExternalVideoFrame *frame = [[ExternalVideoFrame alloc] init]; frame.mTextureBuf = textureID; //视频帧所使用的 Texture ID frame.format = VIDEO_TEXTURE_IOS; //FORMAT_TEXTURE_2D 格式 frame.transform = mTransform; //传入一个 4x4 的变换矩阵,典型值是传入一个单位矩阵 frame.stride = DEFAULT_CAPTURE_HEIGHT; //传入视频帧的行间距,单位为像素而不是字节。对于 Texture,该值指的是 Texture 的宽度 frame.height = DEFAULT_CAPTURE_WIDTH; //传入视频帧的高度 frame.timeStamp = timeStamp; //传入的视频帧的时间戳,以毫秒为单位。不正确的时间戳会导致丢帧或者音视频不同步 [engine pushExternalVideoFrame:frame]; }
|