新版图传
Sample 介绍
MSDK 对图传功能进行了以下几方面的优化,开发者不用再关注通道的概念,只需要关注相机位置、需要获取哪些数据。旧版图传功能已废弃,推荐开发者使用新版的图传功能。
- 支持同时将相机画面输出到多个 surface,且支持 3 种自适应画面(填充、自适应全屏,自适应缩放)
- 支持更多的图传输出格式,方便开发者对图传画面的二次利用,格式包括 RGBA、YUV_420、YUV_422、YUV_444、NV21、YUYV
- 使用直播功能不再依赖图传显示
- 图传性能和效率优化
新旧 API 差异比对
- IVideoStreamManager 能力迁移
旧版接口 | 新版接口 | 说明 |
---|---|---|
getAvailableStreamSources() addStreamSourcesListener() | addAvailableCameraUpdatedListener() | 合并为一个接口,每次添加将立即回调最近一次可用相机状况,新版 API 仅需要关注相机索引信息 |
removeStreamSourcesListener() | removeOnAvailableCameraUpdatedListener() | 仅名称变更,用法不变 |
clearAllStreamSourcesListeners() | / | 不提供 |
getAvailableVideoChannels() getAvailableVideoChannel() | 无 | 新版接口去掉了通道的概念,只需要关注相机索引以及需要哪些相机数据 |
destroy() | / | 不提供 |
- IVideoChannel 能力迁移
旧版接口 | 新版接口 | 说明 |
---|---|---|
getVideoChannelType() getVideoChannelStatus() getStreamSource() startChannel() closeChannel() addVideoChannelStateChangeListener() removeVideoChannelStateChangeListener() clearAllVideoChannelStateChangeListeners() | / | 新版接口去掉了通道的概念,只需要关注相机索引以及需要哪些相机数据 |
getVideoStreamFormat() | addReceiveStreamListener() | 不提供直接返回流格式的函数,有可能不准确。通过回调监听,能返回每一帧的流和该帧的格式 |
addStreamDataListener() | addReceiveStreamListener() | / |
removeStreamDataListener() | removeReceiveStreamListener() | / |
- IVideoDecoder 能力迁移
旧版接口 | 新版接口 | 说明 |
---|---|---|
destroy() onPause() onResume() setMediaFile() getMediaFile() queueInFrame() | / | 不提供 |
getVideoChannelType() setVideoChannelType() | / | 新版接口去掉了通道的概念,只需要关注相机索引以及需要哪些相机数据 |
getDecoderOutputMode() getDecoderStatus() addDecoderStateChangeListener() removeDecoderStateChangeListener() clearAllDecoderStateChangeListeners() | / | 开发者不再需要关注解码方式、输出方式和解码器状态 |
getVideoWidth() | addReceiveStreamListener() 或者 addFrameListener() | 不提供直接获取宽高的接口,有可能不准确。通过回调监听,获得宽高以及更多详细信息 |
getVideoHeight() | addReceiveStreamListener() 或者 addFrameListener() | 不提供直接获取宽高的接口,有可能不准确。通过回调监听,获得宽高以及更多详细信息 |
addYuvDataListener() | addFrameListener() | / |
removeYuvDataListener() | removeFrameListener() | / |
clearAllYuvDataListeners() | / | 不提供 |
由于通道概念的取消,直播管理类 ILiveStreamManager 和 多媒体文件管理类 IMediaManager 也存在接口需要迁移。
- ILiveStreamManager 能力迁移
更多内容可以点击阅读直播教程
旧版接口 | 新版接口 | 说明 |
---|---|---|
setVideoChannelType() | setCameraIndex() | / |
getVideoChannelType() | getCameraIndex() | / |
- IMediaManager 能力迁移
更多内容可以点击阅读多媒体教程
旧版接口 | 新版接口 | 说明 |
---|---|---|
playVideo() | playVideoToSurface() | 因为 IVideoChannel() 和 IVideoDecoder() 都废弃了,新的接口可以直接传递 surface 进行显示,而不需要管理通道和解码器 |
接口调用流程
下图为完整的接口展示以及接口调用流程示例。详细的使用方法请查看Mobile SDK API文档的码流管理类 ICameraStreamManager。
新版图传功能具备码流画面显示、获取原始码流、获取帧数据的能力。
码流画面显示
码流画面显示可以指定相机索引,指定显示画面的 surface,设置 surface 宽度、高度、缩放类型。通过 KeyCameraVideoStreamSource 可以进行相机镜头的切换。获取原始码流
通过调用码流数据的监听,可以接收指定相机索引的原始码流。获取码流数据,获取码流的偏移量、长度、数据信息。开发者可以使用码流数据自行解码显示或者实现第三方直播等功能。获取帧数据
通过调用帧数据的监听,可以接收指定相机索引、指定帧格式的帧数据。获取帧数据,获取帧的偏移量、长度、宽高等信息。开发者可以使用帧数据实现 AI 识别等算法处理。
说明: setKeepAliveDecoding() 接口用于让解码器是否在后台持续解码。若设为 false,解码将暂停降低性能与电量的消耗,但会增加开启推送码流时的延迟。
