Android 中的 RTSP 客户端
Posted
技术标签:
【中文标题】Android 中的 RTSP 客户端【英文标题】:RTSP Client in Android 【发布时间】:2011-03-21 16:28:08 【问题描述】:可能有人问过同样的问题,但我没有找到任何适合我的解决方案。
我正在尝试在 android 中播放 RTSP 流,服务器是 Darwin 流服务器。目前我尝试过 VideoView 和 MediaPlayer,这两个在我使用 3G 时总是可以正常工作,但在我使用 Wifi 时有时会出现问题,特别是当我在工作场所使用 Wifi 时,以及 LogCat 中的错误:
PlayerDriver( 31): buffering (0)
我搜索了一下,猜测可能是 Wifi 热点在防火墙后面并且 UDP 端口被阻止,而 Opencore 媒体框架仅支持 RTP over UDP。如果我错了,请纠正我。
然后,这是我的问题,如果我无法更改防火墙情况,我该如何解决。如果无法使用内置的 VideoView/MediaPlayer,那么如何编写自己的 rtsp 客户端。
任何建议将不胜感激:)
提前致谢!
博尔顿
【问题讨论】:
【参考方案1】:我认为您对此无能为力...这是我的想法:
制作一个将在与 Darvin 相同的 LAN 中启动的应用程序,然后它将通过 UDP(在 LAN 中)获取 Darvin 的 RTP 流,然后通过 TCP 将其传输到 WAN,以便您可以访问它。您可以轻松地用 C# 编写该应用程序......它会完美运行。或者,如果你有一些 Linux 发行版,你可以编写一个复杂的 Bash 脚本,使用 NC 来做同样的事情......
所以这基本上是这个想法:
【讨论】:
现在我想改变我的客户端来解决这个问题,我认为这是可能的,因为我可以使用VLC通过同一个WiFi访问RTSP流。不过感谢大家的帮助,如果换客户端解决不了我再试试看:) 你能确定 VLC 使用 UDP 传输流吗?也许它通过 TCP 获取它,而您的 Android 应用程序想要通过 UDP 获取它?启动流时(使用 Wireshark)可以扫描客户端 PC 上的网络活动吗?或者以其他方式确认 VLC 正在通过 UDP 获取流? 是的,你是对的,VLC 正在使用 TCP。我想知道我是否可以做一些事情来改变我的 Android 应用程序以通过 TCP 获取流,比如在 jni 中使用一些开源 RTSP 库等。 现在你可以这样做了……但我不知道怎么做。您将不得不谷歌...或编辑您的问题,以便知道的人做出回应。 :D 或者,您可以做我所做的:将服务器配置为仅接受 TCP 单播和 TCP 交错连接,因此当服务器尝试通过 UDP 获取流时,当服务器响应 BAD TRANSPORT 错误时,Android 将继续使用 TCP。现在,我从头开始编写我的 rtsp 服务器,但我不知道如何配置 Darvin。所以...:DD 非常感谢Cipi的帮助:)我会尝试改变我的客户,并且答案被接受,我希望它可以帮助其他人。【参考方案2】:推荐使用 MediaPlayer 来搭配 RTSP。但是正如您所说,WiFi防火墙仍然存在问题,在这种情况下,您必须启用端口或配置必要的端口。我认为没有解决方案,因为问题在于网络而不是您的代码。所以球不在你的球场上。
【讨论】:
感谢 rohit,但我看到其他一些应用程序可以通过同一个 WiFi 热点播放 RTSP 流,所以我认为应该有一些解决方案。【参考方案3】:它在 android 中非常简单有趣的任务。
按照说明操作即可。
1- 在您的计算机(服务器)上安装 VLC,然后转到媒体->流式传输 (Ctrl+S) 2-选择要流式传输的文件,或者如果要流式传输网络摄像头或...单击“捕获设备”选项卡并进行配置,最后单击“流式传输”按钮。 3-在这里你应该进行流服务器配置,只需转到“选项”选项卡并通过以下命令:
:sout=#transcodevcodec=mp4v,vb=400,fps=10,width=176,height=144,acodec=mp4a,ab=32,channels =1,samplerate=22050:rtpsdp= rtsp://YOURCOMPUTER_SERVER_IP_ADDR:5544/
注意:将 YOURCOMPUTER_SERVER_IP_ADDR 替换为您的计算机 IP 地址或任何运行 VLC 的服务器...
注意:你可以看到,视频编解码器是android支持的MP4V。
4- 转到 eclipse 并为 media playbak 创建一个新项目。创建一个 VideoView 对象并在 OnCreate() 函数中编写如下代码:
mVideoView = (VideoView) findViewById(R.id.surface_view);
mVideoView.setVideoPath("rtsp://YOURCOMPUTER_SERVER_IP_ADDR:5544/");
mVideoView.setMediaController(new MediaController(this));
5- 在设备上运行 apk(不是模拟器,我没有检查它)并等待开始播放。请考虑缓冲过程大约需要 10 秒...
【讨论】:
在此之前检查 vlc 播放器中的 url 是否正在工作。以上是关于Android 中的 RTSP 客户端的主要内容,如果未能解决你的问题,请参考以下文章