Intel INDE Media Pack

前回、Intel INDEに関するレビュー記事でメディアパックとその主要機能について言及しました。 この記事では、さらに詳しく説明します。

INDE Media Packは、オーディオとビデオを操作するためのさまざまなコンポーネントを含むライブラリです。 実装に関しては、これはハードウェアアクセラレーションを使用してビデオをエンコードおよびデコードするAndroidメディアコンポーネントのアドオンです。 Androidでマルチメディアを操作するためのクラスの使用と比較して、使用する方がはるかに簡単です。開発者は、アプリケーションでビデオを操作する機能を埋め込むために、メディアコーデック、エクストラクター、マルチプレクサの作業のすべての複雑さを理解する必要はありません。

Media Packを使用するアプリケーションは、Android 4.3以降を実行しているデバイスのすべてのアーキテクチャ( ARMIA )で動作します。

ライブラリは、 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つのアクティビティが含まれています。



画像

この例の重要な要素は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(); 


はい、コードは多くのことが判明しましたが、基本的にはエンコードパラメータの転送と現在の状態の処理に関連しています。 繰り返しますが、 MediaCodecMediaExtractorMediaMuxerなどの「標準」Androidクラスを使用した実装と比較すると、この例のコードは比較にならないほど小さくなっています。

Media Packを使用するためのモデルはビデオ変換だけではありません。 次の記事では、 GLCaptureクラスを使用して、 Open GLを使用して、またはUnitylibGDXなどの一般的なフレームワークに基づいて、Androidアプリケーションでビデオをキャプチャおよびエンコードする機能を追加する方法について説明します。

Source: https://habr.com/ru/post/J216545/


All Articles