すべてのプロダクト
Search
ドキュメントセンター

:音声とビデオの SEI を設定する方法

最終更新日:Jul 03, 2025

ライブストリーミングのシナリオでは、視聴者は通常、ストリーマーの戦闘状態、音量、ネットワーク状態など、同時ストリーミング情報をリアルタイムで把握したいと考えています。補足拡張情報 (SEI) を使用すると、フレームに同期キー情報を付加できます。このトピックでは、ApsaraVideo Real-time Communication (ARTC) で SEI を使用してフレームに同期キー情報を付加する方法について説明します。

クライアント SEI

クライアント SDK を使用して、カスタム情報を含む SEI をビデオフレームに挿入できます。ストリーマーと同時ストリーミングを行っている同時ストリーマーと視聴者は、どちらもカスタム情報を受信できます。

  • 次のサンプルコードは、ストリーマーと同時ストリーマーが Alibaba Cloud Push SDK を呼び出して SEI を送受信する例を示しています。

    • Android のサンプルコード:

      // SEI の送信: AlivcLivePusher#sendMessage。ストリーム取り込みクライアントがカスタムメッセージを送信します。
      public void sendSEI(String text) {
          mAlivcLivePusher.sendMessage(text, 0, 0, false);
      }
      
      // SEI の受信: AlivcLivePlayInfoListener#onReceiveSEIMessage。メディア拡張情報のコールバックが受信されます。
      @Override
      public void onReceiveSEIMessage(int payload, byte[] data) {
          //Log.d(TAG, "onReceiveSEIMessage: " + payload + ", " + new String(data, StandardCharsets.UTF_8));
      }
    • iOS のサンプルコード:

      // AlivcLivePusher の sendMessage メソッドを呼び出して SEI を送信します。
      [self.rtcPusher sendMessage:data repeatCount:1 delayTime:0 KeyFrameOnly:false];
      
      // ストリーマーと同時ストリーマーは、AliLivePlayerDelegate の onReceiveSeiMessage コールバックから SEI を受信します。
      - (void)onReceiveSeiMessage:(AlivcLivePlayer *)player payloadType:(int)payloadType data:(NSData *)data
      {
          if (data.bytes){
              NSString *str = [NSString stringWithUTF8String:data.bytes];
          } 
      }
      
  • 次のサンプルコードは、視聴者が ApsaraVideo Player を使用して SEI フレームを開いて解析する例を示しています。

    • Android のサンプルコード:

      mAliPlayer = AliPlayerFactory.createAliPlayer(mContext);
      
      PlayerConfig playerConfig = mAliPlayer.getConfig();
      // FLV 形式の音声のみまたはビデオのみのストリームの SEI フレーム解析を設定して、起動時間を短縮します。
      // 再生開始バッファー。値が大きいほど、再生開始が安定します。ただし、値が大きすぎると、ストリームの再生開始にかかる時間が影響を受ける可能性があります。このパラメーターは適切に指定してください。
      playerConfig.mStartBufferDuration = 1000;
      // 途切れからの回復に必要なキャッシュ。ネットワーク状態が悪い場合は、大きい値を指定します。音声のみのストリームの場合は 500、ビデオストリームの場合は 3000 に設定することをお勧めします。
      playerConfig.mHighBufferDuration = 500;
      // SEI リスニングを有効にします。
      playerConfig.mEnableSEI = true;
      mAliPlayer.setConfig(playerConfig);
      
      mAliPlayer.setAutoPlay(true);
      
      mAliPlayer.setOnErrorListener(errorInfo -> {
          mAliPlayer.prepare();
      });
      
      mAliPlayer.setOnSeiDataListener(new IPlayer.OnSeiDataListener() {
          @Override
          public void onSeiData(int i, byte[] bytes) {
      
          }
      });
    • iOS のサンプルコード:

      self.cdnPlayer = [[AliPlayer alloc] init];
      self.cdnPlayer.delegate = self;
      AVPConfig *config = [self.cdnPlayer getConfig];
      config.enableSEI = YES;
      [self.cdnPlayer setConfig:config];
      
      // SEI 関連のコールバックをリッスンします。
      - (void)onSEIData:(AliPlayer*)player type:(int)type data:(NSData *)data {
          if (data.bytes){
              NSString *str = [NSString stringWithUTF8String:data.bytes];
              // SEI メッセージを処理します。
          }
      }

サーバー SEI

サーバー SEI には、システム SEI とカスタム SEI が含まれます。

  • システム SEI: ARTC サーバーによって自動的に生成されます。レイアウト、ストリーマーのマイクの状態、音量、カメラの状態、ネットワークの状態を記述するために使用されます。

  • カスタム SEI: サーバー側で API 操作を呼び出して、カスタムビジネス情報を送信します。

システム SEI

ストリーマーが同時ストリーミング状態になった場合、または同時ストリーミング状態から単一ストリーマー状態に戻った場合、ライブストリームのレイアウトが変更されます。この場合、クラウド内のストリームミキシングサーバーは、ビデオフレームに SEI を自動的に挿入するため、プレーヤーはレイアウトの変更を認識できます。ライブストリーミング中は、システム SEI を定期的に送信することも、キーフレームと共に送信することもできます。

  • クライアント SDK を使用してストリームミキシングおよびリレータスクを開始する前に、[apsaravideo Live コンソール] でシステム SEI 送信ポリシーを設定できます。詳細については、「ストリームリレーを設定する」の [SEI 挿入] に関する説明をご参照ください。

  • サーバー側で API 操作を呼び出してストリームミキシングおよびリレータスクを開始する場合は、SeiParams.LayoutVolume パラメーターを設定する必要があります。詳細については、「StartLiveMPUTask(新規)」または「UpdateLiveMPUTask(新規)」をご参照ください。

    • FollowIdr は、SEI をキーフレームと共に送信するかどうかを指定します。

    • Interval は、SEI を送信する間隔を指定します。

    FollowIdr パラメーターの値が 0 に設定され、Interval パラメーターが指定されていない場合、SEI はレイアウトが変更されたとき、マイクの状態が変更されたとき、またはカメラの状態が変更されたときにのみ送信されます。SEI は定期的に送信されません。

カスタム SEI

カスタム SEI は、カスタムメッセージを送信するために使用されます。サーバー側で API 操作を呼び出してのみ、カスタム SEI を送信できます。API 操作の呼び出しでは、SeiParams.PassThrough パラメーターを設定する必要があります。詳細については、「StartLiveMPUTask(新規)」または「UpdateLiveMPUTask(新規)」をご参照ください。

  • PayloadContent は、カスタムメッセージを指定します。

  • FollowIdr は、SEI をキーフレームと共に送信するかどうかを指定します。

  • Interval は、SEI を送信する間隔を指定します。

FollowIdr パラメーターの値が 0 に設定され、Interval パラメーターが指定されていない場合、SEI は API 操作が呼び出されたときに一度だけ送信されます。SEI は定期的に送信されません。

SEI データ形式

次の図は、SEI のデータ形式を示しています。現在の SEI ペイロードタイプは 5 で、UserDataUnregistered です。

image

SEI ペイロードコンテンツの詳細については、「StartLiveMPUTask (new)」をご参照ください。