在 Android 应用程序中播放 RTSP 流

Posted

技术标签:

【中文标题】在 Android 应用程序中播放 RTSP 流【英文标题】:Play RTSP streaming in an Android application 【发布时间】:2012-07-01 18:13:48 【问题描述】:

我正在尝试开发一个基于 android 的应用程序,它可以播放实时流中的视频。此直播使用Wowza Media Server 制作。

网址是:

rtsp://tv.hindiworldtv.com:1935/live/getpun

我在 ecliplse 中尝试过以下代码:

package com.kalloh.wpa;

import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.net.Uri;
import android.os.Bundle;
import android.view.Window;
import android.widget.MediaController;
import android.widget.VideoView;


public class a extends Activity 

    VideoView videoView;
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

        //Create a VideoView widget in the layout file
        //use setContentView method to set content of the activity to the layout file which contains videoView
        this.setContentView(R.layout.videoplayer);

        videoView = (VideoView)this.findViewById(R.id.videoView);

        //add controls to a MediaPlayer like play, pause.
        MediaController mc = new MediaController(this);
        videoView.setMediaController(mc);

        //Set the path of Video or URI
        videoView.setVideoURI(Uri.parse("rtsp://tv.hindiworldtv.com:1935/live/getpnj"));
        //

        //Set the focus
        videoView.requestFocus();
    

起初,它不起作用。

现在它开始工作,但在 20 到 30 秒后停止。我该如何解决这个问题?

【问题讨论】:

我在使用 vlc 时遇到了同样的问题,并在这里找到了一些东西(这不是解决方案,而是有用的信息):code.google.com/p/android/issues/detail?id=15229 现在给定的 url 可以在 Android 4 及更高版本上运行。但问题仍然是音频不连续。播放 2 秒后会延迟 1 秒。 你是如何解决这个问题的? 您的代码无需任何更改即可在 Nexus7 上运行.. 我在 Nexus10 上尝试了 android 版本 4.4.4,它给出了Can't play this video 异常。 【参考方案1】:

使用VideoView是一个很好的解决方案,但我们也可以使用native player来播放RTSP。这是一个例子:

if (movieurl.startsWith("rtsp://")) 
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(movieurl));
    startActivity(intent);

请记住,您的媒体必须使用 Android Supported Media Formats (codecs) 创建。

【讨论】:

我不明白,此代码会打开已安装的应用程序还是您的应用程序是视频显示应用程序? 如果我在我的应用程序中流式传输(例如使用 dvblast),当我打开 ThirdApp(根据您的解决方案)时,我当前的应用程序进入后台并且不再广播;所以第三个打开的​​应用程序无法接收任何东西。这种情况该如何处理? @Mr.Hyde:也许你的广播应用应该使用服务,这样它才能在后台继续运行? 哪个更好?通过“Native player”或“video view”播放【参考方案2】:

我在 ICS 4.x 中也遇到了同样的问题。此外,您可以检查您的流 URL 是否正常工作。

还可以使用this sample URL 检查您的代码。

【讨论】:

感谢您发布我们知道有效的媒体链接!很有帮助 它不适用于mp3流,你试过吗?我也在使用 Wowza 服务器【参考方案3】:

我在使用 Galaxy Note N7000 (ICS 4.0.3) 和 VLC 2.0.2 时遇到了同样的问题 - 视频在 60 秒后消失。但是当我转向 VLC 媒体播放器 1.1.4 时,一切正常!

所以有时它取决于媒体服务器。您可以从 YouTube 尝试 RTSP(访问 m.youtube.com,然后右键单击某些视频 -> 复制位置链接 -> 这就是您需要的 RTSP 链接)。

【讨论】:

我找到了解决方案。传输应在 Android 的首选设置范围内。更多详情,请查看@developer.android.com/guide/appendix/media-formats.html 本机 RTSP 堆栈可能不会发送 GET_PARAMETER 来保持连接处于活动状态...查看net7mma.codeplex.com【参考方案4】:

我搜索并尝试了很多代码在Android上播放RTSP,最后我找到了这个库。 希望这对寻找这种类型的人有所帮助 RTSP Player using Vlc

【讨论】:

【参考方案5】:

我花了整整一个月的时间阅读和研究这个主题,我使用 VLC 库 从相机播放 RTSP 流,尽管它可以很好地解决问题这个库就是它的延迟。我需要一个库来实时播放流,所以我们在 Linux 和 Nvidia 板上测试 Gstreamer,它工作正常,没有延迟,我设法重建了 Gstreamer 库在我的应用程序上,它运行良好,而且非常强大。 The Gstreamer Library

【讨论】:

【参考方案6】:

我找到了解决方案。传输应在 Android 的首选设置范围内。更多详情,请参阅Supported Media Formats

【讨论】:

“传输应该在 Android 的首选设置范围内”是什么意思?? 可能是“预缓冲”的意思。 @SJSSoft 你这是什么意思?解决办法是什么? 如果您正在处理的流不是推荐的格式之一(由 Google 推荐),则会出现此问题 您找到了解决方案,但您似乎无法举例说明如何解决?

以上是关于在 Android 应用程序中播放 RTSP 流的主要内容,如果未能解决你的问题,请参考以下文章

RTSP播放器网页web无插件直播流媒体音视频播放器EasyPlayer-RTSP-Android解码获取视频帧的方法

如何在 android 中播放 RTSP [live streaming] 链接?

android 如何播放rtsp://110.80.31.70:6000/channe1

Android videoview不播放rtsp

android 怎么播放rtsp流

在 Android 中播放 RTSP 流视频时如何保持宽高比?