2011-04-05 77 views
3

我正在尝试开发适用于Android手机的流媒体AV媒体服务器作为客户端。这立即给我制约了开发一个使用RTSP的服务器。我熟悉Java编程,并发现可以使用Netty(Java NIO)来填补此协议的Java Media Framework中的其他巨大缺口。我玩过它并没有取得真正的成功。我知道live555,但我的日程安排很紧,并不想开始搞乱C++,因为我对这个主题知之甚少。我一直被困在这个问题上好几个星期,没有什么真正的表现。由于Android市场上有许多专有应用程序,因此必须流式传输至android。如果有一种简单的方法来实现一个RTSP AV媒体服务器,它只需流传输.mp4或.3gp和.mp3以便在不使用live555库的情况下使用android,那么是否能够有经验和有关此主题的知识?如果没有,我只需要快速熟悉C++。先谢谢你。开发适用于Android的流媒体服务器

+0

@ user673090:我不明白这句话......“这立即给我制定了一个使用RTSP的服务器的限制条件”......为什么你不得不使用RTSP?我可以在IIS中创建一个虚拟目录,指向我的PC上的音乐文件夹,并通过Wi-Fi连接使用HTTP将不超过几行代码流mp3文件传输到我的Android设备。好吧,我并不是说这就是你称之为“健壮”的AV服务器解决方案,但它肯定不需要RTSP。详细说明您为什么需要RTSP以及它与Android有什么关系。 – Squonk 2011-04-05 23:50:27

+1

嗨,感谢您的回复。我真的一直在苦于RTSP转移到Android。这个结论已经被绘制并且与Android相关的原因是,如果RTP要通过传输协议使用,则必须使用RTSP。现在我意识到HTTP也可以用于流(逐步),这很快成为一个更好的选择。您能否详细说明您如何以及如何通过HTTP将音乐流式传输至手机。谢谢。 – user673090 2011-04-06 00:07:11

+0

@ user673090:好的,我理解RTP和RTSP之间的关系,但我仍不明白什么会让您认为流式传输到Android设备将需要RTP。给我10分钟,我会张贴一些代码来演示我的HTTP示例。 – Squonk 2011-04-06 00:18:52

回答

1

好吧,很简单,因为这是使用HTTP流式传输。

我在WinXP上用IIS创建了一个名为'Music'的虚拟文件夹,并将其指向包含mp3文件的文件夹。这是流式传输文件所需的完整活动(名称硬编码)。

顺便说一句,它叫做SimpleNetRadio,就像我最初开始玩Shoutcast流一样。

package com.mycompany.SimpleNetRadio; 

import android.app.Activity; 
import android.media.AsyncPlayer; 
import android.media.AudioManager; 
import android.net.Uri; 
import android.os.Bundle; 

public class SimpleNetRadio extends Activity 
{ 
    private AsyncPlayer ap = null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     ap = (AsyncPlayer) getLastNonConfigurationInstance(); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     if (ap != null) 
      ap.stop(); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 

     if (ap == null) { 
      ap = new AsyncPlayer("Simple Player"); 
      ap.play(this, Uri.parse("http://192.168.1.1/Music/02%20-%20Don't%20Stop%20Believin'.mp3"), true, AudioManager.STREAM_MUSIC); 
     } 
    } 

    @Override 
    public Object onRetainNonConfigurationInstance() { 
     return ap; 
    } 
} 

你也应该能够与更多的代码与MediaPlayer的做到这一点 - 这将更好地处理错误条件,也不会需要更多的工作。

+0

它也可以用于https和mp4吗? – 2013-05-02 14:21:50

+0

@AdilMalik:对不起,我不知道。我从来没有试过。上面的代码非常独立,您需要做的就是创建一个Android项目并将上面的代码复制/粘贴到它中,然后尝试。 – Squonk 2013-05-02 19:39:40

0

我不确定您的具体需求是什么,但对于静态文件,您可能会尝试将Amazon S3和CloudFront相结合,我相信它支持RTSP。

+0

嗨,欢迎回复。这个主题看起来非常有趣,但它并不是我正在寻找的东西。我希望开发服务器,以便它可以在家庭联网的计算机上进行恶意安装。 – user673090 2011-04-05 23:26:07

1

使用Netty开发RTSP流媒体服务器是相当直接的任务,不需要太多时间。我自己写了它,它像魅力一样工作。你可以看看使用Netty框架开始的一些其他服务器的示例实现。