-
向客户端导入本地视频时出错,导入本地视频还有其他要求吗?文档里似乎没有提到。
-
打开网络摄像头时也出错。而其他工具可以正常打开这个 rtsp 地址的视频。
-
程序崩溃,提示“An exception occurred, the client must be closed”。
-
我的服务器地址设置如下,有错误吗?
5. 打开客户端时的其他错误信息。

存档自 BrainFrame 论坛。发布于 2020年2月21日。 15 条回复 · 1280 次浏览 由英文原帖翻译成中文。 阅读原文
向客户端导入本地视频时出错,导入本地视频还有其他要求吗?文档里似乎没有提到。
打开网络摄像头时也出错。而其他工具可以正常打开这个 rtsp 地址的视频。
程序崩溃,提示“An exception occurred, the client must be closed”。
我的服务器地址设置如下,有错误吗?
5. 打开客户端时的其他错误信息。

你好 Xiaofei,欢迎来到论坛,感谢发帖!
向客户端导入本地视频时出错,导入本地视频还有其他要求吗?文档里似乎没有提到。
是的,这部分文档需要更新。要播放视频文件,请把该文件放到服务端 docker-compose.yml 所在的目录,然后用文件路径 /working_dir/video_t1.mp4 新建一个视频流。
打开网络摄像头时也出错
能否告诉我们你使用的设备 ID,以及出现的错误?
而其他工具可以正常打开这个 rtsp 地址的视频
你提供的 URL 看起来只是一个 IP 地址。RTSP 地址必须以“rtsp://”开头,通常还带有 BrainFrame 连接所需的其他信息。相关文档在这里。格式大致如下:
rtsp://[username]:[password]@[ip]/[path]
并非所有 RTSP 流都需要路径,你的情况可能不需要。如果你能告诉我们 IP 摄像头的品牌和型号,我们也许能帮你确定这个 RTSP 地址!
程序崩溃,提示“An exception occurred, the client must be closed”
这像是我们在 v0.23.0 版客户端中发现的一个 bug。请从我们的下载页面下载最新的 v0.23.1 版本,该问题已修复。
我重新试了一次,并把服务端和客户端都升级到了 v0_23_1。打开本地视频文件和 RTSP 地址的摄像头仍然失败,提示信息与 v0_23_0 版本似乎相同。如下:
打开 RTSP 地址的摄像头失败,失败信息见图中红框
打开本地视频文件时出现同样的错误。此时视频文件和 docker-compose.yml 在同一路径下


3. 新版客户端打开运行后,如果选择点击关闭,程序会崩溃,如下图所示
4. 此时服务端的运行情况


打开 RTSP 地址的摄像头失败,失败信息见图中红框
这是 401 Unauthorized 错误,通常意味着提供的视频流用户名和密码不正确,或者没有提供用户名和密码。你有把 IP 摄像头的用户名和密码写进 URL 吗?
打开本地视频文件时出现同样的错误。此时视频文件和 docker-compose.yml 在同一路径下
方向是对的,只是当前的做法容易让人困惑。不要用文件浏览器选择文件,而是直接输入“/working_dir/video_t1.mp4”。我们以后会改进这一体验,让它更简单、更清晰。
3. 新版客户端打开运行后,如果选择点击关闭,程序会崩溃,如下图所示
看起来你是用 Ctrl+C 关闭客户端的。这样客户端无法正常退出,会出现 KeyboardInterrupt 错误。这通常无害,但我建议你点击窗口右上角的“X”来关闭客户端。
是的,图中打了马赛克的部分原本是账号和密码。我用这个地址在 VLC 媒体播放器中可以打开。
我试过了,还是同样的错误
是的,我确实点了“X”关闭客户端。但终端命令行没有反应,所以只能输入“ctrl + C”来关闭。
非常感谢你的回复!
嗯,很有意思!为了帮我们找出问题,你能运行下面的命令吗?
GST_DEBUG=3 gst-play rtsp://your-url-here
请把这条命令输出的日志发给我们,谢谢!
在截图里你填的是“/opt/BrainFrame/video_t1.mp4”。“video_t1.mp4”必须放在与 docker-compose.yml 相同的根目录下。
└── BrainFrame
├── docker-compose.yml
└── video_t1.mp4
然后把文件路径设为“/working_dir/video_t1.mp4”。
我不确定为什么客户端关闭要花很长时间。通常它会等所有视频流连接都干净地关闭之后才退出。也许是花了比较久?不管怎样,这不是什么大问题。
显示如下:

我把文件路径设为“/working_dir/video_t1.mp4”后就可以了,太好了!

抱歉,我忘了提依赖项。
安装 gstreamer:
sudo apt install gstreamer1.0-plugins-{base,good,bad,ugly} gstreamer1.0-tools
测试视频流:
GST_DEBUG=3 gst-play rtsp://your-url-here
错误信息如下,请查看:
按“k”键来显示键盘快捷键列表。
正在播放 rtsp://admin:****@192.168.2.64:554/Streaming/Channels/101?transportmode=unicast
0:00:00.378669369 9016 0x55f0679e6e70 WARN uridecodebin gsturidecodebin.c:1409:gen_source_element: error: “rtsp”未实现 URI 处理器。
ERROR “rtsp”未实现 URI 处理器。 for rtsp://admin:****@192.168.2.64:554/Streaming/Channels/101?transportmode=unicast
ERROR debug information: gsturidecodebin.c(1409): gen_source_element (): /GstPlayBin:playbin/GstURIDecodeBin:uridecodebin0
到达播放列表结尾。这很奇怪,这个错误通常意味着没有安装 GStreamer 的 RTSP 插件,但它们应该包含在 gstreamer1.0-plugins-good 软件包里。运行下面的命令会怎样?
gst-inspect-1.0 rtspsrcNo plugs ‘rtspsrc’
接下来该怎么办?还有别的办法吗?

你确定这条命令成功执行完了吗?
sudo apt install gstreamer1.0-plugins-{base,good,bad,ugly} gstreamer1.0-tools
方便的话,能把这条命令的输出发给我吗?
是这样吗?

我刚想到——你是不是在用 Anaconda?
我们以前遇到过 Anaconda 的问题,因为它自带了一个版本的 gstreamer(只包含部分 gstreamer 插件)。
能否退出 Anaconda 环境后再试一次?
conda deactivate
gst-inspect-1.0 rtspsrc
如果这样可以,再试一下那个 URL?
GST_DEBUG=3 gst-play rtsp://your-url-here
好的!问题已经远程解决了。给以后来这个帖子查看的人:最终的问题是 rtsp 摄像头的密码里包含“@”符号。这会让 gstreamer 的解析器混淆,在客户端日志里表现为“401 unauthorized”错误。
我们修改了摄像头的密码,之后就正常了!
另一种解决办法是在客户端里把“@”替换为“%40”。这是“@”的 URL 编码,可以被正确解析。
太好了!做得好!
@AOTU support 非常感谢!