TRTCPublishBigStreamToCdn
またはTRTCPublishSubStreamToCdn
を指定します。前者は現在のユーザーのメインチャネル画面(通常はカメラ)の公開、後者は現在のユーザーのサブチャネル画面(通常は画面共有)の公開を指します。rtmp://
をURLプレフィックスとして使用します)。指定したurlがTencent CloudのライブストリーミングCDNのプッシュアドレスである場合は、isInternalLineにtrueを設定する必要があります。そうでない場合は、falseを設定します。TRTCStreamEncoderParam
パラメータとTRTCStreamMixingConfig
パラメータを指定しないでください。```// 現在のユーザーのオーディオビデオストリームをライブストリーミングCDNに公開しますTRTCCloudDef.TRTCPublishTarget target = new TRTCCloudDef.TRTCPublishTarget();target.mode = TRTC_PublishBigStream_ToCdn;TRTCCloudDef.TRTCPublishCdnUrl cdnUrl= new TRTCCloudDef.TRTCPublishCdnUrl();cdnUrl.rtmpUrl = "rtmp://tencent/live/bestnews";cdnUrl.isInternalLine = true;target.cdnUrlList.add(cdnUrl);mTRTCCloud.startPublishMediaStream(target, null, null);```
```// 現在のユーザーのオーディオビデオストリームをライブストリーミングCDNに公開しますTRTCPublishTarget* target = [[TRTCPublishTarget alloc] init];target.mode = TRTCPublishBigStreamToCdn;TRTCPublishCdnUrl* cdnUrl = [[TRTCPublishCdnUrl alloc] init];cdnUrl.rtmpUrl = @"rtmp://tencent/live/bestnews";cdnUrl.isInternalLine = YES;NSMutableArray* cdnUrlList = [NSMutableArray new];[cdnUrlList addObject:cdnUrl];target.cdnUrlList = cdnUrlList;[_trtcCloud startPublishMediaStream:target encoderParam:nil mixingConfig:nil];```
```// 現在のユーザーのオーディオビデオストリームをライブストリーミングCDNに公開しますTRTCPublishTarget target;target.mode = TRTCPublishMode::TRTCPublishBigStreamToCdn;TRTCPublishCdnUrl* cdn_url_list = new TRTCPublishCdnUrl[1];cdn_url_list[0].rtmpUrl = "rtmp://tencent/live/bestnews";cdn_url_list[0].isInternalLine = true;target.cdnUrlList = cdn_url_list;target.cdnUrlListSize = 1;trtc->startPublishMediaStream(&target, nullptr, nullptr);delete[] cdn_url_list;```
TRTCStreamEncoderParam
パラメータとTRTCStreamMixingConfig
パラメータを指定します。TRTCStreamMixingConfig
)によって合成を実行し、最後に指定したパラメータ(TRTCStreamEncoderParam
)によって再エンコードする必要があるため、このモードでの転送/プッシュサービスはトランスコーディング料金が請求されます。TRTCPublishMixStreamToCdn
を指定します。
2.TRTCPublishTargetオブジェクトのcdnUrlListパラメータに1つまたは複数のCDNプッシュアドレスを指定します(標準CDNプッシュアドレスは通常、rtmp://
をURLプレフィックスとして使用します)。指定したurlがTencent CloudのライブストリーミングCDNのプッシュアドレスである場合は、isInternalLineにtrueを設定してください。そうでない場合は、falseを設定します。
3. パラメータTRTCStreamEncoderParam
を使用して、トランスコーディングされたオーディオビデオストリームのコーデックパラメータを設定します。
ビデオコーデックパラメータ:合成後の画面の解像度、フレームレート、ビットレート、エンコードのGOPを指定してください。そのうち、GOPに3s、FPSに15を設定することをお勧めします。ビットレートと解像度は対応関係があります。下表によく使用される解像度とそれに対応する推奨ビットレートを示します。
オーディオコーデックパラメータ:合成後のオーディオのコーデックフォーマット、コーデックビットレート、サンプリングレートとサウンドチャンネル数を指定してください。このステップでは、startLocalAudioを呼び出すときに2番目のパラメータAudioQualityに指定された音質タイプに応じて、パラメータを指定してください。videoEncodedWidth | videoEncodedHeight | videoEncodedFPS | videoEncodedGOP | videoEncodedKbps |
640 | 360 | 15 | 3 | 800kbps |
960 | 540 | 15 | 3 | 1200kbps |
1280 | 720 | 15 | 3 | 1500kbps |
1920 | 1080 | 15 | 3 | 2500kbps |
TRTCAudioQuality | audioEncodedSampleRate | audioEncodedChannelNum | audioEncodedKbps | audioEncodedCodecType |
TRTCAudioQualitySpeech | 48000 | 1 | 50 | 0 |
TRTCAudioQualityDefault | 48000 | 1 | 50 | 0 |
TRTCAudioQualityMusic | 48000 | 2 | 60 | 2 |
TRTCStreamMixingConfig
を使用して、オーディオのミクスストリーミングパラメータと画面レイアウトモードを設定します。
オーディオのミクスストリーミングパラメータ(audioMixUserList):デフォルトでは、空白のままでよいです。これは、ルーム内のすべてのオーディオが合成されることを意味します。ルーム内の一部のユーザーの音声を合成する場合にのみ、このパラメーターを指定してください。
画面レイアウトパラメータ(videoLayoutList):画面のレイアウトは配列によって定義されます。配列における各TRTCVideoLayoutオブジェクトは、1つのエリアの位置、サイズ、背景色などを表します。TRTCVideoLayoutのfixedVideoUserフィールドを指定した場合、このlayoutオブジェクトで定義されたエリアに、常にあるユーザーの画面が表示されます。fixedVideoUserにnullを指定した場合、このエリアに画面が表示されるが、画面に表示されたユーザーは固定されておらず、TRTCミクスストリーミングサーバがルールに従って決めます。例1:4名のユーザーの画面が1つの画面に合成して表示されています。1枚の画像を背景として使用していますlayout1:ユーザーjerryのカメラ画面のサイズと位置を定義します。画面サイズは640x480です。画面は中央上部に配置されます。、layout2、layout3、layout4:具体的なユーザーIDが指定されていないため、TRTCは、特定のルールに従ってルームにおける3つのチャネルのユーザーの画面を選択し、これらの3つの位置に配置します。例2:4名のユーザーのカメラ画面と1つのチャネルの画面共有の画面が1つの画面に合成して表示されていますlayout1: ユーザーjerryが共有する画面のサイズと位置を定義します。画面サイズは1280x720で、埋め込みモードは黒枠が表示されることがあるFitモードで、背景の塗りつぶしは黒いです。画面は左側に配置されます。layout2: ユーザーjerryのカメラ画面のサイズと位置を定義します。画面サイズは300x200で、埋め込みモードはFillモードです。画面は右上に配置されます。、layout3、layout4、layout5:具体的なユーザーIDが指定されていないため、TRTCは、特定のルールに従ってルームにおける3つのチャネルのユーザーの画面を選択し、これらの3つの位置に配置します。
```// 公開モードをTRTC_PublishMixedStream_ToCdnに指定しますTRTCCloudDef.TRTCPublishTarget target = new TRTCCloudDef.TRTCPublishTarget();target.mode = TRTC_PublishMixedStream_ToCdn;// 公開するCDNのプッシュアドレスを指定しますTRTCCloudDef.TRTCPublishCdnUrl cdnUrl= new TRTCCloudDef.TRTCPublishCdnUrl();cdnUrl.rtmpUrl = "rtmp://tencent/live/bestnews";cdnUrl.isInternalLine = true;target.cdnUrlList.add(cdnUrl);// 合成後のオーディオビデオストリームの二次コーデックパラメータを設定しますTRTCCloudDef.TRTCStreamEncoderParam encoderParam= new TRTCCloudDef.TRTCStreamEncoderParam();encoderParam.videoEncodedWidth = 1280;encoderParam.videoEncodedHeight = 720;encoderParam.videoEncodedFPS = 15;encoderParam.videoEncodedGOP = 3;encoderParam.videoEncodedKbps = 1000;encoderParam.audioEncodedSampleRate = 48000;encoderParam.audioEncodedChannelNum = 1;encoderParam.audioEncodedKbps = 50;encoderParam.audioEncodedCodecType = 0;// 画面のレイアウトパラメータを設定しますTRTCCloudDef.TRTCStreamMixingConfig mixingConfig =new TRTCCloudDef.TRTCStreamMixingConfig();TRTCCloudDef.TRTCVideoLayout layout1 = new TRTCCloudDef.TRTCVideoLayout();layout1.zOrder = 0;layout1.x = 0;layout1.y = 0;layout1.width = 720;layout1.height = 1280;layout1.fixedVideoStreamType = TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SUB;layout1.fixedVideoUser.intRoomId = 1234;layout1.fixedVideoUser.userId = "mike";TRTCCloudDef.TRTCVideoLayout layout2 = new TRTCCloudDef.TRTCVideoLayout();layout2.zOrder = 0;layout2.x = 1300;layout2.y = 0;layout2.width = 300;layout2.height = 200;layout2.fixedVideoStreamType = TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG;layout2.fixedVideoUser.intRoomId = 1234;layout2.fixedVideoUser.userId = "mike";TRTCCloudDef.TRTCVideoLayout layout3 = new TRTCCloudDef.TRTCVideoLayout();layout3.zOrder = 0;layout3.x = 1300;layout3.y = 220;layout3.width = 300;layout3.height = 200;layout3.fixedVideoStreamType = TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SUB;layout3.fixedVideoUser = null;mixingConfig.videoLayoutList.add(layout1);mixingConfig.videoLayoutList.add(layout2);mixingConfig.videoLayoutList.add(layout3);mixingConfig.audioMixUserList = null;// ミクスストリーミングをリクエストしますmTRTCCloud.startPublishMediaStream(target, encoderParam, mixingConfig);```
```// 公開モードにTRTCPublishMixStreamToCdnを指定しますTRTCPublishTarget* target = [[TRTCPublishTarget alloc] init];target.mode = TRTCPublishMixStreamToCdn;// 公開するCDNのプッシュアドレスを指定しますTRTCPublishCdnUrl* cdnUrl = [[TRTCPublishCdnUrl alloc] init];cdnUrl.rtmpUrl = @"rtmp://tencent/live/bestnews";cdnUrl.isInternalLine = YES;NSMutableArray* cdnUrlList = [NSMutableArray new];[cdnUrlList addObject:cdnUrl];target.cdnUrlList = cdnUrlList;// 合成後のオーディオビデオストリームの二次コーデックパラメータを設定しますTRTCStreamEncoderParam* encoderParam = [[TRTCStreamEncoderParam alloc] init];encoderParam.videoEncodedWidth = 1280;encoderParam.videoEncodedHeight = 720;encoderParam.videoEncodedFPS = 15;encoderParam.videoEncodedGOP = 3;encoderParam.videoEncodedKbps = 1000;encoderParam.audioEncodedSampleRate = 48000;encoderParam.audioEncodedChannelNum = 1;encoderParam.audioEncodedKbps = 50;encoderParam.audioEncodedCodecType = 0;// 画面のレイアウトパラメータを設定しますTRTCStreamMixingConfig* config = [[TRTCStreamMixingConfig alloc] init];NSMutableArray* videoLayoutList = [NSMutableArray new];TRTCVideoLayout* layout1 = [[TRTCVideoLayout alloc] init];layout1.zOrder = 0;layout1.rect = CGRectMake(0, 0, 720, 1280);layout1.fixedVideoStreamType = TRTCVideoStreamTypeSub;layout1.fixedVideoUser.intRoomId = 1234;layout1.fixedVideoUser.userId = @"mike";TRTCVideoLayout* layout2 = [[TRTCVideoLayout alloc] init];layout2.zOrder = 0;layout2.rect = CGRectMake(1300, 0, 300, 200);layout2.fixedVideoStreamType = TRTCVideoStreamTypeBig;layout2.fixedVideoUser.intRoomId = 1234;layout2.fixedVideoUser.userId = @"mike";TRTCVideoLayout* layout3 = [[TRTCVideoLayout alloc] init];layout3.zOrder = 0;layout3.rect = CGRectMake(1300, 220, 300, 200);layout3.fixedVideoStreamType = TRTCVideoStreamTypeSub;layout3.fixedVideoUser = nil;[videoLayoutList addObject:layout1];[videoLayoutList addObject:layout2];[videoLayoutList addObject:layout3];config.videoLayoutList = videoLayoutList;config.audioMixUserList = nil;// ミクスストリーミングをリクエストします[_trtcCloud startPublishMediaStream:target encoderParam:encoderParam mixingConfig:config];```
```// 公開モードにTRTCPublishMixStreamToCdnを指定しますTRTCPublishTarget target;target.mode = TRTCPublishMode::TRTCPublishMixStreamToCdn;// 公開するCDNのプッシュアドレスを指定しますTRTCPublishCdnUrl* cdn_url = new TRTCPublishCdnUrl[1];cdn_url[0].rtmpUrl = "rtmp://tencent/live/bestnews";cdn_url[0].isInternalLine = true;target.cdnUrlList = cdn_url;target.cdnUrlListSize = 1;// 合成後のオーディオビデオストリームの二次コーデックパラメータを設定しますTRTCStreamEncoderParam encoder_param;encoder_param.videoEncodedWidth = 1280;encoder_param.videoEncodedHeight = 720;encoder_param.videoEncodedFPS = 15;encoder_param.videoEncodedGOP = 3;encoder_param.videoEncodedKbps = 1000;encoder_param.audioEncodedSampleRate = 48000;encoder_param.audioEncodedChannelNum = 1;encoder_param.audioEncodedKbps = 50;encoder_param.audioEncodedCodecType = 0;// 画面のレイアウトパラメータを設定しますTRTCStreamMixingConfig config;TRTCVideoLayout* video_layout_list = new TRTCVideoLayout[3];TRTCUser* fixedVideoUser0 = new TRTCUser();fixedVideoUser0->intRoomId = 1234;fixedVideoUser0->userId = "mike";video_layout_list[0].zOrder = 0;video_layout_list[0].rect.left = 0;video_layout_list[0].rect.top = 0;video_layout_list[0].rect.right = 720;video_layout_list[0].rect.bottom = 1280;video_layout_list[0].fixedVideoStreamType =TRTCVideoStreamType::TRTCVideoStreamTypeSub;video_layout_list[0].fixedVideoUser = fixedVideoUser0;TRTCUser* fixedVideoUser1 = new TRTCUser();fixedVideoUser1->intRoomId = 1234;fixedVideoUser1->userId = "mike";video_layout_list[1].zOrder = 0;video_layout_list[1].rect.left = 1300;video_layout_list[1].rect.top = 0;video_layout_list[1].rect.right = 300;video_layout_list[1].rect.bottom = 200;video_layout_list[1].fixedVideoStreamType =TRTCVideoStreamType::TRTCVideoStreamTypeBig;video_layout_list[1].fixedVideoUser = fixedVideoUser1;video_layout_list[2].zOrder = 0;video_layout_list[2].rect.left = 1300;video_layout_list[2].rect.top = 220;video_layout_list[2].rect.right = 300;video_layout_list[2].rect.bottom = 200;video_layout_list[2].fixedVideoStreamType =TRTCVideoStreamType::TRTCVideoStreamTypeSub;video_layout_list[2].fixedVideoUser = nullptr;config.videoLayoutList = video_layout_list;config.videoLayoutListSize = 3;config.audioMixUserList = nullptr;// ミクスストリーミングをリクエストしますtrtc->startPublishMediaStream(&target, &encoder_param, &config);delete fixedVideoUser0;delete fixedVideoUser1;delete[] video_layout_list;```
onCdnStreamStateChanged
コールバックを監視することで、最新のバックグラウンドタスクステータスを取得してコールバックを更新できます。詳細については、APIドキュメントをご参照ください。taskid
に対して、updatePublishMediaStream
プッシュタスクの変更を実行すればよいです。プッシュリンクの安定性を確保するため、単一チャネルによるプッシュからミクスストリーミングによるプッシュに切り替えると、オーディオのみ、またはビデオのみのモードに切り替えることはできません。デフォルトでは、単一チャネルによるプッシュはオーディオビデオモードになっており、切り替え後のミクスストリーミングもオーディオビデオモードになっている必要があります。TRTCStreamEncodeParam
でオーディオ関連のパラメータを設定せず、TRTCStreamMixingConfig
でaudioMixUserList
を空白に設定してください。TRTCStreamMixingConfig
のwatermarkList
で設定できます。詳細については、APIドキュメントをご参照ください。TRTCVideoLayout
のfixedVideoStreamType
をTRTCVideoStreamTypeSub
に設定すればよいです。startPublishMediaStream
を呼び出した)キャスターがルームから退出したことstopPublishMediaStream
を呼び出して、自らミクスストリーミングを停止したこと
この記事はお役に立ちましたか?