INDE Media Packは、オーディオとビデオを操作するためのさまざまなコンポーネントを含むライブラリです。 実装に関しては、これはハードウェアアクセラレーションを使用してビデオをエンコードおよびデコードするAndroidメディアコンポーネントのアドオンです。 Androidでマルチメディアを操作するためのクラスの使用と比較して、使用する方がはるかに簡単です。開発者は、アプリケーションでビデオを操作する機能を埋め込むために、メディアコーデック、エクストラクター、マルチプレクサの作業のすべての複雑さを理解する必要はありません。
Media Packを使用するアプリケーションは、Android 4.3以降を実行しているデバイスのすべてのアーキテクチャ( ARM 、 IA )で動作します。
ライブラリは、 Intel INDEの公式ページのリンクを使用してダウンロードできます。 Intel INDEマネージャーをインストールした後、それを開き、 メディアコンポーネントを選択してから、 ダウンロードがダウンロードされたら、インストールを開始します( インストール )。
インストールが完了すると、 Media Packの使用を開始するために必要なすべてを含むフォルダーが、選択したディレクトリに作成されます。
サンプルをビルドして実行することから始めましょう。 これは、 Media Packの能力を評価するための最速かつ最も視覚的な方法です。 これを行うには、 EclipseおよびAndroidデバイスバージョン4.3以降が必要です。
Eclipse next file- > New- > Project- > Android Project From Existing Codeを実行します
サンプルプロジェクトはエフェクトプロジェクトに依存しているため、 Eclipseはすべての依存関係を正しく定義するため、両方のプロジェクトを一度にインポートする必要があります。 これを行うには、サンプルフォルダーへのパスをルートディレクトリとして指定し、両方のプロジェクトをインポート用にマークします(アプリとエフェクト) 。
インポートされたアプリパッケージをAndroidアプリケーションとして起動します。アプリケーションが構築および起動されると、アプリケーションのメインアクティビティが表示され、 メディアパックが提供するさまざまな使用モデルが表示されます。
ゲームのキャプチャ-OpenGLを使用してアプリケーションからビデオをキャプチャします
ビデオのトランスコード -指定されたパラメーターでのビデオ変換
ビデオに参加 -2つのビデオファイルを接着する
ビデオをカット -ビデオから指定されたセグメントをカットします
ビデオエフェクト -オーバーレイビデオエフェクトでビデオを変換します
オーディオエフェクト -オーディオエフェクトオーバーレイでビデオを変換します
カメラからのストリーミング -カメラからWowzaサービスへのビデオのブロードキャスト
メディアファイル情報の取得 - メディアファイル情報の取得
サンプルで十分に遊んだら、内部の調査を開始できます。分析の最初の候補は
ビデオのトランスコード
この例には2つのアクティビティが含まれています。
- ComposerTranscodeActivity-ビデオファイルの選択を提供し、プレビューに表示します。興味深いものはありません
- ComposerTranscodeCoreActivity-選択したビデオファイルに関する詳細情報を表示し、その変換を実行します
この例の重要な要素はMediaComposerクラスです。このクラスは、1つ以上のメディアファイルを入力として受け取り、指定されたパラメーターに従ってそれらを変換します。
ビデオを変換するには、5つの簡単な手順に従う必要があります。
1. MediaComposerオブジェクトを作成します
MediaComposer mediaComposer = new AndroidMediaObjectFactory(getApplicationContext());
2.ソースおよび結果ファイルへのパスを指定します
String srcPath = “…”; String dstPath = “…”; mediaComposer.addSourceFile(srcPath); mediaComposer.setTargetFile(dstPath);
3.結果のビデオのパラメーターを設定します
// // String videoMimeType = “video/avc”; // int videoFrameWidth = 640; // int videoFrameHeight = 480; // int videoBitRate = 5000; // int videoFrameRate = 30; // int videoIFrameInterval = 1; VideoFormatAndroid videoFormat = new VideoFormatAndroid(videoMimeType, videoFrameWidth, videoFrameHeight); videoFormat.setVideoBitRateInKBytes(videoBitRate); videoFormat.setVideoFrameRate(videoFrameRate); videoFormat.setVideoIFrameInterval(videoIFrameInterval); // mediaComposer.setTargetVideoFormat(videoFormat); // // Audio String audioMimeType = “audio/mp4a-latm”; // int audioSampleRate = 48000; // int audioChannelCount = 2; // int audioProfile = MediaCodecInfo.CodecProfileLevel.AACObjectLC; AudioFormatAndroid audioFormat = new AudioFormatAndroid(audioMimeType , audioSampleRate, audioChannelCount); audioFormat.setAudioBitrate(audioBitRate); audioFormat.setAudioAacProfile(audioProfile); // mediaComposer.setTargetAudioFormat(audioFormat);
4. MediaComposer.IProgressListenerインターフェイスを実装する
MediaComposerでのビデオの変換は、別のストリームで非同期的に発生します。 変換プロセスの開始と終了をアプリケーションに通知し、進行メッセージとエラーを受信するには、 MediaComposer.IProgressListenerインターフェイスを実装し、 MediaComposerオブジェクトのポインターを渡す必要があります。
public MediaComposer.IProgressListener progressListener = new MediaComposer.IProgressListener() { @Override public void onMediaStart() { // } @Override public void onMediaProgress(float progress) { // } @Override public void onMediaDone() { // } @Override public void onMediaPause() { // } @Override public void onMediaStop() { // } @Override public void onError(Exception exception) { // } }; // MediaComposer mediaComposer.addProgressListener(progressListener);
5.変換プロセスの開始
変換プロセスが指定されたパラメーターで開始する最後のステップ。
mediaComposer.start();
はい、コードは多くのことが判明しましたが、基本的にはエンコードパラメータの転送と現在の状態の処理に関連しています。 繰り返しますが、 MediaCodec 、 MediaExtractor 、 MediaMuxerなどの「標準」Androidクラスを使用した実装と比較すると、この例のコードは比較にならないほど小さくなっています。
Media Packを使用するためのモデルはビデオ変換だけではありません。 次の記事では、 GLCaptureクラスを使用して、 Open GLを使用して、またはUnityやlibGDXなどの一般的なフレームワークに基づいて、Androidアプリケーションでビデオをキャプチャおよびエンコードする機能を追加する方法について説明します。