tencent cloud

フィードバック

StartPublishCdnStream

最終更新日:2022-09-20 10:21:14

1. API Description

Domain name for API request: trtc.tencentcloudapi.com.

This API is used to mix streams and relay the mixed stream to CDNs. You can use this API to do the following:

  1. Publish (also known as “relay”) the audio/video stream of one anchor to CDNs. For details, see example 2 (starting a task to relay the audio and video of a stream) and example 3 (starting a task to relay only the audio of a stream).
  2. Mix the streams of multiple anchors in a room or in different rooms and publish the mixed stream to CDNs. You can use AudioParams.SubscribeAudioList to specify the users whose audios are mixed, and use VideoParams.LayoutParams to specify the layout of the anchors’ videos. For details, see example 1 (mixing streams and publishing the mixed stream to a CDN).
  3. Mix multiple streams in a room according to a template and publish the mixed stream to CDNs. The TRTC backend will detect the change of anchors in the room and adjust the video layout automatically according to the stream mixing template. The following template types are supported:
    • Floating: The entire screen is covered by the video image of the first user who enters the room, and the images of other users are displayed as small images in rows in the bottom-left corner in room entry sequence. The screen allows up to 4 rows of 4 small images, which float over the large main image. Up to 1 large image and 15 small images can be displayed.
    • Grid: The images of all users split the screen evenly. The more the users, the smaller the image dimensions. Up to 16 images are supported.
    • Screen sharing: This is designed for video conferencing and online education. The shared screen (or camera image of the anchor) is always displayed as the large main image, which occupies the left half of the screen, and the images of other users occupy the right half in up to two columns of up to eight small images each. Up to 1 large image and 15 small images can be displayed. If the upstream aspect ratio does not match the output, the large image on the left will be scaled and displayed in whole, while the small images on the right will be cropped.
  4. Publish audio/video streams to up to 10 CDNs at a time. You can use PublishCdnParams.PublishCdnUrl to specify the URLs of the CDNs to publish to. To publish to Tencent Cloud’s CDN, set PublishCdnParams.IsTencentCdn to 1.
  5. Configure a server-side callback to have Tencent Cloud send relay status updates to your server in the form of HTTP/HTTPS POST requests. To use the callback for relay events, please contact Technical Support.
    Notes:
  6. Because On-Cloud MixTranscoding is a paid feature, calling this API will incur MixTranscoding fees. For details, see Billing of MixTranscoding and Relay to CDN.
  7. Relaying to third-party CDNs will incur relaying fees. For details, see Billing of MixTranscoding and Relay to CDN.

Others:

  1. You need to first call StartPublishCdnStream to start a relay task and get the task ID before you can use the UpdatePublishCdnStream API to modify the task and StopPublishCdnStream to stop the task.
  2. To ensure the stability of relaying, you cannot switch between relaying audio only, relaying audio and video, and relaying video only for the same task.
  3. To ensure the stability of relaying, you cannot change the video codec, audio codec, audio sample rate, audio bitrate, or sound channels using the UpdatePublishCdnStream API.
  4. When you relay a single stream, specify both AudioParams and VideoParams to publish both audio and video, and specify only AudioParams to publish audio only. You cannot switch between the two modes during the relaying process. For VideoParams, set Width, Height, Fps, Bitrate, and Gop according to the actual settings used for publishing.
  5. The SequenceNumber parameter is required when you call UpdatePublishCdnStream to change the relaying parameters. It ensures that multiple requests for the same relaying task are in the correct order. The value of SequenceNumber increases each time a new request is made for the same task. If InternalError is returned, try again using the same SequenceNumber. You don’t need to handle the FailedOperation.OutdateRequest error.
  6. You can create a relay task before anchors enter a room, in which case you need to manually call StopPublishCdnStream to stop the task. If you don’t, after all the users whose streams are mixed leave the room, the TRTC backend will wait for the timeout period (AgentParams.MaxIdleTime) to elapse before stopping the relaying task.

A maximum of 20 requests can be initiated per second for this API.

We recommend you to use API Explorer
Try it
API Explorer provides a range of capabilities, including online call, signature authentication, SDK code generation, and API quick search. It enables you to view the request, response, and auto-generated examples.

2. Input Parameters

The following request parameter list only provides API request parameters and some common parameters. For the complete common parameter list, see Common Request Parameters.

Parameter Name Required Type Description
Action Yes String Common Params. The value used for this API: StartPublishCdnStream.
Version Yes String Common Params. The value used for this API: 2019-07-22.
Region Yes String Common Params. For more information, please see the list of regions supported by the product. This API only supports: ap-singapore.
SdkAppId Yes Integer The SDKAppID of the TRTC room whose streams are relayed.
RoomId Yes String The ID of the room whose streams are relayed (the main room).
RoomIdType Yes Integer The type of the RoomId parameter, which must be the same as the ID type of the room whose streams are relayed. 0: integer; 1: string.
AgentParams Yes AgentParams The information of the relaying robot in the room.
WithTranscoding Yes Integer Whether to transcode the streams. 0: No; 1: Yes.
AudioParams No McuAudioParams The audio encoding parameters for relaying.
VideoParams No McuVideoParams The video encoding parameters for relaying. If you do not pass this parameter, only audio will be relayed.
SingleSubscribeParams No SingleSubscribeParams The information of a single stream relayed. When you relay a single stream, set WithTranscoding to 0.
PublishCdnParams.N No Array of McuPublishCdnParam The CDN information.
SeiParams No McuSeiParams The stream mixing SEI parameters.

3. Output Parameters

Parameter Name Type Description
TaskId String The task ID, which is generated by the Tencent Cloud server. You need to pass in the task ID when making a request to update or stop a relaying task.
RequestId String The unique request ID, which is returned for each request. RequestId is required for locating a problem.

4. Example

Example1 Starting a task to mix streams and relay the mixed stream

Input Example

POST / HTTP/1.1
Host: trtc.tencentcloudapi.com
Content-Type: application/json
X-TC-Action: StartPublishCdnStream
<Common request parameters>

{
    "AudioParams": {
        "SubscribeAudioList": [
            {
                "UserInfo": {
                    "RoomIdType": 0,
                    "RoomId": "195044",
                    "UserId": "Trtc_User_0"
                }
            },
            {
                "UserInfo": {
                    "RoomIdType": 0,
                    "RoomId": "195044",
                    "UserId": "Trtc_User_1"
                }
            },
            {
                "UserInfo": {
                    "RoomIdType": 0,
                    "RoomId": "195044",
                    "UserId": "Trtc_User_2"
                }
            },
            {
                "UserInfo": {
                    "RoomIdType": 0,
                    "RoomId": "195044",
                    "UserId": "Trtc_User_3"
                }
            }
        ],
        "AudioEncode": {
            "SampleRate": 48000,
            "Codec": 0,
            "BitRate": 64,
            "Channel": 2
        }
    },
    "AgentParams": {
        "MaxIdleTime": 30,
        "UserSig": "eJw1zV8LgjAUBfCvInsO2dStGfQSQUb2pFJvsnLJJZW1LekPffdc6X08v8O5b5Snmd9LjRYeCnyMZt4vgUp2Fi7wB6vtuVRC207q0kpjSzIVTXUVSkE11EiEMeE8ZGw0*VCg5SCcDeRuBAutiwkLeRRwOo*nMajduy5O*gIaus9qel9vX*lJbHJmyDMxuKFFI27tsT*I1S6pl*jzBb*IOTE_",
        "UserId": "trtc_partner_test_1"
    },
    "VideoParams": {
        "VideoEncode": {
            "Height": 720,
            "Width": 1280,
            "Fps": 15,
            "BitRate": 512,
            "Gop": 2
        },
        "LayoutParams": {
            "PureAudioHoldPlaceMode": 0,
            "MixLayoutMode": 4,
            "MixLayoutList": [
                {
                    "LocationX": 0,
                    "LocationY": 0,
                    "UserMediaStream": {
                        "StreamType": 0,
                        "UserInfo": {
                            "RoomIdType": 0,
                            "RoomId": "195044",
                            "UserId": "Trtc_User_0"
                        }
                    },
                    "ZOrder": 0,
                    "ImageHeight": 360,
                    "ImageWidth": 640,
                    "RenderMode": 0
                },
                {
                    "LocationX": 640,
                    "LocationY": 0,
                    "UserMediaStream": {
                        "StreamType": 0,
                        "UserInfo": {
                            "RoomIdType": 0,
                            "RoomId": "195044",
                            "UserId": "Trtc_User_1"
                        }
                    },
                    "ZOrder": 0,
                    "ImageHeight": 360,
                    "ImageWidth": 640,
                    "RenderMode": 0
                },
                {
                    "LocationX": 0,
                    "LocationY": 360,
                    "UserMediaStream": {
                        "StreamType": 0,
                        "UserInfo": {
                            "RoomIdType": 0,
                            "RoomId": "195044",
                            "UserId": "Trtc_User_2"
                        }
                    },
                    "ZOrder": 0,
                    "ImageHeight": 360,
                    "ImageWidth": 640,
                    "RenderMode": 0
                },
                {
                    "LocationX": 640,
                    "LocationY": 360,
                    "UserMediaStream": {
                        "StreamType": 0,
                        "UserInfo": {
                            "RoomIdType": 0,
                            "RoomId": "195044",
                            "UserId": "Trtc_User_3"
                        }
                    },
                    "ZOrder": 0,
                    "ImageHeight": 360,
                    "ImageWidth": 640,
                    "RenderMode": 0
                }
            ]
        },
        "BackGroundColor": "0xFF0000",
        "WaterMarkList": [
            {
                "WaterMarkType": 0,
                "WaterMarkImage": {
                    "LocationX": 64,
                    "LocationY": 64,
                    "WaterMarkHeight": 64,
                    "WaterMarkWidth": 64,
                    "WaterMarkUrl": "https://xkt-course-1304449343.cos.ap-beijing.myqcloud.com/test/mark/37f9eb62-ca72-430e-bfca-e700b59b20e0.png",
                    "ZOrder": 3
                }
            }
        ]
    },
    "PublishCdnParams": [
        {
            "PublishCdnUrl": "rtmp://3891.livepush.myqcloud.com/live/trtc_publishcdn_test1",
            "IsTencentCdn": 0
        },
        {
            "PublishCdnUrl": "rtmp://3891.livepush.myqcloud.com/live/trtc_publishcdn_test2",
            "IsTencentCdn": 0
        }
    ],
    "RoomIdType": 0,
    "SdkAppId": 1400188366,
    "WithTranscoding": 1,
    "RoomId": "195044"
}

Output Example

{
    "Response": {
        "TaskId": "-m97l2ZU7vxyBSmXYsRx1Xy9Kf4bVVfbbhSKC4K-4pycoZWKv542xbi139uTvGt1zAHoAQ..",
        "RequestId": "b934c535-8d82-4f52-bd52-a1cbb043c4be"
    }
}

Example2 Starting a task to relay the audio and video of a stream

Input Example

POST / HTTP/1.1
Host: trtc.tencentcloudapi.com
Content-Type: application/json
X-TC-Action: StartPublishCdnStream
<Common request parameters>

{
    "AudioParams": {
        "AudioEncode": {
            "SampleRate": 48000,
            "Codec": 0,
            "BitRate": 64,
            "Channel": 2
        }
    },
    "AgentParams": {
        "MaxIdleTime": 30,
        "UserSig": "eJw1zV8LgjAUBfCvInsO2dStGfQSQUb2pFJvsnLJJZW1LekPffdc6X08v8O5b5Snmd9LjRYeCnyMZt4vgUp2Fi7wB6vtuVRC207q0kpjSzIVTXUVSkE11EiEMeE8ZGw0*VCg5SCcDeRuBAutiwkLeRRwOo*nMajduy5O*gIaus9qel9vX*lJbHJmyDMxuKFFI27tsT*I1S6pl*jzBb*IOTE_",
        "UserId": "trtc_partner_test_1"
    },
    "VideoParams": {
        "VideoEncode": {
            "Height": 720,
            "Width": 1280,
            "Fps": 15,
            "BitRate": 512,
            "Gop": 2
        }
    },
    "SingleSubscribeParams": {
        "UserMediaStream": {
            "StreamType": 0,
            "UserInfo": {
                "RoomIdType": 0,
                "RoomId": "195044",
                "UserId": "Trtc_User_0"
            }
        }
    },
    "PublishCdnParams": [
        {
            "PublishCdnUrl": "rtmp://3891.livepush.myqcloud.com/live/trtc_publishcdn_test1",
            "IsTencentCdn": 0
        }
    ],
    "RoomIdType": 0,
    "SdkAppId": 1400188366,
    "WithTranscoding": 0,
    "RoomId": "195044"
}

Output Example

{
    "Response": {
        "TaskId": "-m97l2ZU7tq6nEsHR89259B8aCDblqnbGhWKC4K-4pycoZWpyHnld1jC9aCD+EU7V8WRAQ..",
        "RequestId": "f23d95bf-ddaf-4d0c-86c0-6bf50c74c0a0"
    }
}

Example3 Starting a task to relay only the audio of a stream

Input Example

POST / HTTP/1.1
Host: trtc.tencentcloudapi.com
Content-Type: application/json
X-TC-Action: StartPublishCdnStream
<Common request parameters>

{
    "AudioParams": {
        "AudioEncode": {
            "SampleRate": 48000,
            "Codec": 0,
            "BitRate": 64,
            "Channel": 2
        }
    },
    "AgentParams": {
        "MaxIdleTime": 30,
        "UserSig": "eJw1zV8LgjAUBfCvInsO2dStGfQSQUb2pFJvsnLJJZW1LekPffdc6X08v8O5b5Snmd9LjRYeCnyMZt4vgUp2Fi7wB6vtuVRC207q0kpjSzIVTXUVSkE11EiEMeE8ZGw0*VCg5SCcDeRuBAutiwkLeRRwOo*nMajduy5O*gIaus9qel9vX*lJbHJmyDMxuKFFI27tsT*I1S6pl*jzBb*IOTE_",
        "UserId": "trtc_partner_test_1"
    },
    "SingleSubscribeParams": {
        "UserMediaStream": {
            "StreamType": 0,
            "UserInfo": {
                "RoomIdType": 0,
                "RoomId": "195044",
                "UserId": "Trtc_User_0"
            }
        }
    },
    "PublishCdnParams": [
        {
            "PublishCdnUrl": "rtmp://3891.livepush.myqcloud.com/live/trtc_publishcdn_test1",
            "IsTencentCdn": 0
        }
    ],
    "RoomIdType": 0,
    "SdkAppId": 1400188366,
    "WithTranscoding": 0,
    "RoomId": "195044"
}

Output Example

{
    "Response": {
        "TaskId": "-m97l2ZU7r57nZBesMa84KgzxhH0OBbbCRaKC4K-4pycoZW7yFPtusNuZOen1Ca0qtQQAQ..",
        "RequestId": "ef089f8b-d0d1-4131-894d-4edd68d61605"
    }
}

Example4 Starting a task to relay the audios and videos in a room and pass through the SEI messages. The audios are mixed before relaying.

Input Example

POST / HTTP/1.1
Host: trtc.tencentcloudapi.com
Content-Type: application/json
X-TC-Action: StartPublishCdnStream
<Common request parameters>

{
    "AudioParams": {
        "SubscribeAudioList": [
            {
                "UserInfo": {
                    "RoomIdType": "0",
                    "RoomId": "295066",
                    "UserId": "57906"
                }
            }
        ],
        "AudioEncode": {
            "SampleRate": "48000",
            "Codec": "0",
            "BitRate": "64",
            "Channel": "2"
        }
    },
    "AgentParams": {
        "MaxIdleTime": "10",
        "UserSig": "eJw1zV8LgjAUBfCvInsO2dStGfQSQUb2pFJvsnLJJZW1LekPffdc6X08v8O5b5Snmd9LjRYeCnyMZt4vgUp2Fi7wB6vtuVRC207q0kpjSzIVTXUVSkE11EiEMeE8ZGw0*VCg5SCcDeRuBAutiwkLeRRwOo*nMajduy5O*gIaus9qel9vX*lJbHJmyDMxuKFFI27tsT*I1S6pl*jzBb*IOTE_",
        "UserId": "trtc_partner_test_1"
    },
    "VideoParams": {
        "VideoEncode": {
            "Height": "720",
            "Width": "1280",
            "Fps": "15",
            "BitRate": "512",
            "Gop": "2"
        },
        "LayoutParams": {
            "MixLayoutMode": "4",
            "MixLayoutList": [
                {
                    "LocationX": "0",
                    "LocationY": "0",
                    "UserMediaStream": {
                        "StreamType": "0",
                        "UserInfo": {
                            "RoomIdType": "0",
                            "RoomId": "295066",
                            "UserId": "57906"
                        }
                    },
                    "ZOrder": "0",
                    "ImageHeight": "0",
                    "ImageWidth": "0",
                    "RenderMode": "0"
                }
            ]
        }
    },
    "PublishCdnParams": [
        {
            "PublishCdnUrl": "rtmp://3891.livepush.myqcloud.com/live/1400188366_owen_main_1"
        }
    ],
    "RoomIdType": "0",
    "SdkAppId": "1400188366",
    "WithTranscoding": "1",
    "RoomId": "295066"
}

Output Example

{
    "Response": {
        "TaskId": "-m9liFNU7m+nWPL+icY53kcSoQ+-czzbEhD2AYK-4pycoZXmj3cMGzreW5xwhHTpcPRNAQ..",
        "RequestId": "6774662b-64a0-4aec-8389-0513873585b4"
    }
}

Example5 Starting a task to mix the audios of all users in a room and the video of one user and relay the result

Input Example

POST / HTTP/1.1
Host: trtc.tencentcloudapi.com
Content-Type: application/json
X-TC-Action: StartPublishCdnStream
<Common request parameters>

{
    "AudioParams": {
        "AudioEncode": {
            "SampleRate": "48000",
            "Codec": "0",
            "BitRate": "64",
            "Channel": "2"
        }
    },
    "AgentParams": {
        "MaxIdleTime": "10",
        "UserSig": "eJw1zV8LgjAUBfCvInsO2dStGfQSQUb2pFJvsnLJJZW1LekPffdc6X08v8O5b5Snmd9LjRYeCnyMZt4vgUp2Fi7wB6vtuVRC207q0kpjSzIVTXUVSkE11EiEMeE8ZGw0*VCg5SCcDeRuBAutiwkLeRRwOo*nMajduy5O*gIaus9qel9vX*lJbHJmyDMxuKFFI27tsT*I1S6pl*jzBb*IOTE_",
        "UserId": "trtc_partner_test_1"
    },
    "VideoParams": {
        "VideoEncode": {
            "Height": "720",
            "Width": "1280",
            "Fps": "15",
            "BitRate": "512",
            "Gop": "2"
        },
        "LayoutParams": {
            "MixLayoutMode": "4",
            "MixLayoutList": [
                {
                    "LocationX": "0",
                    "LocationY": "0",
                    "UserMediaStream": {
                        "StreamType": "0",
                        "UserInfo": {
                            "RoomIdType": "0",
                            "RoomId": "295066",
                            "UserId": "57906"
                        }
                    },
                    "ZOrder": "0",
                    "ImageHeight": "640",
                    "ImageWidth": "1280",
                    "RenderMode": "0"
                }
            ]
        }
    },
    "PublishCdnParams": [
        {
            "PublishCdnUrl": "rtmp://3891.livepush.myqcloud.com/live/1400188366_owen_main_1"
        }
    ],
    "RoomIdType": "0",
    "SdkAppId": "1400188366",
    "WithTranscoding": "1",
    "RoomId": "295066"
}

Output Example

{
    "Response": {
        "TaskId": "-m9liFNU7qjpXnrk6cloz8KXukyLKjzbLhP2AYK-4pycoZVbtyt6U21l9vJOqqeIfwR5AQ..",
        "RequestId": "97dae8e4-4778-45c8-9abe-cdce33c1a450"
    }
}

5. Developer Resources

SDK

TencentCloud API 3.0 integrates SDKs that support various programming languages to make it easier for you to call APIs.

Command Line Interface

6. Error Code

The following only lists the error codes related to the API business logic. For other error codes, see Common Error Codes.

Error Code Description
AuthFailure CAM signature/authentication error.
AuthFailure.UnRealNameAuthenticated Identity verification has not been completed, so this operation is not allowed.
AuthFailure.UnauthorizedOperation CAM authentication failed.
AuthFailure.UnsupportedOperation Unsupported operation.
FailedOperation Operation failed.
FailedOperation.CRUnsupportMethod Unsupported on-cloud recording method.
FailedOperation.RestrictedConcurrency Maximum number of concurrent on-cloud recording tasks reached. Contact us to raise the limit.
InternalError Internal error.
InternalError.CRInternalError On-cloud recording internal error.
InvalidParameter Parameter error.
MissingParameter Missing parameter.
お問い合わせ

カスタマーサービスをご提供できるため、ぜひお気軽にお問い合わせくださいませ。

テクニカルサポート

さらにサポートが必要な場合は、サポートチケットを送信して弊社サポートチームにお問い合わせください。24時間365日のサポートをご提供します。

電話サポート(24 時間365日対応)