IP 摄像机 rtsp 流到 Android 失败
IP camera rtsp stream to Android fails
所以我有一个 RTSP
流,我正在尝试在 D-Link936L 和 Samsung Galaxy Tab S 之间设置。我已经验证 codecs
(a/v) 匹配并且兼容。我已经使用 VLC
.
验证了网络摄像头连接到我的桌面
我所做的,但我没有看到其他人做过的是深入研究 RTSP
的网络数据包,这些数据包在平板电脑和相机之间共享。我最终发现了一些有趣的东西。
注意:我也收到错误:
D/MediaPlayer: setDataSource IOException | SecurityException happend :
java.io.FileNotFoundException: No content provider: rtsp://
以及 0x8000000000(或许多 0)之类的错误
error (1, -2147483648)
我认为这是一个处理不当的 timeout/miscommunication 错误。
我是怎么得出这个结论的?我用 wireshark
记录了良好的连接(平板电脑 运行ning RTSP Player
从 google play store 到 ip camera EDIT)和一个坏的连接(平板电脑到网络摄像机)。下面你可以看到我发现了什么。
连接良好:
连接不良:
您会注意到在良好的连接中有一条命令后跟一个 ACK。但是,您还会注意到,在连接不佳的情况下,大约需要 2.2 秒才能收到 DESCRIBE 数据包的 ACK。这导致 android 端发送一个 TEARDOWN,在发送后不久收到一个 DESCRIBE_ACK。因此,为了聪明,android 设备发送了一个 SETUP...但它与它不久后收到的 TEARDOWN_ACK 行为不匹配。
最后:
所以我的问题是到底是什么(?!?!?!?!)导致了这 2 秒的延迟……哦,我需要在 2017 年 12 月 8 日之前解决这个问题……天哪……
编辑:
我忘了提一件事,它适用于 rtsp://184.72.239.149/vod/mp4:BigBuckBunny_175k.mov
但不是用我的网络摄像机。
我做的一件事 只是 注意,当我 运行 我用来在 android 设备上捕获数据包的软件时, link 上面也失败并出现错误 (1, -214#####) 代码。
我会回答这个问题,以防其他人遇到这个问题。
我一直找不到根本原因,因为我的开发是 rapid,我没有时间调试问题。
我的第一个解决方案是使用 VXG api,但这只允许每个应用程序有 3 个流 运行,流长度上限为 2 分钟,每个视频都有水印...恶心!
我的第二个也是最后一个解决方案是使用 VLC api,这有点古怪,但我能够在一个工作日内设置它并让它工作超过 3 个流,无限制时间,而且没有水印...太棒了!
我的建议是使用 VLC api。我唯一的问题是它只能在表面视图中工作,所以这给了我一些问题并且它似乎使用 TCP 因为它比 VXG api 更潜在(但我没有 wireshark 到检查正在使用的通讯方式)。因此,基本上要为低于实时视频的情况做好准备,我在私人 WLAN 上可能会遇到 0.5-1 秒的延迟。
所以我有一个 RTSP
流,我正在尝试在 D-Link936L 和 Samsung Galaxy Tab S 之间设置。我已经验证 codecs
(a/v) 匹配并且兼容。我已经使用 VLC
.
我所做的,但我没有看到其他人做过的是深入研究 RTSP
的网络数据包,这些数据包在平板电脑和相机之间共享。我最终发现了一些有趣的东西。
注意:我也收到错误:
D/MediaPlayer: setDataSource IOException | SecurityException happend :
java.io.FileNotFoundException: No content provider: rtsp://
以及 0x8000000000(或许多 0)之类的错误
error (1, -2147483648)
我认为这是一个处理不当的 timeout/miscommunication 错误。
我是怎么得出这个结论的?我用 wireshark
记录了良好的连接(平板电脑 运行ning RTSP Player
从 google play store 到 ip camera EDIT)和一个坏的连接(平板电脑到网络摄像机)。下面你可以看到我发现了什么。
连接良好:
连接不良:
您会注意到在良好的连接中有一条命令后跟一个 ACK。但是,您还会注意到,在连接不佳的情况下,大约需要 2.2 秒才能收到 DESCRIBE 数据包的 ACK。这导致 android 端发送一个 TEARDOWN,在发送后不久收到一个 DESCRIBE_ACK。因此,为了聪明,android 设备发送了一个 SETUP...但它与它不久后收到的 TEARDOWN_ACK 行为不匹配。
最后: 所以我的问题是到底是什么(?!?!?!?!)导致了这 2 秒的延迟……哦,我需要在 2017 年 12 月 8 日之前解决这个问题……天哪……
编辑:
我忘了提一件事,它适用于 rtsp://184.72.239.149/vod/mp4:BigBuckBunny_175k.mov
但不是用我的网络摄像机。
我做的一件事 只是 注意,当我 运行 我用来在 android 设备上捕获数据包的软件时, link 上面也失败并出现错误 (1, -214#####) 代码。
我会回答这个问题,以防其他人遇到这个问题。
我一直找不到根本原因,因为我的开发是 rapid,我没有时间调试问题。
我的第一个解决方案是使用 VXG api,但这只允许每个应用程序有 3 个流 运行,流长度上限为 2 分钟,每个视频都有水印...恶心!
我的第二个也是最后一个解决方案是使用 VLC api,这有点古怪,但我能够在一个工作日内设置它并让它工作超过 3 个流,无限制时间,而且没有水印...太棒了!
我的建议是使用 VLC api。我唯一的问题是它只能在表面视图中工作,所以这给了我一些问题并且它似乎使用 TCP 因为它比 VXG api 更潜在(但我没有 wireshark 到检查正在使用的通讯方式)。因此,基本上要为低于实时视频的情况做好准备,我在私人 WLAN 上可能会遇到 0.5-1 秒的延迟。