このトピックでは、Android用の短いビデオSDKに関するよくある質問に対する回答を提供します。
SDK の統合
短いビデオSDKはどのAndroid命令セットをサポートしていますか?
プロジェクトのarmeabiのみにアクセスする必要がある場合は、SDKパッケージのarmeabi_v7aフォルダーにあるsoファイルをプロジェクトのarmeabiフォルダーにコピーします。
ショートビデオSDKと統合されたアプリケーションのデバッグバージョンが正常に動作しても、起動中にリリースバージョンがクラッシュした場合はどうすればよいですか?
症状: ショートビデオSDKと統合されたアプリケーションのリリースバージョンが起動中にクラッシュしますが、デバッグバージョンは正常に実行されます。
考えられる原因: 難読化設定エラー。
- クラッシュを記録するログに、JNIが正しいJavaクラスを見つけられないことを示すメッセージが報告されているかどうかを確認します。
- このようなメッセージが報告された場合、問題は通常難読化によって発生します。 JNIはリフレクションを使用してJavaクラスを呼び出すため、SDK内のJNIに関連するクラスが難読化されている場合、JNIはロード時に正しいJavaクラスを見つけることができません。 その結果、ローディングは失敗する。
- そのようなメッセージが報告されない場合は、テクニカルサポートに連絡して。
- ショートビデオSDKのデモの難読化設定をプロジェクトにコピーします。
ハードウェアエンコーディング用のブラックリストとハードウェアデコーディング用のホワイトリストを追加するにはどうすればよいですか?
- 次のコードを実行して、ハードウェアエンコード用のブラックリストを追加します。
/** * ハードウェアエンコーディング用のブラックリストを追加します。 モデルとバージョンは、リストに追加された順序で互いに対応しています。 * ハードウェアエンコーディングのブラックリストが有効になっている場合、ブラックリストのモデルはソフトウェアエンコーディングを使用しますが、他のモデルはハードウェアエンコーディングを使用します。 * @ param modelsモデルのリスト {@ link Build#MODEL} * @ param versionsシステムバージョンの一覧 {@ link Build.VERSION#SDK_INT} // バージョンを指定する必要がない場合は、値を0に設定します。 */NativeAdaptiveUtil.encoderAdaptiveList(String[] モデル、int[] バージョン);
- 次のコードを実行して、ハードウェアデコード用のホワイトリストを追加します。
/** * ハードウェアデコード用のホワイトリストを追加します。 モデルとバージョンは、リストに追加された順序で互いに対応しています。 * ハードウェアデコードのホワイトリストが有効になっている場合、ホワイトリスト内のモデルはハードウェアデコードを使用しますが、他のモデルはソフトウェアデコードを使用します。 * @ param modelsモデルのリスト {@ link Build#MODEL} * @ param versionsシステムバージョンの一覧 {@ link Build.VERSION#SDK_INT} // バージョンを指定する必要がない場合は、値を0に設定します。 * @# setHWDecoderEnable(boolean) を参照 * / NativeAdaptiveUtil.de coderAdaptiveList(String[] モデル、int[] バージョン);
Android用のショートビデオSDK Basic Editionを使用したときに次のエラーが返された場合はどうすればよいですか: java.lang.NoSuchFieldError: クラスLcom/aliyun/snap/snap_core/R$ idにタイプIのフィールド高さがありません。またはそのスーパークラス (「com.aliyun.snap.snap_core.R$id」の宣言) 」が /app. jwrablive-2 /app. abliable. alkap_acid.comに表示されます。classes2.dex)?
症状: Android用の短いビデオSDK Basic Editionを使用すると、次のエラーが返されます。java.lang.NoSuchFieldError: クラスLcom/aliyun/snap/snap_core/R$ idにタイプIのフィールドの高さがありません。またはそのスーパークラス ('com.aliyun. snap_core.R $$idの宣言 'が /data/app. app /snap. jwrablive-2.
考えられる原因: このエラーは、プロジェクト内のXMLファイルの名前がSDKのAARパッケージ内のXMLファイルの名前と同じであるために発生します。
解決策: プロジェクトまたはAARパッケージのXMLファイルにプレフィックスを追加します。 次のXMLファイルは、重複する名前の競合を引き起こす可能性があります:
activity_setting.xml
とactivity_video_play.xml
。
Android用の短いビデオSDK Basic Editionを使用したときに次のエラーが返された場合の対処方法: java.lang.NoSuchFieldError: クラスLcom/aliyun/snap/snap_core/R$ layoutにタイプIの静的フィールドnotification_template_linesがありません。またはそのスーパークラス ('com.aliyun.snap.snap_core.R$layout' の宣言が表示されます /data/app/com.Aliyun.AliyunVideoSDK.VodSaaSDemo_android-1/base.apk)?
// 注: プロジェクトにインポートするサードパーティのライブラリパッケージでサポートライブラリパッケージが使用されている場合は、サポートライブラリパッケージのバージョンが正しいことを確認してください。 サードパーティのライブラリパッケージのソースコードをプロジェクトにインポートすることをお勧めします。
コンパイル 'com.android.support:appcompat-v7:24.2.1'
コンパイル 'com.android.support:design:24.2.1'
場合によっては、サードパーティライブラリパッケージで使用されているサポートライブラリパッケージのバージョンを変更するのが難しく、サードパーティライブラリパッケージはソースコードを使用せずにインポートされます。
この場合、サポートライブラリパッケージのバージョンを変更することを推奨します。次のコードに示すように、アプリケーションのgradleファイル。 設定。all {
resolutionStrategy {
force 'com.android.support:appcompat-v7:24.2.1'
force 'com.android.support:design:24.2.1'
}
}
デモを使用するときに「アプリケーション# onCreateでFileDownloader#initを最初に呼び出してください」というメッセージが表示された場合はどうすればよいですか?
アプリケーションのOnCreate() メソッドで、DownloaderManager.getInstance().init (コンテキストコンテキスト); 操作を呼び出します。
ショートビデオSDKは、ビデオのサムネイルを取得するためのAPI操作を提供しますか?
Android向けの短いビデオSDK Professional Editionは、AliyunIThumbnailFetcherを提供します。これにより、キーフレーム以外のサムネイルを取得できます。 他のエディションのショートビデオSDK for Androidを使用する場合は、システム機能を使用してビデオのサムネイルを取得することをお勧めします。
ビデオ録画
ビデオを録画するときに一般的なアニメーションステッカーを追加するにはどうすればよいですか?
AliyunIRecorder#addPaster(EffectPaster effectPaster、float sx、float sy、float sw、float sh、float rotation、boolean flip) 操作を使用し、EffectPasterパラメーターを設定して一般的なアニメーションステッカーを追加できます。 isTrackパラメーターをfalseに設定する必要があることに注意してください。 それ以外の場合、ステッカーは顔ステッカーとして追加され、人間の顔にのみ適用できます。 人間の顔が検出されない場合、ステッカーは使用できません。 RecordCallback#OnInitReady() コールバックが返された後、この操作を呼び出します。 それ以外の場合、追加されたステッカーは利用できません。
録音の角度を設定するにはどうすればよいですか?
setRotationまたはsetRecordRotation操作を呼び出して、録音の角度を設定できます。 setRotation操作は、適応操作である。 携帯電話の角度センサによって検出された角度がこの操作に渡された後、記録角度と顔角度が返される。 setRecordRotation操作を呼び出して、録音角度を設定することもできます。
ランドスケープモードでビデオを録画するにはどうすればよいですか?
- デフォルトの記録方向をランドスケープに設定するには、アプリケーションビューを縦向きに設定し、UI要素をランドスケープに回転させます。 これにより、ユーザーは録音中にデバイスを回転するようになります。
アンドロイド: screenOrientation="portrait"
- アプリケーションビューは、記録されたビデオの回転角度を決定するためのベンチマークとして使用される。 録画されたビデオが複数のクリップを含む場合、録画されたビデオの最初のクリップの回転角度がすべてのクリップに使用されます。
- ショートビデオSDK Professional Editionを使用する場合、アプリケーションはビデオ制作操作を使用して録画ビデオを制作します。 ビデオは、アプリケーションビューに適応するためにポートレートモードに回転される。 記録された映像の幅を640ピクセル、高さを360ピクセル、回転角度を270 ° とする。 生成されたビデオの幅は360ピクセルであり、高さは640ピクセルであり、回転角度は0 ° である。 ショートビデオSDK Basic EditionまたはStandard Editionを使用する場合、アプリケーションはポートレートモードに回転させずに録画ビデオを生成します。 録画されたビデオが複数のクリップを含む場合、録画されたビデオの最初のクリップの回転角度がすべてのクリップに使用されます。 ショートビデオSDK Professional Editionの録画プロセスは、ショートビデオSDK Basic EditionおよびStandard Editionの録画プロセスと同様です。
/**
* ビデオの回転角度を設定します。
* @ paramローテーション
* /
void setRotation(int回転);
条件: 録画インスタンスが初期化され、最初のビデオクリップが録画される前にのみ、setRotation操作を呼び出します。
- アプリケーションビューをポートレートモードに設定し、UI要素を回転させて、ユーザーが録画中にデバイスを回転させるように誘導します。
- 記録インスタンスを初期化します。
- setRotation操作を呼び出して、回転角度を設定します。 OrientationDetector操作を呼び出して、回転角度を取得できます。 詳細については、デモをご参照ください。
mRecorder.setRotation(int rotation);
- 録音を続行します。 startRecording操作を呼び出す前に、録音の回転角度を設定する必要があります。
finishRecordForEditor操作を呼び出した後、録画中に追加されたバックグラウンドミュージックが録画ビデオに含まれないのはなぜですか?
- finishRecording操作は、複数の記録クリップをMP4ファイルにマージします。 1つ以上のバックグラウンドミュージックを追加した後、この操作を呼び出してバックグラウンドミュージックをMP4ファイルに含めることもできます。
- これに対して、finishRecordForEditor操作は、ビデオクリップを録画するためにstartRecording操作とstopRecording操作が呼び出された後に、指定された形式の録画ビデオクリップをproject.jsonファイルに追加するだけです。 エディターインスタンスの作成時に指定するURIは、project.jsonファイルのURIです。 The finishRecordForEditor operation does not merge multiple clips or add background music to the recorded video.
finishRecording操作を呼び出してビデオクリップをMP4ファイルにマージし、AliyunIImport操作を呼び出してMP4ファイルを編集UIにインポートします。
録画UIに一般的なアニメーションステッカーの一部しか表示されない場合はどうすればよいですか?
AliyunIRecorder#addPaster(EffectPaster effectPaster,float sx,float sy,float sw,float sh,float rotation,boolean flip)
swパラメーターを、ステッカーの幅と画面の幅の比率に設定します。 shパラメーターを、ステッカーの高さと画面の高さの比率に設定します。 ステッカーの幅が200ピクセル、ステッカーの高さが300ピクセル、画面の幅が540ピクセル、画面の高さが720ピクセルであるとします。 この場合、sw = (float)200/540、sh = (float)300/720
のコードを記述する必要があります。 sxおよびsyパラメータは、ステッカーの幅および高さの正規化された値である。 ステッカーの中心はアンカーとして使用されます。
ビデオ編集
編集中にビデオにエフェクトを追加しました。 ただし、e AliyunICompose.comポーズ操作を呼び出すことによって生成されるビデオにはエフェクトが含まれていません。 なぜこれが起こるのですか?
Android V3.5.0以前のショートビデオSDKでは、AliyunIEditor.onPause操作を呼び出して、追加されたエフェクトをオンプレミス構成ファイルに保持する必要があります。 この操作を呼び出さない場合、エフェクトはオンプレミス構成ファイルに保持されません。 その結果、AliyunICompose操作のレスポンスを逆シリアル化して生成されたProjectフィールドにはエフェクトが含まれません。 Therefore, the produced video does not contain the effects.
ビデオを編集するときは、applyMusic操作を呼び出して、ビデオに音楽ストリームを追加します。 次に、startTimeパラメーターを設定して、音楽の再生を開始する時点を指定します。 しかし、音楽は常に最初から始まります。 なぜこれが起こるのですか?
EffectBeanクラスでは、startTimeパラメーターは、エフェクトマテリアルストリームではなくメインストリームの時点を指定します。 ショートビデオSDK V3.6.0以降には、エフェクトマテリアルストリームの時点を指定できるstreamStartTimeパラメーターが追加されています。 このパラメーターを指定すると、指定した時点で指定した効果が有効になります。 ショートビデオSDK V3.6.0以降を使用する場合は、ビジネス要件を満たすためにstreamStartTimeパラメーターを指定できます。 以前のバージョンを使用する場合は、ビデオにバックグラウンドミュージックを追加するために、エフェクトマテリアルストリームをトリミングする必要があります。
メインストリームが10秒マークに達すると、エフェクト素材ストリームの3秒マークからBGMが再生されます。 効果素材ストリームが10秒マークに達すると、3秒マークから再びBGMが再生される。 エフェクト材料の流れが2回目の6秒マークに到達すると、メインストリームは20秒マークに到達する。 この時点で、バックグラウンドミュージックの再生は停止する。
GIFファイルをメインストリームに追加するにはどうすればよいですか?
V3.7.0より前のバージョンの短いビデオSDKを使用すると、GIFファイルを画像としてのみメインストリームに追加できます。 それに比べて、短いビデオSDK V3.7.0以降では、GIFファイルをビデオまたは画像としてメインストリームに追加できます。 GIFファイルがビデオとして追加された場合、GIFファイルのすべてのフレームが再生されます。 しかしながら、GIFファイルが画像としてメインストリームに追加される場合、GIFファイルの最初のフレームのみが再生される。
トランジション効果を設定するか、applySourceChange操作を呼び出した後にビデオがスタックした場合はどうすればよいですか?
トランジション効果を設定するか、applySourceChange操作を呼び出した後、mAliyunIEditor.play() 操作を呼び出す必要があります。