自定义视频采集和渲染 编辑文档

功能描述

实时视频传输过程中,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];
}
野狗新手?
立即注册,为你提供安全可靠的实时通信云服务。
没找到需要的文档?
你可以提交工单反馈 或 阅读常见问题