ビデオのスナップショット機能を使用すると、ビデオの特定の時点での特定のサイズのスナップショットをキャプチャできます。スナップショットは、ビデオのサムネイル、スプライト、プログレスバーのサムネイルなどのシナリオで使用されます。 スナップショットジョブは、ApsaraVideo Media Processing(MPS)コンソール、API、または SDK を使用して送信できます。 このトピックでは、MPS SDK for Go V2.0 を使用してスナップショットジョブを送信およびクエリする方法の例を示します。 スナップショットをキャプチャする時点、連続する 2 つの スナップショット間のインターバル、キャプチャする スナップショットの数、キャプチャする スナップショットのタイプ、および複数の スナップショットを 1 つの画像スプライトに合成するかどうかを指定できます。
前提条件
SDK クライアントが初期化されていること。 詳細については、クライアントの初期化をご参照ください。
スナップショットジョブの送信
SubmitSnapshotJob オペレーションを呼び出して、スナップショットジョブを送信できます。
package main
import (
"encoding/json"
"strings"
"fmt"
"os"
mts20140618 "github.com/alibabacloud-go/mts-20140618/v6/client"
openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
util "github.com/alibabacloud-go/tea-utils/v2/service"
"github.com/alibabacloud-go/tea/tea"
)
// 説明:
//
// AccessKey ID と AccessKey シークレットを使用してクライアントを初期化します。
//
// @return Client
//
// @throws Exception
func CreateClient () (_result *mts20140618.Client, _err error) {
config := &openapi.Config{
// 必須。 ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
// 必須。 ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
}
config.Endpoint = tea.String("mts.cn-hangzhou.aliyuncs.com")
_result = &mts20140618.Client{}
_result, _err = mts20140618.NewClient(config)
return _result, _err
}
func _main (args []*string) (_err error) {
client, _err := CreateClient()
if _err != nil {
return _err
}
submitSnapshotJobRequest := &mts20140618.SubmitSnapshotJobRequest{
Input: tea.String("{\"Bucket\":\"example-bucket\",\"Location\":\"example-location\",\"Object\":\"example%2Ftest.flv\"}"),
SnapshotConfig: tea.String("{\"OutputFile\":{\"Bucket\":\"example-001\",\"Location\":\"example-location\",\"Object\":\"{Count}.jpg\"},\"Time\":\"5\",\"Num\":\"10\",\"Interval\":\"20\"}"),
}
runtime := &util.RuntimeOptions{}
tryErr := func()(_e error) {
defer func() {
if r := tea.Recover(recover()); r != nil {
_e = r
}
}()
// 必要に応じて、API オペレーションのレスポンスを表示するための独自のコードを記述します。
_, _err = client.SubmitSnapshotJobWithOptions(submitSnapshotJobRequest, runtime)
if _err != nil {
return _err
}
return nil
}()
if tryErr != nil {
var error = &tea.SDKError{}
if _t, ok := tryErr.(*tea.SDKError); ok {
error = _t
} else {
error.Message = tea.String(tryErr.Error())
}
// 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトで例外を無視しないでください。 この例では、エラーメッセージは参照用にのみ表示されます。
// エラーメッセージ。
fmt.Println(tea.StringValue(error.Message))
// 対応するエラー診断ページの URL。
var data interface{}
d := json.NewDecoder(strings.NewReader(tea.StringValue(error.Data)))
d.Decode(&data)
if m, ok := data.(map[string]interface{}); ok {
recommend, _ := m["Recommend"]
fmt.Println(recommend)
}
_, _err = util.AssertAsString(error.Message)
if _err != nil {
return _err
}
}
return _err
}
func main() {
err := _main(tea.StringSlice(os.Args[1:]))
if err != nil {
panic(err)
}
}
スナップショットジョブの結果のクエリ
QuerySnapshotJobList オペレーションを呼び出して、スナップショットジョブの結果をクエリできます。
package main
import (
"encoding/json"
"strings"
"fmt"
"os"
mts20140618 "github.com/alibabacloud-go/mts-20140618/v6/client"
openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
util "github.com/alibabacloud-go/tea-utils/v2/service"
"github.com/alibabacloud-go/tea/tea"
)
// 説明:
//
// AccessKey ID と AccessKey シークレットを使用してクライアントを初期化します。
//
// @return Client
//
// @throws Exception
func CreateClient () (_result *mts20140618.Client, _err error) {
config := &openapi.Config{
// 必須。 ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
// 必須。 ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
}
config.Endpoint = tea.String("mts.cn-hangzhou.aliyuncs.com")
_result = &mts20140618.Client{}
_result, _err = mts20140618.NewClient(config)
return _result, _err
}
func _main (args []*string) (_err error) {
client, _err := CreateClient()
if _err != nil {
return _err
}
querySnapshotJobListRequest := &mts20140618.QuerySnapshotJobListRequest{}
runtime := &util.RuntimeOptions{}
tryErr := func()(_e error) {
defer func() {
if r := tea.Recover(recover()); r != nil {
_e = r
}
}()
// 必要に応じて、API オペレーションのレスポンスを表示するための独自のコードを記述します。
_, _err = client.QuerySnapshotJobListWithOptions(querySnapshotJobListRequest, runtime)
if _err != nil {
return _err
}
return nil
}()
if tryErr != nil {
var error = &tea.SDKError{}
if _t, ok := tryErr.(*tea.SDKError); ok {
error = _t
} else {
error.Message = tea.String(tryErr.Error())
}
// 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトで例外を無視しないでください。 この例では、エラーメッセージは参照用にのみ表示されます。
// エラーメッセージ。
fmt.Println(tea.StringValue(error.Message))
// 対応するエラー診断ページの URL。
var data interface{}
d := json.NewDecoder(strings.NewReader(tea.StringValue(error.Data)))
d.Decode(&data)
if m, ok := data.(map[string]interface{}); ok {
recommend, _ := m["Recommend"]
fmt.Println(recommend)
}
_, _err = util.AssertAsString(error.Message)
if _err != nil {
return _err
}
}
return _err
}
func main() {
err := _main(tea.StringSlice(os.Args[1:]))
if err != nil {
panic(err)
}
}