Pano开发者中心
  • 开发者中心
  • 下载中心

›高级功能(RTC)

新手入门

  • 简介
  • 名词解释
  • 创建第一个应用

规则说明

  • Channel ID命名规则
  • 权限控制
  • 计费说明
  • 频道最大时长说明
  • 每月一万分钟免费说明
  • 布局参数说明
  • 水印

场景方案

    教育行业

    • 1vN互动小班课
    • 互动直播大班课

快速接入

  • 简介
  • 音视频

    • Windows (C++)
    • iOS (Objective-C)
    • Android (Java)
    • Web
    • Electron
    • Flutter
    • React Native
    • Unity

    白板

    • Windows (C++)
    • iOS (Objective-C)
    • Android (Java)
    • Web
    • Electron
    • Flutter
    • React Native

高级功能(RTC)

  • 简介
  • 屏幕共享
  • 分组讨论
  • 状态回调
  • 设备诊断
  • 音量指示
  • 控制声音
  • 声卡操作
  • 混音/伴音
  • 混响
  • 耳返
  • 变声
  • 美颜
  • 音视频数据回调
  • 音视频外部采集
  • 收发多路视频
  • 多窗口渲染
  • 性能检测
  • 截图
  • 反馈

高级功能(RTS)

  • 简介
  • 白板

    • Windows (C++)
    • iOS (Objective-C)
    • Android (Java)
    • Web
    • Flutter

    标注

    • 视频标注
    • 共享标注
    • 外部标注

    消息

    • 消息服务

    远程控制

    • 远程控制

操作实践

  • 切换大小屏

RESTful API

  • 基本格式
  • 生成Token
  • 频道管理
  • 云端录制
  • CDN推流
  • 文档转码
  • 消息服务
  • 服务端消息通知

SDK API

  • SDK接口说明
  • Windows (C++)
  • macOS/iOS (Objective-C)
  • Android (Java)
  • Web SDK (IE专用版)
  • Web SDK

    • 浏览器兼容性
    • RtcEngine
    • GroupManager
    • RtcWhiteboard
    • RtsService
    • RtcMessage
    • Annotation
    • Constants

更新记录

  • 简介
  • Windows
  • macOS
  • iOS
  • Android
  • Electron
  • Flutter
  • React Native
  • Unity
  • Web(全功能SDK)
  • Web(RTS SDK)
  • Web(IE专用音视频SDK)

帮助

  • FAQ
  • 更多帮助

多窗口渲染

简介

某些应用场景下,开发者需要将同一个视频画面渲染到不同的窗口中。Pano SDK 支持多窗口渲染。

各端 SDK 相关接口,请查看下列介绍:

  • Windows (C++)
  • macOS/iOS (Objective-C)
  • Web

Windows (C++)

SDK处理渲染

如果需要SDK处理多窗口渲染,首先,在调用以下接口时,将 window 参数传空(nullptr):

  • 发送本地视频:RtcEngine 的 startVideo(void *window, const VideoConfig &config)
  • 订阅其他用户的视频:RtcEngine 的 subscribeVideo(uint64_t userId, void *window, const VideoConfig &config)
  • (多路视频场景)发送本地视频:VideoStreamManager 的 startVideo(int streamId, void *window, const VideoConfig &config)
  • (多路视频场景)订阅其他用户的视频:VideoStreamManager 的 subscribeVideo(uint64_t userId, int streamId, void *window, const VideoConfig &config)

然后,通过 RtcEngine 对象的 getVideoRenderManager 方法获取视频渲染管理器(VideoRenderManager)。

  • 通过其 bindRender(uint64_t userId, int streamId, void *window, const RenderConfig &config) 方法为指定的视频流添加渲染窗口
  • 通过其 unbindRender(uint64_t userId, int streamId, void *window) 方法移除指定视频流的渲染窗口
  • 通过其 updateRenderConfig(uint64_t userId, int streamId, void *window, const RenderConfig &config) 方法更改视频渲染设置

注意:默认的 streamId 为 0。所以,如果开发者没有多路视频场景,调用 bindRender、unbindRender、updateRenderConfig 方法时,请将 streamId 传入 0。

应用层自行渲染

如果需要应用层自行处理多窗口渲染,请通过以下接口设置视频数据接收槽(RtcRenderSink),通过其 onRenderData (void *buffer, int length, MediaFormat &fmt) 回调接收视频渲染数据(YUV I420),请注意根据回调的 VideoFormat 进行处理:

  • 发送本地视频:RtcEngine 的 startVideo(RtcRenderSink *sink, VideoProfileType profileType)
  • 订阅其他用户的视频:RtcEngine 的 subscribeVideo(uint64_t userId, RtcRenderSink *sink, VideoProfileType profileType)
  • (多路视频场景)发送本地视频:VideoStreamManager 的 startVideo(int streamId, RtcRenderSink *sink, VideoProfileType profileType)
  • (多路视频场景)订阅其他用户的视频:VideoStreamManager 的 subscribeVideo(uint64_t userId, int streamId, RtcRenderSink *sink, VideoProfileType profileType)

macOS/iOS (Objective-C)

SDK处理渲染

如果需要SDK处理多窗口渲染,首先,在调用以下接口时,将 view 参数传空(nil):

  • 发送本地视频:PanoRtcEngineKit 的 - startVideoWithView:config:
  • 订阅其他用户的视频:PanoRtcEngineKit 的 - subscribeVideo:withView:config:
  • (多路视频场景)发送本地视频:PanoRtcVideoStreamManager 的 - startVideo:view:config:
  • (多路视频场景)订阅其他用户的视频:PanoRtcVideoStreamManager 的 - subscribeVideo:stream:view:config:

然后,通过 PanoRtcEngineKit 对象的 videoRenderManager 属性获取视频渲染管理器(PanoRtcVideoRenderManager)。

  • 通过其 - bindRender:streamId:view:config: 方法为指定的视频流添加渲染窗口
  • 通过其 - unbindRender:streamId:view: 方法移除指定视频流的渲染窗口
  • 通过其 - updateRenderConfig:streamId:view:config: 方法更改视频渲染设置

注意:默认的 streamId 为 0。所以,如果开发者没有多路视频场景,调用 bindRender、unbindRender、updateRenderConfig 方法时,请将 streamId 传入 0。

应用层自行渲染

如果需要应用层自行处理多窗口渲染,请通过以下接口设置PanoRtcRenderDelegate,通过其 - onRenderVideoData:withLength:format:timestamp: 回调接收视频渲染数据(YUV I420),请注意根据回调的 PanoRtcVideoFormat 进行处理:

  • 发送本地视频:PanoRtcEngineKit 的 - startVideoWithDelegate:profile:
  • 订阅其他用户的视频:PanoRtcEngineKit 的 - subscribeVideo:withDelegate:profile:
  • (多路视频场景)发送本地视频:PanoRtcVideoStreamManager 的 - startVideo:delegate:profile:
  • (多路视频场景)订阅其他用户的视频:PanoRtcVideoStreamManager 的 - subscribeVideo:stream:delegate:profile:

Web

开发者可以自定义多个 <video> 元素,当收到以下回调返回的 videoTag 时:

  • 发送本地视频成功的通知:getLocalVideo
  • 收到其他用户视频的通知:userVideoReceived

将回调的 videoTag 的 srcObject 属性传递给自定义 <video> 元素的 srcObject 属性,例如:

myVideo1.srcObject = videoTag.srcObject
myVideo2.srcObject = videoTag.srcObject

Last updated on 2022/2/11
← 收发多路视频性能检测 →
  • 简介
  • Windows (C++)
    • SDK处理渲染
    • 应用层自行渲染
  • macOS/iOS (Objective-C)
    • SDK处理渲染
    • 应用层自行渲染
  • Web
浙ICP备20002645号 ©2019-2022 Pano拍乐云