1

私はFFmpegを使用して、別のサーバに(インターネットに接続されていない無線LAN経由で接続されている)カメラからビデオを再配信しています。私はすでに無線LANに接続しており、同時に携帯データを使用しているのでbindProcessToNetwork()。私は、次のbindProcessToNetworkはandroidのffmpegと連携していません

final ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkRequest.Builder req = new NetworkRequest.Builder(); 
req.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET); 
req.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR); 
cm.requestNetwork(req.build(), new ConnectivityManager.NetworkCallback() { 
    @Override 
    public void onAvailable(Network network) { 
     //here you can use bindProcessToNetwork 
     //cm.getNetworkInfo(network); 
     if (cm.getNetworkInfo(network).getType() == ConnectivityManager.TYPE_MOBILE) { 
      cm.bindProcessToNetwork(network); 
     } 
    } 

}); 

を行っているffmpegのコマンドを実行する前に無線LANに接続している間のWebViewは、携帯電話のデータを使用して正常に動作しているようにそれは、ケースのほとんどで正常に動作しているが、私はどのffmpegのを実行しようとすると、コマンドは動作しません。

答えて

2

bindProcessToNetworkは、現在のプロセスを選択したネットワークにバインドするためにnetdを呼び出します。 ffmpeg-android-javaでは、ffmpegバイナリはexecuted using Runtime.getRuntime().exec(String)です。したがって、ffmpegは実際には別の子プロセスとして実行されています。 Netdは子プロセスを親と同じネットワークに自動的にバインドしないので、ffmpegはこの設定を継承しません。その間、プロセス内で実行されているWebView、URLConnectionなどのアプリケーションの他の側面では、選択したネットワークが期待どおりに使用されます。

あなたは多くのオプションを持ってこの問題を解決するには(最も簡単からの最も難しい):

  • それが必要ネットワークを指定ffmpegのためのコマンドラインパラメータを追加するためのffmpeg-アンドロイド-Javaソースを変更します。
  • ffmpegバイナリを正しいネットワークに強制するコマンドラインユーティリティを見つける(ルートが必要な場合があります)
  • ffmpegを再構築してサポートを追加する選択したネットワークにバインドされたネイティブソケット
  • 新しいffmpegプロセスのデフォルトネットワークを設定するためにnetdを直接呼び出す(ルートが必要な可能性が高い)
関連する問題