新版图传

2024-05-17
2.5 分
2 用户已评分

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 能力迁移

更多内容可以点击阅读直播教程open in new window

旧版接口新版接口说明
setVideoChannelType()setCameraIndex()/
getVideoChannelType()getCameraIndex()/
  • IMediaManager 能力迁移

更多内容可以点击阅读多媒体教程open in new window

旧版接口新版接口说明
playVideo()playVideoToSurface()因为 IVideoChannel() 和 IVideoDecoder() 都废弃了,新的接口可以直接传递 surface 进行显示,而不需要管理通道和解码器

接口调用流程

下图为完整的接口展示以及接口调用流程示例。详细的使用方法请查看Mobile SDK API文档的码流管理类 ICameraStreamManageropen in new window

新版图传功能具备码流画面显示、获取原始码流、获取帧数据的能力。

  • 码流画面显示
    码流画面显示可以指定相机索引,指定显示画面的 surface,设置 surface 宽度、高度、缩放类型。通过 KeyCameraVideoStreamSource 可以进行相机镜头的切换。

  • 获取原始码流
    通过调用码流数据的监听,可以接收指定相机索引的原始码流。获取码流数据,获取码流的偏移量、长度、数据信息。开发者可以使用码流数据自行解码显示或者实现第三方直播等功能。

  • 获取帧数据
    通过调用帧数据的监听,可以接收指定相机索引、指定帧格式的帧数据。获取帧数据,获取帧的偏移量、长度、宽高等信息。开发者可以使用帧数据实现 AI 识别等算法处理。

说明: setKeepAliveDecoding() 接口用于让解码器是否在后台持续解码。若设为 false,解码将暂停降低性能与电量的消耗,但会增加开启推送码流时的延迟。

Sample 获取

图传 Sampleopen in new window

若您对文档有意见或疑惑,点击可快速反馈,我们会与您联系。