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

Object Storage Service:RTMPを介したストリーム取り込み

最終更新日:Feb 23, 2024

H.264エンコードされたビデオストリームとAAC (Advanced Audio Coding) エンコードされたオーディオストリームを、RTMP (Real-Time Messaging Protocol) を介してOSS (Object Storage Service) に取り込むことができます。 OSSにアップロードされたオーディオおよびビデオデータは、ビデオオンデマンド (VOD) またはライブストリーミングに使用できます。 このトピックでは、オーディオおよびビデオストリームをOSSに取り込み、アップロードされたオーディオおよびビデオデータを再生する方法について説明します。

制限事項

  • RTMPを使用する場合、ビデオまたはオーディオストリームのみを取り込むことができます。 ストリームをプルすることはできません。

  • アップロードされるオーディオおよびビデオデータには、H.264ビデオストリームが含まれます。

  • オーディオデータとビデオデータにオーディオストリームを含めるかどうかを指定できます。 オーディオにはAACエンコードされたオーディオストリームのみがサポートされます。 他のフォーマットのオーディオストリームは破棄される。

  • OSSにオーディオおよびビデオデータを保存するには、HTTPライブストリーミング (HLS) のみを使用できます。

  • LiveChannelは、一度に1つのクライアントからのみ取り込まれたストリームを受信できます。

OSS へのオーディオストリームやビデオストリームの取り込み

  1. 取り込みURLを取得します。

    OSS SDKを使用してPutLiveChannel操作を呼び出し、LiveChannelを作成して取り込みURLを取得します。

    • バケットアクセス制御リスト (ACL) をpublic-read-writeに設定した場合、取得した取り込みURLを使用して、オーディオストリームとビデオストリームをOSSに取り込むことができます。

    • バケットACLをpublic-readまたはprivateに設定した場合、インジェストURLに署名を追加する必要があります。 詳細については、「URLへの署名の追加」をご参照ください。

    取り込みURLを取得するには、OSS SDK for JavaとOSS SDK for Pythonのみを使用できます。

    Java

    com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;
    java.util.Listをインポートします。impor t com.aliyun.oss.com mon.auth.*;
    
    public classデモ {
    
        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の名前を指定します。 
            文字列liveChannelName = "yourLiveChannelName";
    
            // Create an OSSClient instance. 
            OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
    
            try {
                CreateLiveChannelRequest request = new CreateLiveChannelRequest(bucketName、
                        liveChannelName, "desc", LiveChannelStatus.Enabled, new LiveChannelTarget();
                CreateLiveChannelResult result = ossClient.createLiveChannel (リクエスト);
    
                // 取り込みURLを照会します。 
                リスト <String> publishUrls = result.getPublishUrls();
                for (String item : publishUrls) {
                    // 署名情報を含まない取り込みURLを照会します。 
                    System.out.println (アイテム);
    
                    // 署名情報を含む取り込みURLを照会します。 
                    LiveChannelInfo liveChannelInfo = ossClient.getLiveChannelInfo(bucketName、liveChannelName);
                    // expiresは、URLの有効期間を指定します。 expiresの値は、UNIX時間形式に続くタイムスタンプです。 この例では、有効期間は1時間に設定されています。 
                    long expires = System.currentTimeMillis() / 1000 + 3600;
                    // playlistNameは、createLiveChannel操作を呼び出すときのビデオオンデマンド (VOD) プレイリストの名前を指定します。 このパラメーターを指定しない場合、デフォルト値 "playlist.m3u8" が使用されます。 getLiveChannelInfo操作を呼び出して、VODプレイリストの名前を照会することもできます。 
                    String signRtmpUrl = ossClient.generateRtmpUri(bucketName, liveChannelName, liveChannelInfo.getTarget().getPlaylistName(), expires);
                    System.out.println(signRtmpUrl);
                }
    
                // ストリーミングURLを照会します。 
                リスト <String> playUrls = result.getPlayUrls();
                for (String item : playUrls) {
                    System.out.println (アイテム);
                }
            } catch (Exception e) {
                oe.printStackTrace();
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "しかし、何らかの理由でエラー応答で拒否されました。");
                System.out.println("エラーメッセージ:" + oe.getErrorMessage());
                System.out.println("エラーコード:" + oe.getErrorCode());
                System.out.println("リクエストID:" + oe.getRequestId());
                System.out.println("ホストID:" + oe.getHostId());
            } catch (ClientException e) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + 「ネットワークにアクセスできないなど」;
                System.out.println("エラーメッセージ:" + ce.getMessage());
            } 最後に{
                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=LTAI5t7h6SgiLSganP2m****&Signature=VfUgZt5N%2B6Uk4C9QH%2BzrRBTO2I****&playlistName=playlist.m3u8
    http://examplebucket.oss-cn-hangzhou.aliyuncs.com/test-channel/playlist.m3u8 

    Python

    # -*-コーディング: utf-8 -*-
    oss2のインポート
    oss2.credentialsから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を生成し、URLの有効期間を3600に設定します。 単位は秒です。 
    signed_publish_url = bucket.sign_rtmp_url(channel_name, "playlist.m3u8", 3600)
    # 署名されていない取り込みURLを表示します。 
    print('publish_url='+ publish_url)
    # 署名された取り込みURLを表示します。 
    印刷 ('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=LTAI5t7h6SgiLSganP2m****&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=LTAI5t7h6SgiLSganP2m****&Expires=1688543369&Signature=eqK8z0ZTSwznP7fkELy0ckt0Iv***"

    ストリーム取り込みにOBSを使用

    1. Open Broadcaster Software (OBS) をインストールします。

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

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

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

      パラメーター

      説明

      ストリームタイプ

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

      URL

      手順1: rtmp:// examplebucket.oss-cn-hangzhou.aliyuncs.com/liveで取得した未署名取り込みURLを入力します。

      ストリームキー

      ステップ1で取得した署名入り取り込みURLを入力します。test-channel?playlistName=playlist.m3u8&OSSAccessKeyId=LTAI5t7h6SgiLSganP2m ****&Expires=1688543369&Signature=eqK8z0ZTSwznP7fkELy0ckt0Iv ****

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

OSS にアップロードされたオーディオデータやビデオデータの再生

ライブストリーム

ストリームの取り込み中に、HLSを使用して、次のプラットフォームでアップロードされているオーディオおよびビデオデータを再生できます。

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

  • macOSプラットフォームでは、Safariを使用してオーディオおよびビデオデータを再生します。

  • コンピューターにVLCメディアプレーヤーをインストールして、オーディオとビデオのデータを再生します。 VLCメディアプレーヤーをインストールしたら、VLCメディアプレーヤーページで [メディア (M)] > [ネットワークストリーミングを開く] を選択し、取得した再生URLを [ネットワークURLを入力してください] フィールドに入力します。

スムーズなストリーミングエクスペリエンスを確保するために、FragDurationを2秒などの小さな値に設定できます。 また、グループ・オブ・ピクチャ (GOP) を、LiveChannelのFragDurationと同じ固定値に設定することを推奨します。 次の図は、OBSでGOP (キーフレーム間隔) を設定する方法を示しています。

VOD

OSSにストリームを取り込むとき、OSSはライブストリーミングを使用してM3U8オブジェクトを取り込みまたは更新します。 ストリームの取り込み後にPostVodPlaylist操作を呼び出して、VOD用のM3U8オブジェクトを組み立て、オブジェクトのURLを使用してアップロードされたオーディオおよびビデオデータを再生する必要があります。

VODシナリオでは、より大きなGOPを設定して、トランスポートストリーム (TS) オブジェクトの数とビットレートを減らすこともできます。

参考資料