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

Object Storage Service:RTMP アップストリーミング

最終更新日:Nov 09, 2025

OSS は、リアルタイムメッセージングプロトコル (RTMP) を使用した H.264 エンコードのビデオストリームと AAC エンコードのオーディオストリームのプッシュをサポートしています。アップストリーミングされたデータは、ビデオオンデマンドまたはライブストリーミングのシナリオで使用できます。この Topic では、オーディオストリームとビデオストリームを OSS にプッシュし、アップストリーミングされたデータを再生する方法について説明します。

制限事項

  • RTMP アップストリーミングのみがサポートされています。ストリームのプルはサポートされていません。

  • アップロードされたデータには、H.264 フォーマットのビデオストリームが含まれている必要があります。

  • オーディオストリームはオプションです。オーディオストリームを含める場合、AAC フォーマットである必要があります。他のフォーマットのオーディオストリームは破棄されます。

  • ダンプでは、HTTP Live Steaming (HLS) プロトコルのみがサポートされています。

  • 一度に 1 つの LiveChannel にストリームをプッシュできるクライアントは 1 つだけです。

オーディオデータとビデオデータを OSS にプッシュする

  1. アップストリーミング URL を取得します。

    SDK を使用して PutLiveChannel 操作を呼び出し、LiveChannel を作成してそのアップストリーミング URL を取得します。

    • バケットのアクセス制御リスト (ACL) が公開読み書きに設定されている場合、取得したアップストリーミング URL を直接アップストリーミングに使用できます。

    • バケットの ACL が公開読み取りまたは非公開に設定されている場合は、URL に署名する必要があります。URL の署名方法の詳細については、「署名 V1」をご参照ください。

    アップストリーミング URL の取得をサポートしているのは、Java SDK と Python SDK のみです。

    Java

    import com.aliyun.oss.ClientException;
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.OSSException;
    import com.aliyun.oss.model.*;
    import java.util.List;
    import com.aliyun.oss.common.auth.*;
    import com.aliyun.oss.ClientBuilderConfiguration;
    import com.aliyun.oss.common.comm.SignVersion;
    
    public class Demo {
    
        public static void main(String[] args) throws Exception {
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // 環境変数からアクセス資格情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
            EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
            // バケット名を指定します。例: examplebucket。
            String bucketName = "examplebucket";
            // LiveChannel 名を指定します。
            String liveChannelName = "yourLiveChannelName";
            // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
            String region = "cn-hangzhou";
    
            // OSSClient インスタンスを作成します。
            // OSSClient インスタンスが不要になったら、shutdown メソッドを呼び出してリソースを解放します。
            ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
            clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
            OSS ossClient = OSSClientBuilder.create()
            .endpoint(endpoint)
            .credentialsProvider(credentialsProvider)
            .clientConfiguration(clientBuilderConfiguration)
            .region(region)               
            .build();
    
            try {
                CreateLiveChannelRequest request = new CreateLiveChannelRequest(bucketName,
                        liveChannelName, "desc", LiveChannelStatus.Enabled, new LiveChannelTarget());
                CreateLiveChannelResult result = ossClient.createLiveChannel(request);
    
                // アップストリーミング URL を取得します。
                List<String> publishUrls = result.getPublishUrls();
                for (String item : publishUrls) {
                    // 署名情報を含まないアップストリーミング URL を取得します。
                    System.out.println(item);
    
                    // 署名情報を含むアップストリーミング URL を取得します。
                    LiveChannelInfo liveChannelInfo = ossClient.getLiveChannelInfo(bucketName, liveChannelName);
                    // expires パラメーターは有効期限を指定します。値は UNIX タイムスタンプです。この例では、有効期限を現在から 1 時間後に設定します。
                    long expires = System.currentTimeMillis() / 1000 + 3600;
                    // playlistName パラメーターは、CreateLiveChannel 操作で渡される名前を指定します。このパラメーターが指定されていない場合、デフォルト値の playlist.m3u8 が使用されます。GetLiveChannelInfo 操作を呼び出してこの名前を取得することもできます。
                    String signRtmpUrl = ossClient.generateRtmpUri(bucketName, liveChannelName, liveChannelInfo.getTarget().getPlaylistName(), expires);
                    System.out.println(signRtmpUrl);
                }
    
                // 再生 URL を取得します。
                List<String> playUrls = result.getPlayUrls();
                for (String item : playUrls) {
                    System.out.println(item);
                }
            } catch (OSSException oe) {
                oe.printStackTrace();
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + "such as not being able to access the network.");
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }

    次のアップストリーミング URL が返されます。

    rtmp://examplebucket.oss-cn-hangzhou.aliyuncs.com/live/test-channel
    rtmp://examplebucket.oss-cn-hangzhou.aliyuncs.com/live/test-channel?Expires=1688542428&OSSAccessKeyId=LTAI********&Signature=VfUgZt5N%2B6Uk4C9QH%2BzrRBTO2I****&playlistName=playlist.m3u8
    http://examplebucket.oss-cn-hangzhou.aliyuncs.com/test-channel/playlist.m3u8

    Python

    # -*- coding: utf-8 -*-
    import oss2
    from oss2.credentials import EnvironmentVariableCredentialsProvider
    
    # 環境変数からアクセス資格情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
    auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
    # バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
    # バケット名を指定します。例: examplebucket。
    bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
    # LiveChannel 名を指定します。例: test-channel。
    channel_name = "test-channel"
    channel_cfg = oss2.models.LiveChannelInfo(target = oss2.models.LiveChannelInfoTarget())
    channel = bucket.create_live_channel(channel_name, channel_cfg)
    publish_url = channel.publish_url
    # RTMP アップストリーミング用の署名付き URL を生成し、有効期限を 3,600 秒に設定します。
    signed_publish_url = bucket.sign_rtmp_url(channel_name, "playlist.m3u8", 3600)
    # 署名なしのアップストリーミング URL を出力します。
    print('publish_url='+publish_url)
    # 署名付きのアップストリーミング URL を出力します。
    print('signed_publish_url='+signed_publish_url)

    次のアップストリーミング URL が返されます。

    publish_url=rtmp://examplebucket.oss-cn-hangzhou.aliyuncs.com/live/test-channel
    signed_publish_url=rtmp://examplebucket.oss-cn-hangzhou.aliyuncs.com/live/test-channel?playlistName=playlist.m3u8&OSSAccessKeyId=LTAI********&Expires=1688543369&Signature=eqK8z0ZTSwznP7fkELy0ckt0Iv****
  2. アップストリーミング URL を使用して、オーディオデータとビデオデータを OSS にプッシュします。

    FFmpeg を使用したアップストリーミング

    FFmpeg を使用して、ローカルのビデオファイルを OSS にプッシュできます。例:

    ffmpeg -i 1.flv -c copy -f flv "rtmp://examplebucket.oss-cn-hangzhou.aliyuncs.com/live/test-channel?playlistName=playlist.m3u8&OSSAccessKeyId=LTAI********&Expires=1688543369&Signature=eqK8z0ZTSwznP7fkELy0ckt0Iv***"

    OBS を使用したアップストリーミング

    1. OBS Studio をインストールします。

    2. 上部のナビゲーションバーで、[ファイル] > [設定] を選択します。

    3. 左側のナビゲーションウィンドウで、[配信] をクリックします。

    4. 表示されるダイアログボックスで、次の表の説明に従ってパラメーターを設定します。

      パラメーター

      説明

      サービス

      ドロップダウンリストから [カスタム] を選択します。

      サーバー

      ステップ 1 で取得した、署名情報を含まないアップストリーミング URL を入力します: rtmp://examplebucket.oss-cn-hangzhou.aliyuncs.com/live

      ストリームキー

      ステップ 1 で取得した署名付きアップストリーミング情報を入力します: test-channel?playlistName=playlist.m3u8&OSSAccessKeyId=LTAI**************&Expires=1688543369&Signature=eqK8z0ZTSwznP7fkELy0ck********

    5. [OK] をクリックします。

OSS にプッシュされたオーディオデータとビデオデータを再生する

ライブストリーミングシナリオ

アップストリーミング中に、HLS プロトコルを使用してアップストリーミングされたコンテンツを再生できます。再生方法はプラットフォームによって異なります。

  • Android や iOS などのモバイルプラットフォームでは、LiveChannel の再生 URL をブラウザに入力します。

  • macOS では、Safari ブラウザを使用して再生します。

  • PC では、VLC メディアプレーヤーをインストールして再生します。インストールが完了したら、VLC メディアプレーヤーを開き、[メディア] > [ネットワークストリームを開く...] を選択し、[ネットワーク URL を入力してください] テキストボックスに再生 URL `play_url` を入力します。

スムーズなライブストリーミングを行うには、`FragDuration` を 2 秒などの小さい値に設定します。さらに、GOP (group of pictures) のサイズを LiveChannel の `FragDuration` と同じに設定します。OBS で GOP (または キーフレーム間隔) を設定するには、次の手順に従います。

ビデオオンデマンドシナリオ

アップストリーミング中、OSS はライブストリームとして M3U8 ファイルを継続的にプッシュおよび更新します。アップストリーミングが完了したら、PostVodPlaylist 操作を呼び出して、ビデオオンデマンド再生用の M3U8 ファイルをアセンブルする必要があります。その後、このファイルの URL を使用して再生できます。

ビデオオンデマンドシナリオでは、GOP を大きく設定して TS ファイルの数を減らし、ビットレートを下げることができます。

参考資料