本ページでは、Realtime Compute を使用してライブストリーミングのデジタル操作を行う方法をユースケースを使用して説明します。

デジタル操作

本ページでは、デジタル操作に焦点を当てています。 Realtime Compute を使用して、人気のある動画やユーザーの視聴動向など、ライブストリーミング Web サイトのストリーミングチャンネルの動作状況をリアルタイムでモニタリングします。

ソリューション

  • ビジネスの目標
    • Web サイトでのユーザーの総数とユーザーの視聴動向に関する統計を収集します。
    • チャンネルのユーザーの総数とユーザーの視聴動向に関する統計を収集します。
    • 人気トップ 10 のチャンネルと各カテゴリの人気トップ 10 のチャンネルに関する統計を収集します。
  • データ形式

    クライアントアプリで追跡されたログを生データとして使用し、その統計を収集します。

    次の表では、クライアントアプリがサーバーへ送信した追跡ログのデータ形式について説明します。

    フィールド名 説明
    ip クライアントの IP アドレス
    agent クライアントのデバイスタイプ
    roomid チャンネルの ID
    userid ユーザーの ID
    abytes オーディオのビットレート
    afcnt オーディオフレームの数
    adrop ドロップされたオーディオフレームの数
    afts オーディオのタイムスタンプ
    alat オーディオフレームの E2E 待ち時間
    vbytes ビデオのビットレート
    vfcnt ビデオフレームの数
    vdrop ドロップされたビデオフレームの数
    vfts ビデオのタイムスタンプ
    vlat ビデオフレームの E2E 待ち時間
    ublock アップストリームフレームがフリーズした回数
    dblock ダウンストリームフレームがフリーズした回数
    timestamp ログが生成された際のタイムスタンプ
    region ライブストリーミングが実行されるリージョン

    Log Service は半構造化ストレージを使用して前述のフィールドを次のログ形式で表示します。

    {
        "ip": "ip",
        "agent": "agent",
        "roomid": "123456789",
        "aliUid": "123456789"
        "abytes": "123456",
        "afcnt": "34",
        "adrop": "3",
        "afts": "1515922566",
        "alat": "123",
        "vbytes": "123456",
        "vfcnt": "34",
        "vdrop": "4",
        "vfts": "1515922566",
        "vlat": "123",
        "ublock": "1",
        "dblock": "2",
        "timestamp": "1515922566",
        "region": "cn-hangzhou",
    }
    					
  • SQL 文
    • Web サイト のユーザーの総数とユーザーの視聴動向に関する統計を収集します。

      毎分新しいウィンドウを使用して、Web サイトでのユーザーの視聴動向に関する統計を収集します。 視聴動向に関する直近 1 分の統計結果とは、ご自身の Web サイトの現在のユーザー総数です。

      CREATE VIEW view_app_total_visit_1min AS
      SELECT
          CAST(TUMBLE_START(app_ts, INTERVAL '1' MINUTE) as VARCHAR) as app_ts,
          COUNT(DISTINCT userid) as app_total_user_cnt
      FROM
          view_app_heartbeat_stream
      GROUP BY
          TUMBLE(app_ts, INTERVAL '1' MINUTE);
      							
    • チャンネルのユーザー総数と視聴動向に関する統計を収集します。

      同様に毎分新しいウィンドウを使用して、 ユーザーのチャンネルの視聴動向に関する統計を収集します。 視聴動向に関する直近 1 分の統計結果とは、チャンネルの現在のユーザー総数です。

      CREATE VIEW view_app_room_visit_1min AS
      SELECT
          CAST(TUMBLE_START(app_ts, INTERVAL '1' MINUTE) as VARCHAR) as app_ts,
          roomid as room_id,
          COUNT(DISTINCT userid) as app_room_user_cnt
      FROM
          view_app_heartbeat_stream
      GROUP BY
          TUMBLE(app_ts, INTERVAL '1' MINUTE), roomid;
      							
    • 人気トップ 10 のチャンネルをランク付けします。

      人気トップ 10 のチャンネルに関する統計を収集し、これらのチャンネルをホームページに掲載し宣伝することで、ご自身の Web サイトへのトラフィックとクリック数を増やします。

      CREATE VIEW view_app_room_visit_top10 AS
      SELECT
        app_ts,
        room_id,
        app_room_user_cnt,
        rangking
      FROM
      (
          SELECT 
              app_ts,
              room_id,
              app_room_user_cnt,
              ROW_NUMBER() OVER (PARTITION BY 1 ORDER BY app_room_user_cnt desc) AS ranking
          FROM
              view_app_room_visit_1min
      ) WHERE ranking <= 10;
      							
    • 各カテゴリのチャンネルの人気トップ 10 をランク付けします。

      高度にインタラクティブなユーザーコミュニティを構築し、より多くのライブストリーミングシナリオを網羅してより多くの利益を生み出すため、プラットフォームの運用者は通常、さまざまなユーザーグループの要件に対応した多様なチャンネルを確立します。 たとえば、Taobao Live では、化粧品、紳士服、自動車、フィットネスなどさまざまなカテゴリをカバーしています。

      RDS ディメンションテーブル dm_category_room を作成し、カテゴリとチャンネル間のマッピングを保存します。

      CREATE TABLE dim_category_room ( 
          id    BIGINT,
          category_id BIGINT,
          category_name VARCHAR,
          room_id    BIGINT
            PRIMARY KEY (room_id), 
            PERIOD FOR SYSTEM_TIME // Specify that this is a dimension table. 
       ) WITH ( 
           type= 'rds', 
           url = '<yourDatabaseURL>', // Your database URL. 
           tableName = '<yourDatabaseTableName>', // Your table name. 
           userName = '<yourDatabaseUserName>', // Your username. 
           password = '<yourDatabaseUserPassword>' // Your password. 
       );

      ルーム ID に基づいて dim_category_room テーブルを結合し、各カテゴリの人気チャンネルランキングを計算します。

      CREATE VIEW view_app_room_visit_1min AS
      SELECT
          CAST(TUMBLE_START(app_ts, INTERVAL '1' MINUTE) as VARCHAR) as app_ts,
          roomid as room_id,
          COUNT(DISTINCT userid) as app_room_user_cnt
      FROM
          view_app_heartbeat_stream
      GROUP BY
          TUMBLE(app_ts, INTERVAL '1' MINUTE), roomid;
      
      // Join to the dim_category_room table.
      CREATE VIEW view_app_category_visit_1min AS
      SELECT 
          r.app_ts,
          r.room_id,
          d.category_id,
          d.category_name,
          r.app_room_user_cnt
      FROM
          view_app_room_visit_1min r
      JOIN
          dim_category_room d
      ON
          r.room_id = d.room_id;
      
      
      // Compute the rankings of channels in each category.
      CREATE VIEW view_app_category_visit_top10 AS
      SELECT
        app_ts,
        category_id,
        category_name,
        app_room_user_cnt,
        rangking
      FROM
      (
          SELECT 
              app_ts,
              room_id,
              category_id,
              category_name,
              app_room_user_cnt,
              ROW_NUMBER() OVER (PARTITION BY category_id ORDER BY app_room_user_cnt desc) AS ranking
          FROM
              view_app_category_visit_1min
      ) WHERE ranking <= 10;
      							

デモコードとソースコード

Alibaba Cloud チームでは、デモコードを作成しました。このデモコードには、上記のデジタル操作に使用することができる完全なリンクが含まれています。

  • ソーステーブルとして、DataHub インスタンスへ CSV ファイルをアップロードします。
  • RDS ディメンションテーブルを作成します。
  • RDS 結果テーブルを作成します。

デモコードを参照して、入力データと出力データを登録します。ご自身のデジタル操作ソリューションを開発します。 [添付資料] をクリックしてデモコードをダウンロードします。