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 shell 尝试它,这在很大程度上弥补了这些限制。如果您的服务器在那里发生故障,请尝试其他一些端口号。

于 2012-12-30T07:15:02.507 回答