1

rtmpgwを使用してローカル ポートにストリームを設定し、videoview またはその他のビデオ プレーヤーを使用してアクセスしようとしています。ネイティブ実行可能ファイルをセットアップして動作していますが、コマンドでテストすると

rtmpgw --sport 8080

次のエラーが返されます。

HTTP-RTMP Stream Gateway v2.4
(c) 2010 Andrej Stepanchuk, Howard Chu; license: GPL

ERROR: startStreaming, TCP bind failed for port number: 8080
ERROR: Failed to start HTTP server, exiting!

これは、私が試したどのポートでも発生します。引数がない場合、--sportポート 80 を試行して失敗します。私の理解では、非特権/非 root ユーザーは unix で 1024 未満のポートをバインドできません。これは仮想マシンなので、違いますか? ネイティブ実行可能ファイル/静的バイナリは、仮想マシンの外部で実行されませんか?

コード:

File rtmp = new File(getFilesDir() + "/rtmpgw");
ProcessBuilder pb = new ProcessBuilder("./" + rtmp.getName(), "--sport", "8080");
pb.directory(getFilesDir());
Process stream = pb.start();
4

2 に答える 2

5

回答ありがとうございます。ポート 1024 より上にあることが唯一の要件ではないことがわかりました。エフェメラル ポート範囲に収まる必要があります。一時的なポート範囲を取得するために、コマンドを実行しました

root@android:/ # cat /proc/sys/net/ipv4/ip_local_port_range
cat /proc/sys/net/ipv4/ip_local_port_range
32768   61000

その範囲がすべての Android デバイスでどの程度一貫しているかはわかりませんが、エフェメラル範囲内のポートを指定すると、ネイティブ実行可能ファイルが正常に起動します。

于 2013-01-02T15:29:58.660 に答える
1

ネイティブ アプリは VM の外部で実行されますが、それでも Android のアクセス許可メカニズムによって制限されます。Chris が上で指摘したように、まず adb シェルから試すことができます。これにより、これらの制限が大幅に補償されます。サーバーがそこで失敗した場合は、他のポート番号を試してください。

于 2012-12-30T07:15:02.507 に答える