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

功能描述

实时视频传输过程中,Qtt SDK 通常会启动默认的视频模块进行采集和渲染。在以下场景中,你可能会发现默认的视频模块无法满足开发需求:

  • app 中已有自己的视频模块
  • 希望使用非 Camera 采集的视频源,如录屏数据
  • 需要使用自定义的美颜库或有前处理库
  • 某些视频采集设备被系统独占。为避免与其它业务产生冲突,需要灵活的设备管理策略

接口描述

public class ChannelEngine { 


/*
* 配置外部视频源。该方法需要在加入频道前调用。
* @param enable 是否使用外部视频源:
- true: 使用外部视频源
- false: (默认)不使用外部视频源
* @param useTexture 是否使用 Texture 作为输入:
- true: 使用 texture 作为输入
- false: (默认)不使用 texture 作为输入
* @return 0为成功;其他失败
*/
public int setExternalVideoSource(boolean enable, boolean useTexture);

/*
* 使用 ExternalVideoFrame 将视频帧数据传递给 Qtt SDK
* @param frame 待传输的视频帧。详见 ExternalVideoFrame
* @return 0为成功;其他失败
*/
public int pushExternalVideoFrame(ExternalVideoFrame frame);

}

:传输视频帧。详见ExternalVideoFrame

示例代码

N21数据格式使用方法

ExternalVideoFrame frame = new ExternalVideoFrame();
frame.buf = data; //传入视频帧的内容数据
frame.format = ExternalVideoFrame.FORMAT_NV21; //NV21 格式
frame.stride = DEFAULT_CAPTURE_WIDTH; //传入视频帧的行间距
frame.height = DEFAULT_CAPTURE_HEIGHT; //传入视频帧的高度
frame.rotation = 270; //指定是否对传入的视频组做顺时针旋转操作,可选值为 0, 90, 180, 270。默认为 0
frame.timeStamp = System.currentTimeMillis(); //传入的视频帧的时间戳,以毫秒为单位。不正确的时间戳会导致丢帧或者音视频不同步
if (engine != null) {
engine.pushExternalVideoFrame(frame);
}

TEXTURE_2D数据格式使用方法

ExternalVideoFrame frame = new ExternalVideoFrame();
frame.textureID = textureId; //视频帧所使用的 Texture ID
frame.format = ExternalVideoFrame.FORMAT_TEXTURE_2D; //FORMAT_TEXTURE_2D 格式
frame.transform = mTransform; //传入一个 4x4 的变换矩阵,典型值是传入一个单位矩阵
frame.stride = DEFAULT_CAPTURE_HEIGHT; //传入视频帧的行间距,单位为像素而不是字节。对于 Texture,该值指的是 Texture 的宽度
frame.height = DEFAULT_CAPTURE_WIDTH; //传入视频帧的高度
frame.timeStamp = System.currentTimeMillis(); //传入的视频帧的时间戳,以毫秒为单位。不正确的时间戳会导致丢帧或者音视频不同步
if (engine != null) {
engine.pushExternalVideoFrame(frame);
}
野狗新手?
立即注册,为你提供安全可靠的实时通信云服务。
没找到需要的文档?
你可以提交工单反馈 或 阅读常见问题