为安卓开发流媒体服务器

3 人关注

我正试图开发一个流媒体服务器,以安卓手机作为客户端使用。这立即给我带来了一个限制,即开发一个使用RTSP的服务器。我精通Java编程,发现Netty(Java NIO)可以用来填补Java媒体框架在这个协议上的巨大空白。我已经用它玩了一圈,但没有真正的成功。我知道live555,但我的时间很紧,而且我真的不想开始用C++来捣乱,因为我对这个问题所知甚少。我已经在这个问题上纠结了好几个星期了,却没有任何实质性的进展。流媒体到安卓肯定是可行的,因为安卓市场上有许多专有的应用程序。谁有这方面的经验和知识,请让我知道是否有一个简单的方法来实现RTSP AV媒体服务器,只需流式传输.mp4或.3gp和.mp3,用于安卓,而无需使用live555库。如果没有,我将不得不迅速提高C++的速度。先谢谢你了。

4 个评论
@user673090:我不明白这个说法...... "这一下子就把我限制在了开发一个使用RTSP的服务器上"......为什么你会被限制在使用RTSP?我可以在IIS中创建一个虚拟目录,指向我个人电脑上的音乐文件夹,只需几行代码就可以通过Wi-Fi连接使用HTTP将MP3文件传输到我的Android设备。好吧,我并不是说这是你所谓的 "强大的 "AV服务器解决方案,但它肯定不需要RTSP。请说明你为什么需要RTSP,以及它与安卓系统有什么具体关系。
你好,谢谢你的回复。 我确实一直在为RTSP传输到安卓的问题纠结。之所以得出这个结论,而且是相对于安卓而言,是因为如果要通过传输协议使用RTP,就必须使用RTSP。现在我知道HTTP也可以用于流媒体(渐进式),这很快就会成为一个更好的选择。你能不能详细说明一下你是如何以及用什么来通过HTTP将音乐流传到你的手机上的。谢谢你。
@user673090:好吧,我明白了RTP和RTSP之间的联系,但我还是不明白是什么让你认为流媒体到Android设备上需要RTP。给我10分钟时间,我将发布一些代码来演示我的HTTP例子。
@user673090: 仔细想想,我明白你为什么要使用RTP/RTSP......用于寻求控制等。对吗?RTP/RTSP很庞大--我已经把RFC打印出来放在角落里的一叠纸里,我不确定我是否想从头开始实现它。总之,简单的渐进式HTTP流媒体代码已在我的答案中公布。
android
streaming
rtsp
user673090
user673090
发布于 2011-04-06
3 个回答
Squonk
Squonk
发布于 2011-04-06
已采纳
0 人赞同

好的,就像这样简单的使用HTTP流。

我在WinXP上用IIS创建了一个名为 "Music "的虚拟文件夹,并把它指向一个包含MP3文件的文件夹。这就是流媒体文件所需的完整活动(名字是硬编码的)。

BTW,它被称为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;