Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在本机可执行文件(android)中绑定TCP端口失败_Android_Tcp_Android Ndk_Video Streaming_Rtmp - Fatal编程技术网

在本机可执行文件(android)中绑定TCP端口失败

在本机可执行文件(android)中绑定TCP端口失败,android,tcp,android-ndk,video-streaming,rtmp,Android,Tcp,Android Ndk,Video Streaming,Rtmp,我正在尝试使用在本地端口上设置流,以便使用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

我正在尝试使用在本地端口上设置流,以便使用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,但失败。据我所知,在unix中,非特权/非根用户不能绑定低于1024的端口。既然这是一个虚拟机,它有什么不同吗?本机可执行/静态二进制文件不会在虚拟机之外执行吗

代码:

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

您的本机应用程序在VM之外运行,但仍然受到Android权限机制的限制。正如Chris在上面指出的,您可以首先从adb shell中尝试它,这在很大程度上弥补了这些限制。如果您的服务器出现故障,请尝试其他端口号。

您的本机应用程序在VM之外运行,但仍受Android权限机制的限制。正如Chris在上面指出的,您可以首先从adb shell中尝试它,这在很大程度上弥补了这些限制。如果服务器出现故障,请尝试其他端口号。

谢谢您的回复。事实证明,端口1024以上并不是唯一的要求。它需要落在地上。为了获得短暂的端口范围,我执行了以下命令

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

我不确定该范围在所有android设备上的一致性如何,但我的本机可执行文件在临时范围内给定一个端口时会成功启动。

感谢您的回复。事实证明,端口1024以上并不是唯一的要求。它需要落在地上。为了获得短暂的端口范围,我执行了以下命令

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

我不确定该范围在所有android设备上的一致性如何,但我的本机可执行文件在指定的临时范围内的端口时会成功启动。

在android上不鼓励使用本机可执行文件。也就是说,他们目前可以工作。一个问题是他们运行的用户ID是什么——它必须是一个具有网络权限的用户ID。然而,大多数在设备上获得外壳adb或终端应用程序的方法可能都具有网络权限。您可能会发现是否可以跟踪netcat可执行文件的Android版本,并尝试将其包含在AOSP源代码中的iirc,因为您现在使用的程序可能由于其他原因报告了误导性错误消息。或者端口8080正忙。在Android上不鼓励使用本机可执行文件。也就是说,他们目前可以工作。一个问题是他们运行的用户ID是什么——它必须是一个具有网络权限的用户ID。然而,大多数在设备上获得外壳adb或终端应用程序的方法可能都具有网络权限。您可能会发现是否可以跟踪netcat可执行文件的Android版本,并尝试将其包含在AOSP源代码中的iirc,因为您现在使用的程序可能由于其他原因报告了误导性错误消息。或者端口8080正忙。谢谢你的指针,很高兴知道即使它在VM之外运行,它仍然受到应用程序权限的限制。因此,运行代码的用户似乎是由操作系统根据应用程序权限动态创建的。感谢您提供的指针,很高兴知道即使它在VM之外运行,它仍然受到应用程序权限的限制。因此,运行代码的用户似乎是由操作系统根据应用程序权限动态创建的。当设备通过USB插入Windows计算机时,我得到了一个adb外壳。当设备通过USB插入Windows计算机时,我得到了一个adb外壳。