web-dev-qa-db-ja.com

Android StudioのGstreamerの例

私はGstreamerをAndroid studioで動作させようとしています。チュートリアルに従って、たとえばここを参照してください。

https://gstreamer.freedesktop.org/documentation/tutorials/Android/link-against-gstreamer.html

しかし、最新のAndroidスタジオにはjni/Android.mkはありません。そのWebページの最後にコードを配置するにはどうすればよいですか?

CMakeLists.txtに入れる必要がありますか?それとも何か違うものをそこに入れるべきですか?

または、Android.mkファイルを作成するだけですか?その場合、どこにありますか(jniフォルダーがないため、cppフォルダーのみ)?そして、Android.mkファイルの場所をAndroid studioに伝えるにはどうすればよいですか?

ありがとう!

6
Josiki

Gstreamerのサイトからすべてのチュートリアルを作成しましたが、非常に大変でした。他の人を助けるために私はそれを文書化しました。これがlinux(ubuntu)のチュートリアルですが、Windowsでも動作する可能性があります。質問がある場合は、質問してください:)...また、gitlabからプロジェクトをリンクしてAndroid Studio:
(チュートリアル5) https://gitlab.com/eduardoprado/gstreamer-tutorial5.git
(チュートリアル2) https://gitlab.com/eduardoprado/gstreamer-tutorial2.git

Android Studioでライブラリを使用する

GStreamerを理解してプロジェクトに統合する最良の方法は、このサイトのチュートリアルを行うことです:申し訳ありませんが、自分でリンクを見つける必要があります。直接リンクを投稿するという評判はありません
ただし、これらのチュートリアルは古く、Eclipseで動作するように作成されています。これは、Android Studioが必要です:

1。 Android Studioのインポートオプション;を使用してチュートリアルをインポートします。
2。 Android StudioをNDKを使用するように設定します。
3。 「Android.mk」ファイル内に変数を設定します。
4。一部のアーキテクチャのみをコンパイルするようにGradleを設定します。
5。 Gstreamerクラスを正しいパスにコピーします。
6。 Android Studioから「InstanteRun」を無効にします。(2017年10月27日編集)
7。 「リンカーゴールド引数」を修正(編集は2017年11月28日WINDOWSユーザーのみ)

これらの各手順については、次のセクションで説明します。

1。 Android Studioのインポートオプションを使用してチュートリアルをインポートします

Android Studioには、別のIDEからプロジェクトをインポートするオプションがあります。 Eclipse用に作成されたGstreamerのプロジェクトを次の手順でインポートするには:
1。 gitからすべてのチュートリアルをダウンロードします:;
2。 Android Studioで[ファイル]-> [新しいインポートプロジェクト]に移動します。
3。ファイル画面用の新しいブラウザで、「gst-docs」に移動し、目的のプロジェクト(私の場合はチュートリアル5)「Android-tutorial-5」を選択して「OK」をクリックします。

Selecting Project

2。 Android StudioをNDKを使用するように設定します

プロジェクトがインポートされたので、Android StudioにプロジェクトがNDKフレームワークを使用していることを通知する必要があります。したがって、Gradleはすべての依存関係をインポートして処理できるようになります。これを行うには、ファイルAndroid.mkをリンクするには(すでにチュートリアルフォルダーにあります):
1。左側のナビゲーションタブの「アプリ」を右クリックします
2。 「C++プロジェクトとGradleのリンク」をクリックします
3。新しいウィンドウで:

  • 「ビルドシステム」を「CMake」から「ndk-build」に変更します
  • 「...」をクリックして、Android.mkの場所「/AndroidStudioProjects/Android-studio-5/app/src/jni/Android.mk」を参照します
  • OKを押します

これで、外部ビルドファイルがプロジェクトの左側のタブに表示されます。いくつかのエラーも表示されますが、これは正常であり、次のセクションで修正されます。

3。 「Android.mk」ファイル内に変数を設定します

最後のセクションのエラーは、「Android.mk」がGStreamerが抽出された場所へのパスを見つけられないために発生します。それでは、GSTREAMER_ROOT_Android変数をGStreamerが抽出されたパスに設定しましょう。これを達成するには:
1。左側のタブを参照し、[外部ビルドファイル]を展開します。
2。 Android.mkをダブルクリックしてファイルを開きます。
3。 10行目の「include $(BUILD_SHARED_LIBRARY)」の下に、次のように入力します。
-"GSTREAMER_ROOT_Android:=path"
-[〜#〜] no [〜#〜]引用符
-pathは、GStreamerが抽出された(明らかに)パスです。
その後、Gradleが同期し、「*** Target Arch ABI not support:mips.Stop」というエラーが表示されます。

Setting GSTREAMER_ROOT_Android

4。一部のアーキテクチャのみをコンパイルするGradleを設定します

最後のセクションのエラーは、Gradeがさまざまなアーキテクチャ用にビルドしようとしたが、MIPSでビルドするファイルが見つからなかったために発生します。この問題を解決するために、MIPSを除いて構築するアーキテクチャを指定します。
1。左側のブラウザタブで、Gradleスクリプトを展開します。
2。 「build.gradle(モジュール:アプリ)」をダブルクリックします
3。 「moduleName」の下の行に次のように入力します。
(チュートリアル5を実行するため)
-abiFilters'x86 '、' armeabi '、' armeabi-v7a '、' arm64-v8a '
(チュートリアル2を実行するため)
-abiFilters'x86 '、' armeabi-v7a '、' arm64-v8a '
(2017年11月21日編集:最近、arm64-v8aで問題が発生しました... 64ビットのデバイスではライブストリーミングが表示されません。「arm64-v8aの削除」も解決しました)
(2018年3月29日編集:GstreamerとNDKのバージョンによっては、アーキテクチャをさらに削除する必要がある場合があります。機能しない場合は、別の削除の組み合わせを試してください)

enter image description here

5。 Gstreamerクラスを正しいパスにコピーします。

最後に必要な構成は、Mainクラスでのパッケージのインポートに関するものです。

Class import error

上記のエラーは、「。init」関数を取得するためのGStreamerクラスがないために発生します。これを解決するには、クラスGStreamerを抽出したファイルからコピーして、指定したパスに貼り付ける必要があります。

  1. システムからファイルマネージャーを使用して、GStreamerを抽出したファイルを参照します。
  2. 抽出されたファイルから、GStreamerクラスの場所を参照します。 /arm/share/gst-Android/ndk-build/GStreamer.Javaにあります。GStreamer.Javaをコピーします。
  3. Android Studioに戻り、メインクラスがアクセスしようとしているインポートパスを作成します。左側のブラウザタブで/ app/Javaから開始します。したがって、上の画像に作成する必要があります。パスorg.freedesktop.gstreamerを作成し、GStreamer.Javaファイルをその中に貼り付けます。
  4. Javaフォルダで右クリック
  5. 新規->パッケージ
  6. Org.freedesktop.gstreamerと入力します
  7. Org.freedesktop.gstreamerを右クリックして5を貼り付けます。インポートエラーは解決されましたが、新しいクラスにエラーがあります。それらを解決するには、コピーしたクラス「@」と「@」の間にあるものをすべて消去するだけです。

6。 Android Studioから「InstanteRun」を無効にします。(2017年10月27日に編集)
Android Studioのこの機能は、プロジェクトを実行しようとすると問題が発生する可能性があるため、無効にすることをお勧めします。
「InstanteRun」の無効化:

1。 Android Studioで[ファイル]-> [設定...]に移動(Ctrl + Alt + S))
2。 「ビルド、実行、デプロイ」->「インスタント実行」
3。 [デプロイ時にコード/リソースの変更をホットスワップするためのインスタント実行を有効にする(デフォルトで有効)]のチェックを外します。
4。 「適用」をクリックします

7。 「リンカーゴールド引数」を修正(WINDOWSユーザーのみ)

Windowsを試してみると、次のエラーが発生します。
Error:error: invalid linker name in argument '-Fuse-ld=gold'
修正するには:
1。移動 Android NDKリンカー(GStreamer)-無効なリンカー名-Fuse-ld = gold
2。 Antoine Zambelliの回答手順に従ってください。

20

苦労して数日後、gstreamerチュートリアルのドキュメントがgradleビルドシステムを使用するように更新されていることがわかりました。 https://cgit.freedesktop.org/gstreamer/gst-docs/ で完全に機能する例を見ることができます。2018年6月14日からのコミットを参照してください。

2
avlacatus