このリンクからgithubからビデオトリミングコードをダウンロードしました。
初めて完全に機能しますが、2回目に実行しようとすると、例外なくコードがクラッシュし、クラッシュ後に3回目に実行しようとすると、機能します。誰かがこの種の行動について何か考えを持っていますか?
ビデオをトリミングするモジュールが1つあるアプリケーションも開発しています。誰かが私を助けることができれば、私は本当にそれをいただければ幸いです。
このリンクからgithubからビデオトリミングコードをダウンロードしました。
初めて完全に機能しますが、2回目に実行しようとすると、例外なくコードがクラッシュし、クラッシュ後に3回目に実行しようとすると、機能します。誰かがこの種の行動について何か考えを持っていますか?
ビデオをトリミングするモジュールが1つあるアプリケーションも開発しています。誰かが私を助けることができれば、私は本当にそれをいただければ幸いです。
https://lists.ffmpeg.org/pipermail/libav-user/2012-May/001964.html
アクティビティでサードパーティ ライブラリのネイティブ メソッドを 2 回呼び出すと、Android アプリケーションが終了する
「ffmpeg.c」の静的変数の問題について読んでください...
同じ問題があり、これらの変数をリセットまたはGCするために何か(3つの代替選択肢)を行う必要があるに違いありません:
ライブラリをロードしたJavaクラスローダーを取得し、それをGCします
c-layerで、OPが上記のリンクで行ったことを行います
各呼び出しサイクル中に最初のライブラリで 'dlsym' と 'dlclose' を使用する 2 番目の共有ライブラリを作成します。
github 、こちらの「README」を参照して ください
あなたが抱えているのと同じ問題
このように見えるffmpeg.cでメソッドを作成するだけです
void exitmycode(){
ffmpeg_exit(0);
}
ffmpeg_exit(0)
メソッドは、ビデオ トリミングの完了後にメインの C ファイルからffmpeg.c
呼び出すだけで、既に存在します。exitmycode();
何が起こっていたのかというと、ffmpeg でビデオなどをトリムしても完全に終了しないため、次にコマンドを実行すると終了しますが、トリム コマンドも実行されません。 3回目に実行すると、コマンドが完全に実行されます。だから、私がやったことはffmpeg_exit(0)
、処理の最後に手動で呼び出すことです。
コードでビデオ トリミングを呼び出した後、アクティビティを終了してアプリケーションを再起動できると思います。
2 回目にアプリケーションがクラッシュし、3 回目に動作する場合は、アプリケーションが初期化され、クラッシュ後にアプリケーションが再起動される可能性があります。
ネイティブ ライブラリのリンクをロードおよびアンロードしてみてください
ワン・シング
ffmpeg4android_os lib をインストールしている場合は、このようにメソッド StopTranscoding の 1 行をコメントするだけです。
public void stopTranscoding() {
Log.d(Prefs.TAG, "stopTranscoding called");
if (_transcodeBackground != null) {
//_transcodeBackground.forceCancel();
}
}
そのすべて....