このトピックでは、さまざまなプラットフォームにわたる ApsaraVideo Player SDK に関する一般的な質問とその解決策について説明します。
標準ライブストリーミングにおける RTMP と HTTP-FLV の比較
以下の理由から、HTTP-FLV の使用を推奨します。
ApsaraVideo Live コンソールで URL を生成すると、RTMP と HTTP-FLV の両方の URL が作成されます。データは両方のプロトコルで同じです。唯一の違いはネットワークプロトコルです。
HTTP はインターネットの主要なプロトコルです。CDN、通信事業者、中間ネットワークデバイスなどのネットワークリンクは、長年にわたって HTTP に最適化されてきました。デフォルトの HTTP ポート 80 と 443 も一般的なホワイトリスト登録ポートであり、無効にされる可能性は低いです。RTMP プロトコルはより古く、そのデフォルトポート 1935 はファイアウォールなどのデバイスによってブロックされることが多く、再生の問題を引き起こす可能性があります。
一般的な Player SDK API の使用に関する注意事項
iOS での再生位置の取得:
onCurrentPositionUpdateコールバックのpositionパラメーターを使用します。シーク操作後は、AVPEventSeekEndイベントを待機してから位置を取得してください。getPlayTime() の戻り値: このメソッドは、一時停止やシークを除く再生時間を秒単位で返します。時間は早送り中でもリアルタイムで計算されます。
画質切り替えの失敗:
selectTrackが失敗した場合、一時的な代替としてsetQuality+setStartTime+prepareを使用できます。replayByVidAndPlayAuth によるビデオの切り替え: 古いバージョンの iOS でプライベート暗号化をサポートするには、
swScriptURL(絶対 HTTPS アドレス) を明示的に渡す必要があります。開始時間の設定: これにより、ユーザーがプログレスバーで手動でシークするのを防ぐことはできません。
バッファのクリーンアップ: SDK は現在、実行時にバッファを動的にクリアする API を提供していません。
再生失敗
ApsaraVideo VOD の再生失敗
再生は、ストリームエンコーディング、ネットワークエンドポイント、CDN、フォーマット、またはストレージバケットの問題により失敗する可能性があります。原因を特定するには、プレーヤーのエラーメッセージとネットワークリクエストを確認してください。一般的な問題と解決策は次のとおりです。
料金の支払い遅延:アカウントの残高を確認してください。アカウントの支払いが遅延している場合、ビデオは再生できません。
ネットワーククライアントの問題:ビデオの再生に失敗し、エラーコード
4400が返されます。エラーコード4400は、サーバーまたはネットワークの問題によりリソースをロードできないことを示します。SSL 証明書が設定されているか、HTTPS 証明書の有効期限が切れている、または無効になっていないかを確認してください。フォーマットの問題:ビデオフォーマットがプレーヤーと互換性がありません。ApsaraVideo VOD でサポートされている再生フォーマットの詳細については、「Player SDKの機能」をご参照ください。
説明認証付きの M3U8 ファイルを再生するには、カスタムドメイン名を使用する必要があります。ドメイン名を追加するには、「アクセラレーションドメイン名の追加」をご参照ください。
バケットの問題:設定されたストレージバケットが無効であるか、プライベートバケットの URL 署名の有効期限が切れています。これにより再生が失敗します。これを解決するには、バケットの URL 署名を無効にし、その権限を public-read に設定します。
クロスドメインの問題:アクセラレーションドメイン名のリージョンがビデオ再生リージョンと同じであるかを確認してください。異なる場合、再生は失敗します。新しいアクセラレーションドメイン名を作成するか、元のドメイン名のリージョンを変更できます。
GetPlayInfo エラー:ビデオステータスが無効またはレビュー中
再生情報を正常に取得するには、ビデオのメインステータス (Status) が Normal (通常) であり、そのレビュー ステータス (AuditStatus) が Normal (通常) である必要があります。ビデオステータスが UploadSucc (アップロードは成功したがトランスコーディングが未完了) であるか、AuditStatus が Init (レビュー中) である場合、再生情報を取得する前にトランスコーディングが完了し、レビューが承認されるまで待つ必要があります。GetVideoInfo API を使用してビデオの最新ステータスを照会し、グローバルレビュー設定がレビューの進行に影響を与えていないか確認することを推奨します。
ローカル M3U8 ビデオ再生時のエラー
M3U8 ファイルには、複数のトランスポートストリーム (TS) セグメントが含まれています。ローカルで再生する場合、これらのセグメントは M3U8 ファイル内に正しい相対パスでローカルに存在している必要があり、リモート URL はサポートされていません。
M3U8 インデックスファイルとそれに対応する .ts セグメントファイル (例:000000.ts、000001.ts など) は、同じディレクトリに配置する必要があります。
ローカルの M3U8 ファイルは、このディレクトリ構造に従う必要があります。
外部再生の失敗
次のように問題をトラブルシューティングします。
ビデオが ApsaraVideo VOD にまだ存在するかどうかを確認します。
アクセラレーションドメイン名が追加されているかどうかを確認します。
アクセラレーションドメイン名が追加されていない場合:ストレージバケットの権限を確認します。ストレージバケットがプライベートかどうかを確認します。プライベートの場合、認証が必要です。ビデオを直接再生するには、認証を無効にし、バケットの権限を public-read に設定します。バケットを public-read に設定すると、セキュリティリスクが生じることに注意してください。
アクセラレーションドメイン名が追加されている場合:認証が有効になっているかどうかを確認します。有効になっている場合は、認証の有効期間を延長するか、認証を無効にすることができます。認証を無効にすると、セキュリティリスクが生じることに注意してください。
再生の例外
音声が出ない問題
ApsaraVideo Player は Alibaba Cloud 製品に最適化されています。他のソース URL を使用すると、ビデオは再生されても音声が出ない場合があります。この問題が発生した場合は、まずプレーヤーが使用している再生ソースを確認してください。
Web プレーヤーのスタイルとコンポーネントの問題
アイコンの欠落: ローカル展開中にアイコンが欠落している場合、
/skins/default/ディレクトリ全体をダウンロードするか、CSS 内の相対アイコンパスを CDN アドレスに変更する必要があります。QualityComponent での解像度切り替えエラー:
t.getQuality is not a functionエラーが報告された場合、設定にargsコールバック関数を追加し、aliplayercomponentsをバージョン 1.1.2 以降にアップグレードしてください。カバー画像がプログレスバーに重なる: vid + playAuth モードでは、CSS で
.prism-coverを非表示にするか、autoplayとmutedを有効にすることでこの問題を回避できます。WeChat の組み込みブラウザの互換性: WeChat の組み込みブラウザでの HLS 互換性の問題については、
useHlsNative: falseを設定して fMP4 ソリューションを強制的に使用してください。
ビデオ起動の遅延
MP4 ビデオの起動が遅い場合、ソースビデオ内で moov アトム (オーディオとビデオのデータインデックス) が mdat アトム (オーディオとビデオのデータ) の後にある可能性があります。ビデオをトランスコーディングして moov アトムを mdat アトムの前に移動させることができます。これにより、再生の解析が高速化されます。
ビデオのトランスコーディングの詳細については、「推奨されるトランスコーディングテンプレート」をご参照ください。
moov アトムの位置を確認するには、次のコマンドを実行します。
# ソース動画の URL は、ローカルファイルパスまたはオンライン URL (例: http://pla****.alicdn.com/video/aliyunmedia.mp4) を指定できます ffmpeg -v trace -i "source_video_url" 2>&1 | grep -e type:\'mdat\' -e type:\'moov\'通常のシナリオでは、
moov アトムはmdat アトムの前にあり、これは高速起動が最適化されていることを示します。 出力例を以下に示します。異常なシナリオでは、
moov アトムはmdat アトムの後にあります。
ApsaraVideo Player SDK for Android と ApsaraVideo Player SDK for iOS の場合、ApsaraVideo VOD はミリ秒レベルの起動ソリューションを提供します。このソリューションは、ビデオの起動速度を大幅に向上させます。詳細については、「ApsaraVideo Playerを使用して高速読み込みの全画面再生を実現する」をご参照ください。
暗号化されたビデオの再生
DRM 暗号化ビデオのブラウザでの再生不可
ApsaraVideo Player for Web で DRM で暗号化されたビデオを再生するには、ブラウザの制限が適用されます。サポートされているブラウザの詳細については、「機能の互換性」をご参照ください。
HLS 暗号化のための MtsHlsUriToken
MtsHlsUriToken パラメーターはカスタムパラメーターです。標準の HLS 暗号化では、暗号化文字列が HLS ストリームに書き込まれた後、復号サーバーのアドレスが M3U8 マニフェストに追加されます。特定のユーザーのみがビデオにアクセスできるようにするには、復号サーバーに ID 認証メカニズムが必要です。MtsHlsUriToken パラメーターは、復号サーバーに認証レイヤーを追加します。その後、この認証ロジックに基づいて特別なパラメーターが生成され、復号検証のために渡されます。
暗号化を設定する際には、MtsHlsUriToken を生成するためのトークン発行サービスを構築する必要があります。詳細については、「HLS 暗号化 - ステップ4」をご参照ください。
クロスドメイン再生
中国本土から海外リージョンビデオを読み込む際の遅延
中国本土から英国 (ロンドン) リージョンへのアクセスは、距離があるため遅くなります。パフォーマンスを向上させるには、アクセラレーションドメイン名を追加し、Global Accelerator を使用します。
海外再生時のアクセス遅延とカクつき
再生中のカクつきは、通常、不安定なネットワークが原因です。カクつきがプレーヤーエラーを引き起こすほど長い場合は、CDN の不安定性に関連している可能性があります。カクつきが頻繁に発生する場合は、ネットワークリクエストを確認してください。ネットワーク速度がビデオのビットレートと一致していない可能性があります。ネットワーク速度を上げるか、ビットレートを下げる必要があるかもしれません。
OSS ビデオの再生
OSS ビデオの再生中に過剰なリクエストが発生する
ソースビデオに問題がないか確認してください。たとえば、プレーヤーがソースビデオをデコードする際に多数の重複リクエストを送信していないかを確認します。ApsaraVideo VOD のトランスコーディングテンプレートを使用して、再生前にビデオをトランスコーディングできます。詳細については、「ビデオとオーディオのトランスコーディング」をご参照ください。
画像リソースをダウンロードせずにプレビューする
ApsaraVideo VOD に保存されている画像をダウンロードせずにプレビューするには、カスタムドメイン名を使用する必要があります。ApsaraVideo VOD にカスタムドメイン名を追加できます。詳細については、「アクセラレーションドメイン名の追加」をご参照ください。
SSL 証明書
一部のコンピューターでエラーコード 4400 が表示され、動画再生に失敗する
エラーコード4400 は、サーバーまたはネットワークの問題、あるいはサポートされていないフォーマットのためにリソースを読み込めないことを示します。SSL 証明書が設定されているかどうかを確認してください。
再生 URL
短い再生 URL
ビデオのストレージバケットの権限がプライベートの場合、その再生 URL には認証文字列が含まれ、長い URL になります。権限が public-read または public-read-write の場合、再生 URL には認証文字列が含まれず、短い URL になります。ストレージバケットの権限とその変更方法の詳細については、「ストレージバケットの管理」をご参照ください。
ストレージバケットの権限を public-read または public-read-write に設定すると、ホットリンクや不正なダウンロードのリスクが生じます。この設定は推奨されません。
トランスコーディングされていない HLS 形式のビデオの再生失敗
ApsaraVideo Player をビデオ ID (VID) と再生認証情報で使用する場合、トランスコーディングされたビデオのみを再生できます。トランスコーディングされていないビデオは、URL を使用してのみ再生できます。GetMezzanineInfo API を呼び出してソースビデオの URL を取得するか、ApsaraVideo VOD コンソールにログインしてビデオ URL を表示できます。
ApsaraVideo VOD 再生 URL の永続性
ビデオのストレージバケットの権限がプライベートの場合、その再生 URL は期間限定で有効です。再生 URL 内のauth_key認証文字列は、設定された有効期限に基づいて変化します。
永続的な再生アドレスを取得するには、ビデオのストレージバケットの権限を public-read または public-read-write に変更する必要があります。生成された再生アドレスの ? 文字より前の部分は、無期限に再生に使用できる永続的なアドレスです。ストレージバケットの権限とその変更方法の詳細については、「ストレージバケットの管理」をご参照ください。
ストレージバケットの権限を public-read または public-read-write に設定すると、ホットリンクや不正なダウンロードのリスクが生じます。この設定は推奨されません。
再生 URL がブラウザにリダイレクトされる場合
再生はブラウザとデバイスのデコード能力に依存するため、しばしばブラウザへのリダイレクトが発生します。
更新されたビデオが表示されない場合
ビデオを更新した後、URL を更新して最新のデータを取得する必要があります。ApsaraVideo VOD コンソールで URL を更新するには、「更新とプリフェッチ」をご参照ください。API または SDK を使用して URL を更新するには、「PreloadVodObjectCaches」または「RefreshMediaPlayUrls」をご参照ください。
プレーヤーからフレームピクセルを取得する
ApsaraVideo Player for Android:
OnRenderFrameCallbackコールバックを待機することでピクセルを取得できます。ApsaraVideo Player for iOS:
onRenderingFrameコールバックを待機することでピクセルを取得できます。player.renderingDelegate = self; #pragma mark CicadaRenderingDelegate - (BOOL)onRenderingFrame:(CicadaFrameInfo*) frameInfo{ if(frameInfo.frameType==Cicada_FrameType_Video){ // ビデオ NSLog(@"receive HW frame:%p pts:%ld foramt %d", frameInfo.video_pixelBuffer, frameInfo.pts, CVPixelBufferGetPixelFormatType(frameInfo.video_pixelBuffer)); } else if (frameInfo.frameType==Cicada_FrameType_Audio){ // オーディオ } return NO; }ApsaraVideo Player for Web: この機能はサポートされていません。
AVI ビデオの再生 URL を取得できない場合
GetPlayInfo API は AVI 形式のビデオストリームの取得をサポートしていません。したがって、この API を利用する SDK は AVI 形式のビデオストリームを取得できません。
ApsaraVideo VOD コンソールで AVI ビデオの再生 URL を表示できます。詳細については、「オーディオまたはビデオファイルのクエリ」をご参照ください。
GetPlayInfo エラー:「The video has no stream to play for the request parameter」
このエラーは、API エラーコード InvalidVideo.NoneStream (「The video has no stream to play for the request parameter」) に対応します。プレーヤー SDK では、このエラーはエラーコード 31027 として報告されます。
次のように問題をトラブルシューティングできます。
メディアアセットのストレージクラスが Standard であることを確認します。
デフォルトでは、GetPlayInfo API は Standard ストレージクラスのメディアアセットの再生ストリームのみを返します。他のストレージクラスのメディアアセットの再生ストリームを取得するには、
PlayConfigパラメーターのStorageClassパラメーターを All に設定します。StorageClassの他の有効な値には、Standard、IA(低頻度アクセス)、Archive、ColdArchive、SourceIA(ソース低頻度アクセス)、SourceArchive(ソースアーカイブ)、SourceColdArchive(ソースコールドアーカイブ)、Changing(メディアアセットステータス変更中)、およびSourceChanging(ソースファイルステータス変更中) があります。空の値はフィルタリングなしを示します。メディアアセットにトランスコーディングされたストリームがあることを確認します。
トランスコーディングされたストリームを取得するには、まずビデオとオーディオのトランスコーディングを実行し、その後 GetPlayInfo API を呼び出す必要があります。ソースストリーム URL を取得するには、「GetMezzanineInfo」をご参照ください。
ビデオフォーマットが MOV であるかどうかを確認します。
MOV のアップロードはサポートされていますが、デフォルトでは ApsaraVideo VOD は MOV ファイルをトランスコーディングしません。その結果、GetPlayInfo API は再生ストリームを返すことができず、プレーヤー SDK はエラーコード 31027 を報告します。ビデオが MOV 形式でトランスコーディングされていない場合は、GetMezzanineInfo API を呼び出してソースファイル情報 (ソースファイル URL やメタデータなど) を取得してください。
カクつき
ビデオのカクつきを減らし、キャッシュヒット率を向上させる
URL 署名の設定、コンテンツの更新とプリフェッチ、キャッシングの設定、およびパラメーターのフィルタリングにより、キャッシュヒット率を向上させることができます。
シーク時のカクつき
ビデオのキーフレームが少なすぎると、プレーヤーがフレームを見つけるためにより大きなビデオセグメントをデコードする必要があるため、シークが遅くなります。これによりカクつきが発生します。この場合、ビデオをトランスコーディングしてキーフレームを追加し、カクつきを減らすことができます。トランスコーディングの詳細については、「ビデオとオーディオのトランスコーディング」をご参照ください。
H.266 デコーダープラグイン
エラー0x200600001 MEDIA_PLAYER_ERROR_CODEC_VIDEO_NOT_SUPPORT
メッセージが vvc plugin not enabled の場合、プラグインがアプリケーションで有効になっていないことを意味します。AliPlayerGlobalSettings.enableCodecPlugin メソッドを呼び出して有効にしてください。
メッセージが vvc plugin not loaded の場合、プラグインが正常に統合されなかったことを示します。プラグインライブラリがプロジェクトに正常にインポートされているかを確認するか、明示的に loadlibrary を呼び出してプラグインが正常にロードされるようにしてください。
エラー0x50020002 MEDIA_PLAYER_ERROR_CODEC_PREMIUM_INVALID
これは、Professional Edition のライセンスが取得されていないことを示します。H.266 デコーダープラグインは Professional Edition の機能です。Professional Edition のライセンスの取得方法の詳細については、「ライセンスの管理」をご参照ください。
ビデオサムネイルの問題
ビデオサムネイルを取得できない
ApsaraVideo VOD コンソールはデフォルトで HTTPS プロトコルを使用します。HTTPS をサポートするリソースのみが直接プレビューされ、スクリーンショットとして表示されます。また、ブラウザの開発者ツールを開いて特定のエラーメッセージを表示することもできます。
ビデオレビュー
手動レビュー中にビデオが再生できない場合
ApsaraVideo VOD には 2 つのレビューモードがあります。レビューモードが「公開前にレビュー」に設定されている場合、ビデオはレビューに合格した後にのみ再生可能になります。2 つのレビューモードは次のとおりです。
レビュー前に公開:ビデオがトランスコーディングされた後、デフォルトで「通常」とマークされ、直接再生できます。その後、ビデオを手動でレビューする必要があります。レビュー後にビデオがブロックされた場合、再生できなくなります。
公開前にレビュー:ビデオがトランスコーディングされた後、デフォルトでレビュープロセスに入り、「レビュー中」とマークされます。ビデオは手動レビューに合格した後にのみ再生可能になります。
パラメーターの解析
VideoID
セキュリティのため、ApsaraVideo VOD はメディアファイルをアップロードする際に直接の URL ではなく、ビデオ ID (videoID) を提供します。また、ApsaraVideo VOD OpenAPI を呼び出して videoID を取得することもできます。詳細については、「ビデオ再生URLの取得」をご参照ください。
ApsaraVideo VOD にビデオをアップロードすると、videoID が取得されます。
ApsaraVideo VOD コンソールで videoID を取得することもできます。手順は次のとおりです。
ApsaraVideo VODコンソールにログインします。
左側メニューの メディアファイル セクションで、[Audio/Video] をクリックします。
ビデオリストで videoID を取得します。
コンソールから取得した videoID を使用して、ダウンロードと再生をテストできます。ApsaraVideo VOD へのファイルのアップロード方法の詳細については、「アップロードSDKの概要」をご参照ください。
AccessKey ID と AccessKey Secret
Alibaba Cloud の AccessKey ID と AccessKey Secret は、Alibaba Cloud API にアクセスするための唯一の認証情報です。AccessKey ID は ID 識別子です。AccessKey Secret はパスワードのようなものです。決して開示しないでください。
認証情報を取得するには:
ApsaraVideo VODコンソールにログインします。
右上隅のプロフィール画像にマウスポインターを合わせ、ショートカットメニューの [AccessKey] をクリックします。
[AccessKey] ページで、AccessKey ペアを作成するか、既存の AccessKey ID の AccessKey Secret を表示します。
PlayKey
playKey (API キー) は、プレーヤー SDK がビデオ再生 URL を取得する際に ID を認証するために使用される再生キーです。再生認証は、Alibaba Cloud AccessKey のセキュリティ認証に基づく二次的な認証メカニズムです。これにより、ホットリンクを効果的に防ぐことができます。デフォルトでは、ユーザーが再生に使用する可能性のあるプラットフォームに基づいて、Flash、HTML5、iOS、および Android プラットフォーム用に playKey が提供されます。
キーのセキュリティを確保するため、playKey を表示する際には、携帯電話に送信される確認コードを入力して本人確認を行う必要があります。
キーを取得するには:
ApsaraVideo VODコンソールにログインします。
左側メニューの 設定の管理 で、配信の高速化設定 > ダウンロードの設定 を選択します。セキュアダウンロードモードを有効にします。
[Get Key] セクションで、一意のアプリ識別子 と 秘密鍵 を入力します。
キーを生成してダウンロード をクリックします。
PlayAuth
プレーヤーは 3 つの再生モードをサポートしています。setAuthInfo メソッドを介して実装される PlayAuth モードは、最も安全であり、商用利用に推奨されます。
PlayAuth は、videoID、AccessKey ID、AccessKey Secret などの情報を含む暗号化された文字列です。ApsaraVideo VOD サービスは、この情報を混合して暗号化します。プレーヤーが PlayAuth を受け取ると、ビデオを再生できます。
再生モード | シナリオ | 長所と短所 | 推奨 |
setDataSource | テスト用 | 漏洩のリスクがあります。AccessKey ID と AccessKey Secret をクライアントコードに直接記述する必要があります。クライアントがクラックされた場合、キーが漏洩する可能性があります。 | 商用利用は推奨されません。 |
setAuthInfo | 商用利用向け | 安全です。ビデオの URL やリンクは公開されません。 | 商用利用を推奨します |
ローカルおよびネットワーク URL の再生 | ローカルビデオとビデオ URL を再生できます | シンプルです。他のプラットフォームのビデオを再生できます。 | ローカルビデオまたはネットワークビデオを再生する必要がある場合に使用します。 |
フロー: サーバーが再生認証情報を取得 > サーバーが再生認証情報をクライアントに送信 > ビデオ再生が完了。
再生認証情報の取得:サーバーで、再生認証 SDK (サーバーサイド SDK) を呼び出して、ApsaraVideo VOD サービスから再生認証情報を取得します。
ビデオ再生の完了:プレーヤー SDK は、ビデオ ID と再生認証情報を使用して、ApsaraVideo VOD サービスからビデオの再生 URL を取得します。その後、ビデオストリームをロードし、デコードして再生します。
再生認証情報は 100 秒間有効で、特定のビデオの再生 URL を取得するために一度だけ使用できます。
プレーヤー SDK は、再生認証情報を使用して自動的に再生 URL を取得してデコードします。この URL は 30 分間有効です。認証情報が期限切れになった場合は、新しいものを取得して URL を更新する必要があります。
アカウントのセキュリティを確保するため、特に Web 再生シナリオでは、常に RAM ユーザーの AccessKey ペアを使用してください。