Android中的RTSP客户端

时间:2011-03-21 16:28:08

标签: android udp rtp rtsp

可能会问同样的问题,但我找不到任何可用的解决方案。

我正在尝试在Android中播放RTSP流,而服务器是Darwin流媒体服务器。现在我已经尝试过VideoView和MediaPlayer,当我使用3G时它们总能正常工作,但有时我会使用Wifi时遇到问题,特别是当我在我的工作场所使用Wifi时,以及LogCat中的错误:

PlayerDriver( 31): buffering (0)

我已经四处搜索并猜测原因可能是Wifi热点位于防火墙后面并且UDP端口被阻止,而Opencore媒体框架仅支持RTP over UDP。如果我错了,请纠正我。

然后,这是我的问题,如果我无法改变防火墙的情况,我该如何解决呢。如果无法使用内置的VideoView / MediaPlayer,那么如何编写我自己的rtsp客户端。

任何建议将不胜感激:)

提前致谢!

博尔顿

3 个答案:

答案 0 :(得分:2)

我认为你不能对此做多少......继承我的想法:

创建一个将在与Darvin相同的局域网中启动的应用程序,然后它将获得通过UDP(在LAN中)的Darvin的RTP流,然后通过TCP将其传输到WAN,以便您可以访问它。您可以轻松地在C#中编写该应用程序......它将完美地运行。或者如果您有一些Linux发行版,您可以编写一个复杂的Bash脚本,它将使用NC来执行相同的操作...

所以这基本上就是这个想法: enter image description here

答案 1 :(得分:0)

建议使用MediaPlayer来配合RTSP。但正如你所说的那样,WiFi防火墙仍然存在这个问题,在这种情况下你必须启用端口或配置所需的端口。我认为没有解决方案,因为问题在于网络而不是你的代码。所以球不在你的球场上。

答案 2 :(得分:0)

在android中它非常简单有趣。

按照说明操作。

1-在您的计算机上安装VLC(SERVER)并转到Media-> Streaming(Ctrl + S) 2-选择要流式传输的文件,或者如果要流式传输网络摄像头或...单击“捕获设备”选项卡并进行配置,最后单击“流”按钮。 3-在这里你应该进行流服务器配置,只需转到“选项”选项卡并通过以下命令:

:sout = #transcode {vcodec = mp4v,vb = 400,fps = 10,width = 176,height = 144,acodec = mp4a,ab = 32,channels = 1,samplerate = 22050}:rtp {sdp = 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秒......