ApsaraVideo Liveを使用すると、ライブストリーミング中にリアルタイムのスナップショットをキャプチャできます。 このトピックでは、ApsaraVideo Liveのスナップショット機能について説明します。
前提条件
Object Storage Service (OSS) が有効化され、OSSバケットが作成されます。 OSSバケットは、ライブストリーミング中にキャプチャされたスナップショットを保存するために使用されます。 詳細については、「OSSの有効化」および「バケットの作成」をご参照ください。
バケットは、ストリーミングドメインのライブセンターと同じリージョンに存在する必要があります。 クロスリージョンスナップショットのキャプチャはサポートされていません。
スナップショットルール
ライブストリームのスナップショットルールは、取り込まれたストリームの
AppName
パラメーターに基づいて設定されます。 特定のアプリケーションのすべての取り込みストリームに対してスナップショットルールを設定できます。説明AppName
パラメーターがアスタリスク (*) に設定されている場合、スナップショットルールは、指定されたドメイン名のすべての取り込みストリームに適用されます。スナップショット機能を設定するときに、上書きモードまたはリアルタイムモードでスナップショットをキャプチャするようにパラメータを設定できます。
上書きモードでは、最新のスナップショットが既存のスナップショットを上書きします。
リアルタイムモードでは、最新のスナップショットは既存のスナップショットと一緒に保存されます。
ライブストリームスナップショットは、JPG形式でのみ生成できます。
説明少なくとも1つのモードを選択する必要があります。 2つのモードを同時に選択することができます。
スナップショット機能の使用
新しく設定されたスナップショットテンプレートは、進行中のライブストリームでは有効になりません。 スナップショットテンプレートは、ストリームを再取り込みした後にのみ有効になります。
スナップショット機能の設定
ApsaraVideo Liveのスナップショット機能は、次のいずれかの方法で設定できます。
ApsaraVideo Liveコンソールでスナップショット機能を設定します。 詳細については、「スナップショットの設定」をご参照ください。
API操作を呼び出してスナップショット機能を設定します。 次のサンプルコードは、AddLiveAppSnapshotConfig操作を呼び出してスナップショット設定を設定する方法を示しています。
// Replace the placeholder values with the actual values.
DefaultProfile profile = DefaultProfile.getProfile("<regionId>", "<ALIBABA_CLOUD_ACCESS_KEY_ID>", "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>");
IAcsClient client = new DefaultAcsClient(profile);
AddLiveAppSnapshotConfigRequest addLiveAppSnapshotConfigRequest = new AddLiveAppSnapshotConfigRequest();
addLiveAppSnapshotConfigRequest.setDomainName("<DomainName>");
addLiveAppSnapshotConfigRequest.setAppName("<AppName>");
// The interval at which snapshots are captured. Valid values: 5 to 3600.
addLiveAppSnapshotConfigRequest.setTimeInterval(5);
addLiveAppSnapshotConfigRequest.setOssEndpoint("<Endpoint>");
addLiveAppSnapshotConfigRequest.setOssBucket("<BucketName>");
// The name of the OSS object to be generated when a snapshot is captured in overwrite mode. This object is to be overwritten each time when a snapshot is captured. The name must be less than 256 bytes in length. The name can contain variables, such as {AppName} and {StreamName}.
addLiveAppSnapshotConfigRequest.setOverwriteOssObject("<{AppName}/{StreamName}.jpg>");
// The name of the OSS object to be generated when a snapshot is captured in real-time mode. The name must be less than 256 bytes in length. The name can contain variables, such as {AppName}, {StreamName}, {UnixTimestamp}, and {Sequence}. You must specify one of {UnixTimestamp} and {Sequence}.
addLiveAppSnapshotConfigRequest.setSequenceOssObject("<{AppName}/{StreamName}/{UnixTimestamp}.jpg>");
try {
AddLiveAppSnapshotConfigResponse addLiveAppSnapshotConfigResponse = client.getAcsResponse(addLiveAppSnapshotConfigRequest);
System.out.println(addLiveAppSnapshotConfigResponse.getRequestId());
// todo something.
} catch (ServerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
スナップショット設定を設定すると、スナップショットは新しく取り込まれたストリームに対してのみキャプチャされます。 キャプチャされたスナップショットは、BucketNameパラメーターで指定されたOSSバケットに保存されます。 上書きモードとリアルタイムモードでキャプチャされたスナップショットのパスを同時に設定すると、2つのモードのスナップショットが生成されます。 上書きモードでキャプチャされたスナップショットのパスは <{AppName}/{StreamName}.jpg> です。 リアルタイムモードでキャプチャされたスナップショットのパスは <{AppName}/{StreamName}/{UnixTimestamp}.jpg> です。
上書きモードでキャプチャされたスナップショットとリアルタイムモードでキャプチャされたスナップショットの違いの詳細については、このトピックの「スナップショットルール」をご参照ください。
スナップショットの管理
次のいずれかの方法でスナップショットを管理できます。
1. ApsaraVideo Liveコンソールでスナップショットを管理します。 詳細については、「スナップショットの管理」をご参照ください。
2. API操作を呼び出してスナップショットを管理します。 次のサンプルコードは、Java用サーバーSDKを使用してAPI操作を呼び出してスナップショットを削除する方法を示しています。
以下の手順を実行します。
スナップショットを照会します。
説明スナップショットを削除するには、スナップショットのタイムスタンプを指定する必要があります。 スナップショットを削除する前に、スナップショットのタイムスタンプを照会する必要があります。
// Replace the placeholder values with the actual values. DefaultProfile profile = DefaultProfile.getProfile("<regionId>", "<ALIBABA_CLOUD_ACCESS_KEY_ID>", "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>"); IAcsClient client = new DefaultAcsClient(profile); DescribeLiveStreamSnapshotInfoRequest describeLiveStreamSnapshotInfoRequest=new DescribeLiveStreamSnapshotInfoRequest(); describeLiveStreamSnapshotInfoRequest.setAppName("<AppName>"); describeLiveStreamSnapshotInfoRequest.setStreamName("<StreamName>"); describeLiveStreamSnapshotInfoRequest.setDomainName("<DomainName>"); // The beginning of the time range to query. The time follows the ISO 8601 standard in the yyyy-MM-ddTHH:mm:ssZ format and is displayed in UTC. describeLiveStreamSnapshotInfoRequest.setStartTime("<StartTime>"); // The end of the time range to query. The time follows the ISO 8601 standard in the yyyy-MM-ddTHH:mm:ssZ format and is displayed in UTC. The duration specified by the StartTime parameter and the EndTime parameter cannot exceed one day. describeLiveStreamSnapshotInfoRequest.setEndTime("<EndTime>"); DescribeLiveStreamSnapshotInfoResponse describeLiveStreamSnapshotInfoResponse = null; try { describeLiveStreamSnapshotInfoResponse = client.getAcsResponse(describeLiveStreamSnapshotInfoRequest); } catch (ClientException e) { e.printStackTrace(); } System.out.println(new Gson().toJson(describeLiveStreamSnapshotInfoResponse));
重要スナップショットクエリは、過去1年以内の1日に制限されます。 StartTimeパラメーターとEndTimeパラメーターで指定された期間は、1日を超えることはできません。
スナップショットが上書きモードとリアルタイムモードで同時にキャプチャされる場合、リアルタイムモードでキャプチャされたスナップショットのみをクエリできます。 この場合、上書きモードでキャプチャされたスナップショットは、OSSコンソールでのみ表示できます。 詳細については、「リストオブジェクト」をご参照ください。
DescribeLiveStreamSnapshotInfo操作は、ページ化されたクエリをサポートせず、一度に最大100個のエントリを返すことができます。 デフォルトでは、10エントリが返されます。
DescribeLiveStreamSnapshotInfo操作の詳細については、「DescribeLiveStreamSnapshotInfo」をご参照ください。
スナップショットを削除します。
説明ApsaraVideo Liveでスナップショットを削除するときにOSSに保存されている対応するスナップショットを削除する場合は、AliyunMTSVideoLifecycleRoleという名前のリソースアクセス管理 (RAM) ロールを作成し、AliyunMTSVideoLifecycleRolePolicyシステムポリシーをロールにアタッチする必要があります。 ApsaraVideo Liveでスナップショットを削除すると、アプリケーション名、ストリーム名、OSSオブジェクトのパスなどのスナップショット情報が削除されます。 スナップショット自体はOSSに保存されます。 詳細については、「スナップショットの管理」トピックの「ApsaraVideo Liveコンソールでのスナップショットの削除」セクションをご参照ください。
// Replace the placeholder values with the actual values. DefaultProfile profile = DefaultProfile.getProfile("<regionId>", "<ALIBABA_CLOUD_ACCESS_KEY_ID>", "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>"); IAcsClient client = new DefaultAcsClient(profile); DeleteSnapshotFilesRequest deleteSnapshotFilesRequest=new DeleteSnapshotFilesRequest(); deleteSnapshotFilesRequest.setAppName("<AppName>"); deleteSnapshotFilesRequest.setStreamName("<StreamName>"); deleteSnapshotFilesRequest.setDomainName("<DomainName>"); // Specify whether to delete the corresponding snapshots stored in OSS. deleteSnapshotFilesRequest.setRemoveFile(true); List<Long> createTimestampLists=new ArrayList<>(); // Specify the timestamp of the snapshot that you want to delete. // createTimestampLists.add(<Timestamp>); deleteSnapshotFilesRequest.setCreateTimestampLists(createTimestampLists); DeleteSnapshotFilesResponse deleteSnapshotFilesResponse= null; try { deleteSnapshotFilesResponse = client.getAcsResponse(deleteSnapshotFilesRequest); } catch (ClientException e) { e.printStackTrace(); } System.out.println(new Gson().toJson(deleteSnapshotFilesResponse));
重要過去1年間にキャプチャされたスナップショットのみ削除できます。
上書きモードでキャプチャされたスナップショットは、OSSコンソールでのみ削除できます。 詳細については、「オブジェクトの削除」をご参照ください。
DeleteSnapshotFiles操作の詳細については、「DeleteSnapshotFiles」をご参照ください。
上記の例では、ApsaraVideo Liveのスナップショット情報とOSSに保存されている対応するスナップショットが削除されています。
DescribeLiveStreamSnapshotInfo操作のみに依存するのではなく、スナップショットイベントのコールバックを構成し、コールバックパラメーターを使用してスナップショットのタイムスタンプを含むスナップショット情報をビジネスシステムに保存することをお勧めします。 これにより、ビジネスシステムからスナップショットのタイムスタンプをクエリして、指定されたポリシーに基づいてスナップショットを削除できます。 たとえば、毎日Nか月前にキャプチャされたスナップショットを削除するようにスケジュールタスクを設定できます。 スナップショットコールバックの詳細については、コールバックの管理トピックの「ライブストリームスナップショットのコールバック」セクションを参照してください。
関連ドキュメント
Java用サーバーSDKの使用方法の詳細については、「Java用サーバーSDKの使用」をご参照ください。
ライブスナップショット機能のAPI操作の詳細については、「ライブスナップショット」をご参照ください。