旁路直播

功能介绍

旁路直播指将正在进行音视频互动的音视频流推流给第三方CDN(Content Delivery Network),支持直接推送源流和推送混合流,用户通过 App 播放器或者 Web 浏览器的方式可观看视频直播。

  • 推送源流:将音视频源流直接推送给CDN。
  • 推送混合流:同房间或不同房间的多个主播通过 RTC 将媒体数据推送到RTN实时通信网络,后台经过转码和布局设置将多个主播流混合成单个流(即多个视频画面混合成一个视频画面,或是多路音频合成一路音频),并设置这个流的音视频属性。

实现方法

请确认已实现基本的通话或者直播功能,具体操作参见 实现视频互动

推送混合流

  1. 在推流前,调用 setLiveTranscodingTask 开混流并配置混流参数。

    • taskId:任务ID。
    • LiveTranscoding:混流配置,可配置 混流布局、水印、背景等。
  2. 调用 addPublishTranscodingStreamUrl 推送混合流至指定 CDN 地址。

    如需推送多条流,需多次调用该API,最多推送5条流,推流地址可在推流后动态增删。

  3. (可选)调用 setLiveTranscodingTask 更新混流参数 (LiveTranscoding)。

  4. (可选)调用 removePublishTranscodingStreamUrl 删除指定的一路音视频流。

  5. 调用 removeLiveTranscodingTask 并传入 taskId 停掉后台的转码任务。

    推流状态改变时,SDK 会触发 onPublishStreamToCDNStatus 回调向主播报告当前推流状态,状态码:

    • THUNDER_PUBLISH_CDN_ERR_SUCCESS = 0:推流成功
    • THUNDER_PUBLISH_CDN_ERR_TOCDN_FAILED = 1:推流到外部服务器(CDN)失败。请检查url是否正确 ,或检查url中token是否有效(通常cdn推流需要带token,若不存在token可忽略)。
    • THUNDER_PUBLISH_CDN_ERR_THUNDERSERVER_FAILED = 2:推流到thunder内部服务器失败。请检查主播上行网络或联系技术支持。

    请确保收到该回调后再调用 API 进行下一步操作。如果增加或删除一个推流地址失败,请通过错误码排查问题。

示例代码

int mixMode = Utils.getPushMixMode();
    int height = 0;
    int width = 0;

    if (mixMode == ThunderRtcConstant.LiveTranscodingMode.TRANSCODING_MODE_640X480) {
      height = 480;
      width = 640;
    } else if (mixMode == ThunderRtcConstant.LiveTranscodingMode.TRANSCODING_MODE_960X544) {
      height = 544;
      width = 960;
    } else if (mixMode == ThunderRtcConstant.LiveTranscodingMode.TRANSCODING_MODE_1280X720) 		{
      height = 720;
      width = 1280;
    } else if (mixMode == ThunderRtcConstant.LiveTranscodingMode.TRANSCODING_MODE_1920X1080 		{
      height = 1080;
      width = 1920;
    }

    LiveTranscoding transCoding = new LiveTranscoding();
    LiveTranscoding.TranscodingUser localUser = new LiveTranscoding.TranscodingUser();
    if (!TextUtils.isEmpty(Constant.mLocalRoomId) && !TextUtils.isEmpty(Constant.mLocalUid))		{
      localUser.roomId = Constant.mLocalRoomId;
      localUser.uid = Constant.mLocalUid;
      localUser.layoutW = Constant.isMixSubscribeRemote ? width / 2 : width;
      localUser.layoutH = height;
      localUser.layoutX = 0;
      localUser.layoutY = 0;
      localUser.zOrder = 1;
      localUser.bCrop = true;
      transCoding.addUser(localUser);
    }

    if (!TextUtils.isEmpty(Constant.mRemoteRoomId) && 				    !TextUtils.isEmpty(Constant.mRemoteUid)
        && Constant.isMixSubscribeRemote) {
      LiveTranscoding.TranscodingUser matchUser = new LiveTranscoding.TranscodingUser();
      matchUser.roomId = Constant.mRemoteRoomId;
      matchUser.uid = Constant.mRemoteUid;
      matchUser.layoutW = width / 2;
      matchUser.layoutH = height;
      matchUser.layoutX = localUser.layoutW;
      matchUser.layoutY = 0;
      matchUser.zOrder = 0;
      matchUser.bStandard = true;
      matchUser.bCrop = true;
      transCoding.addUser(matchUser);
    }
    if (transCoding.getUserCount() <= 0) {
      return;
    }
    transCoding.setTransCodingMode(mixMode);
    RoomManager.getInstance(context).setLiveTranscodingTask(Constant.TASK_ID, transCoding);

推送混合流

  1. 加入房间。
  2. 开启预览并开播。
  3. 需要推流的时候,调用 addPublishOriginStreamUrl
  4. 需要停止推流的时候,调用 removePublishOriginStreamUrl

注意事项

  • 设置的混画 LiveTranscoding 最多是 9 个
  • 使用混画和转码需要额外的计费,请参考计费方式。
  • 退出房间之后,会清空配置。

文档是否有解决您的问题?

有帮助 没帮助
提交成功,非常感谢您的反馈!

反馈

TOP