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 へのオーディオストリームやビデオストリームの取り込み
取り込み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****
取り込み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を使用
Open Broadcaster Software (OBS) をインストールします。
上部のナビゲーションバーで、
を選択します。左側のナビゲーションウィンドウで、[ストリーム] をクリックします。
表示されるダイアログボックスで、次の表に示すパラメーターを設定します。
パラメーター
説明
ストリームタイプ
ドロップダウンリストから [カスタムストリーミングサーバー] を選択します。
URL
手順1:
rtmp:// examplebucket.oss-cn-hangzhou.aliyuncs.com/live
で取得した未署名取り込みURLを入力します。ストリームキー
ステップ1で取得した署名入り取り込みURLを入力します。
test-channel?playlistName=playlist.m3u8&OSSAccessKeyId=LTAI5t7h6SgiLSganP2m ****&Expires=1688543369&Signature=eqK8z0ZTSwznP7fkELy0ckt0Iv ****
。[OK] をクリックします。
OSS にアップロードされたオーディオデータやビデオデータの再生
ライブストリーム
ストリームの取り込み中に、HLSを使用して、次のプラットフォームでアップロードされているオーディオおよびビデオデータを再生できます。
AndroidやiOSなどのモバイルプラットフォームでは、ブラウザにLiveChannelのストリーミングURLを入力します。
macOSプラットフォームでは、Safariを使用してオーディオおよびビデオデータを再生します。
コンピューターにVLCメディアプレーヤーをインストールして、オーディオとビデオのデータを再生します。 VLCメディアプレーヤーをインストールしたら、VLCメディアプレーヤーページで
を選択し、取得した再生URLを [ネットワークURLを入力してください] フィールドに入力します。
スムーズなストリーミングエクスペリエンスを確保するために、FragDurationを2秒などの小さな値に設定できます。 また、グループ・オブ・ピクチャ (GOP) を、LiveChannelのFragDurationと同じ固定値に設定することを推奨します。 次の図は、OBSでGOP (キーフレーム間隔) を設定する方法を示しています。
VOD
OSSにストリームを取り込むとき、OSSはライブストリーミングを使用してM3U8オブジェクトを取り込みまたは更新します。 ストリームの取り込み後にPostVodPlaylist操作を呼び出して、VOD用のM3U8オブジェクトを組み立て、オブジェクトのURLを使用してアップロードされたオーディオおよびビデオデータを再生する必要があります。
VODシナリオでは、より大きなGOPを設定して、トランスポートストリーム (TS) オブジェクトの数とビットレートを減らすこともできます。