ApsaraVideo VODコンソールでビデオをアップロードすると、ビデオのサムネイルを設定できます。 ビデオのサムネイルを設定しない場合、ApsaraVideo VODはランダムにビデオスナップショットの1つをサムネイルとして選択します。 動画のアップロード後にサムネイルを変更できます。
概要
ApsaraVideo VODにアップロードする各ビデオにはサムネイルがあります。
ビデオをアップロードするときに画像を設定すると、指定された画像がサムネイルとして使用されます。 ビデオのアップロード時に画像を設定しない場合、ApsaraVideo VODはビデオから最大8つのスナップショットをキャプチャし、スナップショットをサムネイルとして選択します。 詳細については、「ビデオスナップショット」をご参照ください。 動画のアップロード後にサムネイルを変更できます。
前提条件
ApsaraVideo VODが有効化されています。 詳細については、「ApsaraVideo VODの有効化」をご参照ください。
使用するRAMユーザーまたはRAMロールには、ApsaraVideo VODへのアクセス権限が必要です。 Alibaba Cloudアカウントとリソースのセキュリティを向上させるために、RAMユーザーまたはRAMロールを使用してビデオのサムネイルを設定することを推奨します。 詳細については、「RAMユーザーの作成とRAMユーザーへの権限付与」をご参照ください。
ApsaraVideo VODで高速化ドメイン名を設定した場合、高速化ドメイン名に証明書が設定されています。 詳細については、「HTTPSセキュアアクセラレーションの有効化」をご参照ください。
アップロード中のサムネイルの設定
ApsaraVideo VODは複数のアップロード方法をサポートしています。 詳細については、「概要」をご参照ください。 ApsaraVideo VOD APIまたはSDKを使用してビデオをアップロードする場合にのみ、カスタムサムネールを設定できます。 次の内容は、設定について説明します。
CoverURLパラメーターにURLを指定すると、ApsaraVideo VODはURLを保存してユーザーに返します。 CoverURLに指定したURLにアクセスできることを確認してください。
CreateUploadVideo操作を呼び出すときに、CoverURLパラメーターにサムネイルURLを指定します。
UploadMediaByURL操作を呼び出すときに、CoverURLパラメーターにサムネイルURLを指定します。
動画のアップロード後のサムネイルの変更
ビデオがApsaraVideo VODにアップロードされた後、次のいずれかの方法でビデオのサムネイルを変更できます。
通常のサムネイルを設定する
ApsaraVideo VODコンソールの使用
ビデオがApsaraVideo VODにアップロードされた後、ApsaraVideo VODコンソールでビデオサムネイルを変更できます。 ローカル画像またはビデオスナップショットをサムネイルとして使用できます。
ApsaraVideo VODコンソールにログインします。
左側のナビゲーションウィンドウで、[メディアファイル]> [オーディオ /ビデオ] を選択します。
サムネイルを変更するビデオを見つけて、[操作] 列の [管理] をクリックします。
[基本情報] タブで、[ビデオ情報の編集] をクリックします。
自動的にキャプチャされたスナップショットの1つをサムネイルとして選択できます。
[アップロード] をクリックして、ローカル画像をサムネイルとして使用することもできます。
説明JPGまたはPNG形式の画像をアップロードできます。 画像のサイズは1 MBを超えることはできません。解像度は1920 × 1080ピクセルを超えることはできません。
[保存] をクリックします。
サムネイルが変更されているかどうかは、ビデオとオーディオのページで確認できます。
ApsaraVideo VOD APIの使用
動画がApsaraVideo VODにアップロードされた後、次の操作を呼び出して動画のサムネイルを変更できます。
CoverURLパラメーターにURLを指定すると、ApsaraVideo VODはURLを保存してユーザーに返します。 CoverURLに指定したURLにアクセスできることを確認してください。
UpdateVideoInfo操作を呼び出すときに、
CoverURL
パラメーターにサムネイルURLを指定します。UpdateVideoInfos操作を呼び出すときに、
UpdateContent
でCoverURL
パラメーターのサムネイルURLを指定します。Object Storage Service (OSS) バケットに保存されているビデオのサムネイルを変更する場合は、RegisterMedia操作を呼び出すときに、
RegisterMetadata
でCoverURL
パラメーターのサムネイルURLを指定します。
例-ビデオの最初のフレームをサムネイルとして設定する
設定プロセス
ビデオの最初のフレームをキャプチャするためのスナップショットテンプレートを作成します。
ビデオの最初のフレームをキャプチャするスナップショットタスクを作成します。
ビデオサムネイルをビデオの最初のフレームに変更します。
手順
ApsaraVideo VODコンソールの使用
ビデオの最初のフレームをキャプチャするためのスナップショットテンプレートを作成します。
ApsaraVideo VODコンソールにログインします。
左側のナビゲーションウィンドウで、[構成管理]> [メディア処理]> [スナップショットテンプレート] を選択します。
[スナップショットテンプレート] ページで、[テンプレートの追加] をクリックします。 表示されるページで、ビデオの最初のフレームをキャプチャするためのパラメータを設定します。
[テンプレート名] にカスタムテンプレート名を指定し、[スナップショットの種類] を [通常のスナップショット] に、[開始時間] を00:00:00に、[スナップショット数] を1に設定します。 ビジネス要件に基づいて他のパラメーターを指定します。 パラメーターの詳細については、「スナップショットテンプレートの管理」をご参照ください。
[保存] をクリックします。
ビデオの最初のフレームをキャプチャするスナップショットタスクを作成します。
説明ApsaraVideo VODコンソールでスナップショットタスクを作成するには、ワークフローを作成し、ワークフローに [スナップショット] ノードを追加してから、ビデオの最初のフレームをキャプチャするために作成したスナップショットテンプレートを指定する必要があります。 ワークフローの作成方法の詳細については、「ワークフローの管理」をご参照ください。
スナップショットタスクを作成する前に、SnapshotCompleteイベント通知を設定することを推奨します。 これにより、タスクの完了後にコールバックからタスクのステータスやスナップショットURLなどの情報を取得できます。 イベント通知の設定方法の詳細については、「コールバックの設定」をご参照ください。
シナリオ1: アップロード中にスナップショットをキャプチャする
ApsaraVideo VODコンソールにログインします。 左側のナビゲーションウィンドウで、[メディアファイル] > [オーディオ /ビデオ] を選択します。
[ビデオとオーディオ] ページで、[アップロード] をクリックします。 [メディアのアップロード] ページで、[メディアの追加] をクリックします。
[メディアの追加] ダイアログボックスで、アップロード方法、ストレージアドレス、アップロードするファイルを指定します。 次に、ドロップダウンリストから [ワークフローの使用] を選択し、ビデオの最初のフレームをキャプチャするために作成したワークフローを選択します。
[アップロード] をクリックします。
シナリオ2: アップロード後にスナップショットをキャプチャする
ApsaraVideo VODコンソールにログインします。 左側のナビゲーションウィンドウで、[メディアファイル] > [オーディオ /ビデオ] を選択します。
[ビデオとオーディオ] ページで、スナップショットをキャプチャするファイルを見つけ、[操作] 列の [メディア処理] をクリックします。
[メディア処理] ダイアログボックスで、ビデオの最初のフレームをキャプチャするために作成したワークフローに対して、[処理タイプ] を [ワークフローの使用] および [ワークフロー] に設定します。
[OK] をクリックします。
スナップショットタスクの結果を取得する
スナップショットタスクを作成する前にSnapshotCompleteイベント通知を設定すると、タスクの完了後にコールバックからタスクのステータスやスナップショットURLなどの情報を取得できます。
スナップショットタスクを作成する前にSnapshotCompleteイベント通知を構成しない場合は、ラウンドロビン方式を使用してListSnapshots操作を呼び出し、タスクのステータスやスナップショットURLなどの情報を取得できます。
ビデオサムネイルをビデオの最初のフレームに変更します。
説明ApsaraVideo VODコンソールでビデオのサムネイルを変更できるのは、ビデオがアップロードされた後です。 ビデオの最初のフレームをサムネイルとして使用するには、ステップ2でキャプチャしたスナップショットをローカルデバイスに保存する必要があります。
ApsaraVideo VODコンソールにログインします。 左側のナビゲーションウィンドウで、[メディアファイル] > [オーディオ /ビデオ] を選択します。
[ビデオとオーディオ] ページで、サムネイルを変更するビデオを見つけ、[操作] 列の [管理] をクリックします。
[基本情報] タブで、[ビデオ情報の編集] をクリックします。
表示されるページで、[アップロード] をクリックし、ステップ2でローカルデバイスからキャプチャしたスナップショットを選択し、[開く] をクリックします。
[保存] をクリックします。
ビデオとオーディオのページで、ビデオのサムネイルが変更されているかどうかを確認できます。
ApsaraVideo VOD APIの使用
次のセクションでは、API操作を呼び出してビデオのサムネイルを設定する方法とサンプルコードについて説明します。 ApsaraVideo VOD SDK for Javaを例として使用します。
手順
ビデオの最初のフレームをキャプチャするためのスナップショットテンプレートを作成します。
AddVodTemplate操作を呼び出して、ビデオの最初のフレームをキャプチャするためのスナップショットテンプレートを作成します。 サンプルコード:
import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.vod.model.v20170321.AddVodTemplateRequest; import com.aliyuncs.vod.model.v20170321.AddVodTemplateResponse; /** * Note: * 1. The following sample code is used to create a snapshot template for capturing the first frame of a video and export an image. * 2. We recommend that you create a snapshot template in the ApsaraVideo VOD console. */ public class AddSnapshotTemplate { // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. // We recommend that you do not include your AccessKey pair (AccessKey ID and AccessKey secret) in your project code. Otherwise, the AccessKey pair may be leaked and the security of all resources within your account may be compromised. // In this example, ApsaraVideo VOD reads the AccessKey pair from the environment variables to implement identity verification for API access. Before you run the sample code, configure the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET. public static String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); public static String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); public static void main(String[] args) { try{ DefaultAcsClient vodClient = initVodClient(accessKeyId, accessKeySecret); AddVodTemplateResponse response = addSnapshotTemplate(vodClient); System.out.println("RequestId is:" + response.getRequestId()); System.out.println("TemplateId is:" + response.getVodTemplateId()); }catch (Exception e){ } } public static AddVodTemplateResponse addSnapshotTemplate(DefaultAcsClient vodClient) throws ClientException { AddVodTemplateRequest request = new AddVodTemplateRequest(); request.setName("First-frame snapshot template"); request.setTemplateType("Snapshot"); request.setTemplateConfig("{\"SnapshotType\":\"NormalSnapshot\",\"SnapshotConfig\":{\"FrameType\":\"normal\",\"Count\":1,\"Interval\":1,\"SpecifiedOffsetTime\":0}}"); return vodClient.getAcsResponse(request); } public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException { // The region in which ApsaraVideo VOD is activated. String regionId = "cn-shanghai"; DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret); DefaultAcsClient client = new DefaultAcsClient(profile); return client; } }
ビデオの最初のフレームをキャプチャするスナップショットタスクを作成します。
SubmitSnapshotJob操作を呼び出して、スナップショットタスクを送信します。 サンプルコード:
import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.vod.model.v20170321.*; /** * Note: * 1. The following sample code is used to create a snapshot task after you create a snapshot template for capturing the first frame of a video. * 2. After you upload a video to ApsaraVideo VOD, you can create a snapshot task for the video only after the VideoAnalysisComplete event callback is returned. This is not required for existing videos that are in the normal state. * 3. Snapshot tasks are asynchronously processed. We recommend that you query the snapshot URL after the SnapshotComplete event callback is returned. * 4. You can obtain the output URL of the snapshot from the SnapshotRegular parameter in the callback. For more information, see the "Generation of snapshot URLs" section of the SnapshotComplete topic. * 5. If you do not enable the callback feature, you can call the ListSnapshots operation to query the most recent snapshot information. For more information, see ListSnapshots. */ public class SubmitSnapshotJob { // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. // We recommend that you do not include your AccessKey pair (AccessKey ID and AccessKey secret) in your project code. Otherwise, the AccessKey pair may be leaked and the security of all resources within your account may be compromised. // In this example, ApsaraVideo VOD reads the AccessKey pair from the environment variables to implement identity verification for API access. Before you run the sample code, configure the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET. public static String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); public static String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); public static void main(String[] args) { try{ DefaultAcsClient vodClient = initVodClient(accessKeyId, accessKeySecret); SubmitSnapshotJobResponse response = submitSnapshotJob(vodClient); System.out.println("RequestId is:" + response.getRequestId()); System.out.println("JobId is:" + response.getSnapshotJob().getJobId()); }catch (Exception e){ } } public static SubmitSnapshotJobResponse submitSnapshotJob(DefaultAcsClient vodClient) throws ClientException { SubmitSnapshotJobRequest request = new SubmitSnapshotJobRequest(); request.setVideoId("a42b**********633b79f0102"); request.setSnapshotTemplateId("1f27a7**********eba2756"); // Optional. The custom pass-through parameters. This parameter is used to identify the snapshot of the first frame. You can use the parameter in event callbacks. request.setUserData("{\"Extend\":{\"SnapshotType\":\"FirstFrame\",\"VideoId\":\"a42bf540********33b79f0102\"}}"); return vodClient.getAcsResponse(request); } public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException { // The region in which ApsaraVideo VOD is activated. String regionId = "cn-shanghai"; DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret); DefaultAcsClient client = new DefaultAcsClient(profile); return client; } // Call the ListSnapshots operation to query snapshots. public static ListSnapshotsResponse listSnapshots(DefaultAcsClient vodClient) throws ClientException { ListSnapshotsRequest request = new ListSnapshotsRequest(); request.setVideoId("a42bf540b1b371ed804a6633b79****"); request.setSnapshotType("NormalSnapshot"); ListSnapshotsResponse response = vodClient.getAcsResponse(request); System.out.println("RequestId is:" + response.getRequestId()); System.out.println("SnapshotUrl is:" + response.getMediaSnapshot().getSnapshots().get(0).getUrl()); return vodClient.getAcsResponse(request); } }
ビデオサムネイルをビデオの最初のフレームに変更します。
次のコンテンツでは、ビデオのアップロード後にビデオサムネイルを変更する方法について説明します。 他のシナリオでビデオサムネイルを設定する方法の詳細については、「アップロード中にサムネイルを設定する」および「ビデオのアップロード後にサムネイルを変更する」をご参照ください。
アップロードしたビデオのサムネイルを変更するには、UpdateVideoInfo操作を呼び出し、CoverURLパラメーターを設定します。 サンプルコード:
package com.alibaba.bltest.transcode; import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.vod.model.v20170321.UpdateVideoInfoRequest; import com.aliyuncs.vod.model.v20170321.UpdateVideoInfoResponse; /** * Note: * 1. The following sample code is used to change the thumbnail of a video. For more information about how to modify other video parameters, see the documentation of the UpdateVideoInfo operation. * 2. Make sure that the thumbnail URL that you specify is accessible. */ public class UpdateVideoInfo { // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. // We recommend that you do not include your AccessKey pair (AccessKey ID and AccessKey secret) in your project code. Otherwise, the AccessKey pair may be leaked and the security of all resources within your account may be compromised. // In this example, ApsaraVideo VOD reads the AccessKey pair from the environment variables to implement identity verification for API access. Before you run the sample code, configure the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET. public static String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); public static String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); public static void main(String[] args) { try{ DefaultAcsClient vodClient = initVodClient(accessKeyId, accessKeySecret); UpdateVideoInfoResponse response = updateVideoInfo(vodClient); System.out.println("RequestId is:" + response.getRequestId()); }catch (Exception e){ } } public static UpdateVideoInfoResponse updateVideoInfo(DefaultAcsClient vodClient) throws ClientException { UpdateVideoInfoRequest request = new UpdateVideoInfoRequest(); request.setVideoId("a42b***********33b79f0102"); // Set CoverURL to the URL of the image that is generated by the snapshot task for capturing the first frame of the video. request.setCoverURL("http://demo.aliyuncdn.com/a42bf5******40b1b37/snapshots/normal/41B7AF54-18672BB301D-1748-0984-309-112420****.jpg"); return vodClient.getAcsResponse(request); } public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException { // Specify the region in which ApsaraVideo VOD is activated. String regionId = "cn-shanghai"; DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret); DefaultAcsClient client = new DefaultAcsClient(profile); return client; } }
完全なサンプルコード
package com.alibaba.bltest.transcode;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.vod.model.v20170321.*;
import org.apache.commons.lang3.StringUtils;
/**
* Note:
* 1. The following sample code is used to capture a video snapshot and change the video thumbnail. You can modify the code based on your business requirements.
* 2. You must add specific logic to the following sample code before you can use the code.
* 3. The following sample code is for reference only. You can use other methods to capture a video snapshot and modify the video thumbnail.
*/
public class SnapshotAndUpdateCover {
// The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M.
// We recommend that you do not include your AccessKey pair (AccessKey ID and AccessKey secret) in your project code. Otherwise, the AccessKey pair may be leaked and the security of all resources within your account may be compromised.
// In this example, ApsaraVideo VOD reads the AccessKey pair from the environment variables to implement identity verification for API access. Before you run the sample code, configure the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET.
public static String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
public static String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
public static void main(String[] args) {
try{
DefaultAcsClient vodClient = initVodClient(accessKeyId, accessKeySecret);
// The video ID.
String videoId = "a42bf540b1b37*******b79f0102";
// Scenario 1: The callback feature is enabled or Message Service (MNS) is activated
// You can set the thumbnail of a newly uploaded video only after the VideoAnalysisComplete callback is returned.
// To set the thumbnail of an existing video, call the submitSnapshotJob operation.
submitSnapshotJob(vodClient,videoId);
// After the SnapshotComplete callback is returned, obtain the snapshot type and the snapshot URL.
JSONObject callBackMessage = new JSONObject(); // Specify the callback message.
String snapshotType = callBackMessage.getJSONObject("UserData").getJSONObject("Extend").getString("SnapshotType");
if("FirstFrame".equals(snapshotType)){
// Specify the path in which the snapshot is stored based on your business requirements.
String coverUrl = callBackMessage.getJSONArray("SnapshotInfos").getJSONObject(0).getString("SnapshotRegular").replace("{SnapshotCount}","00001");
// Change the video thumbnail.
updateVideoInfo(vodClient,videoId,coverUrl);
}
// Scenario 2: The callback feature is not enabled and MNS is not activated
// To set the thumbnail of a newly uploaded video, use the round-robin method to obtain the video status.
String videoStatus = "";
while(!"Normal".equals(videoStatus)){
videoStatus = getVideoInfo(vodClient,videoId);
Thread.sleep(1000);
}
// To set the thumbnail of an existing video, call the submitSnapshotJob operation.
submitSnapshotJob(vodClient,videoId);
// Use the round-robin method to obtain the result of the snapshot task.
String coverUrl = "";
while(StringUtils.isBlank(coverUrl)){
coverUrl = listSnapshots(vodClient,videoId);
Thread.sleep(1000);
}
// Change the video thumbnail.
updateVideoInfo(vodClient,videoId,coverUrl);
}catch (Exception e){
}
}
/**
* Submit a snapshot task
*/
public static SubmitSnapshotJobResponse submitSnapshotJob(DefaultAcsClient vodClient, String vid) throws ClientException {
SubmitSnapshotJobRequest request = new SubmitSnapshotJobRequest();
request.setVideoId(vid);
request.setSnapshotTemplateId("1f27a7f*********70eba2756");
// Optional. The custom pass-through parameters. This parameter is used to identify the snapshot of the first frame. You can use the parameter in event callbacks.
request.setUserData("{\"Extend\":{\"SnapshotType\":\"FirstFrame\",\"VideoId\":\"a42bf540********33b79f0102\"}}");
return vodClient.getAcsResponse(request);
}
/**
* Change the video thumbnail
*/
public static UpdateVideoInfoResponse updateVideoInfo(DefaultAcsClient vodClient, String vid, String coverUrl) throws ClientException {
UpdateVideoInfoRequest request = new UpdateVideoInfoRequest();
request.setVideoId(vid);
// Set CoverURL to the URL of the image that is generated by the snapshot task for capturing the first frame of the video.
request.setCoverURL(coverUrl);
return vodClient.getAcsResponse(request);
}
/**
* Initialize the SDK instance
*/
public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException {
// Specify the region in which ApsaraVideo VOD is activated.
String regionId = "cn-shanghai";
DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
DefaultAcsClient client = new DefaultAcsClient(profile);
return client;
}
/**
* Query the captured snapshots.
*/
public static String listSnapshots(DefaultAcsClient vodClient, String vid) throws ClientException {
ListSnapshotsRequest request = new ListSnapshotsRequest();
request.setVideoId(vid);
request.setSnapshotType("NormalSnapshot");
ListSnapshotsResponse response = vodClient.getAcsResponse(request);
String coverUrl = "";
System.out.println("RequestId is:" + response.getRequestId());
try{
coverUrl = response.getMediaSnapshot().getSnapshots().get(0).getUrl();
System.out.println("SnapshotUrl is:" + response.getMediaSnapshot().getSnapshots().get(0).getUrl());
}catch (NullPointerException e){
}
return coverUrl;
}
/**
* Query information about a video.
*/
public static String getVideoInfo(DefaultAcsClient vodClient, String vid) throws ClientException {
GetVideoInfoRequest request = new GetVideoInfoRequest();
request.setVideoId(vid);
GetVideoInfoResponse response = vodClient.getAcsResponse(request);
System.out.println("RequestId is:" + response.getRequestId());
String videoStatus = "";
try{
videoStatus = response.getVideo().getStatus();
System.out.println("Video Status is:" + response.getVideo().getStatus());
}catch (NullPointerException e){
}
return videoStatus;
}
}