Android 3.0+ 上的实时视频流(HLS 和 RTSP/RTP)

我需要一些帮助才能开始在 Android 上使用 HLS 和 RTSP。

为了测试 RTSP,我正在运行 LIVE555 媒体服务器。服务器有从 live555.com 下载的 bibpop-gear1-all.ts 示例文件和索引文件。所以我的 URL 只是 [http://(myIP):80/bipbop-gear1-all.ts](http://(myIP) :80/bibpbop-gear1-all.ts) 在 Android 3.0 模拟器上,浏览器会显示几分钟的下载进度,然后什么也没有。浏览器窗口中没有更新,没有 Android 下载通知。它只是停止。
在 Android 3.2.1 设备上,它会启动视频播放器,但会立即显示 Cannot play video , Sorry, this video cannot be played. 在一个简单的测试应用程序中(从 Android 问题跟踪器下载问题 17118:Android 3.1 无法播放 HTTP Live Streaming ),MediaPlayer.prepare() 短暂地访问服务器,并立即抛出带有消息 Prepare failed.: status=0x1 的 IOException。 Logcat 还显示, error (1, -2147483648)

同一个测试应用程序可以毫无问题地播放本地 mp4,所以我相信这很好。在 iPad 上,相同的 URL 播放视频,至少证明我的服务器是好的。

为了测试 HTTP 实时流 (HLS),我使用了 apple.com 提供的 bipbop 示例: http://devimages.apple.com/iphone/samples/bipbop/gear1/prog_index.m3u8 httplive://devimages.apple.com/iphone/samples/bipbop/gear1/prog_index.m3u8

在 Android 3 模拟器中,示例应用程序开始使用“httplive”协议播放地址,但它挂起。使用“http”协议,在 MediaPlayer.start() 之后,它会挂起片刻,但没有显示任何内容。然后logcat显示:

W/AudioSystem(715): AudioFlinger server died!
W/IMediaDeathNotifier(715): media server died
E/MediaPlayer(715): error (100, 0)
E/MediaPlayer(715): Error (100,0)

并且我的 onCompletion() 处理程序被调用。

在真正的 3.2.1 设备上,使用 http 协议的应用程序的行为与在 3.0 模拟器上的行为相同。 httplive 在准备时抛出一个 IOException 并带有消息 Prepare failed.: status=0x1

在 3.0 模拟器上的浏览器中,http 地址会打开一个音频播放器,该播放器会停止,然后显示一条 toast 消息,内容为 Sorry, the player does not support this type of audio file 。 httplive 地址只是去谷歌搜索。

在真正的 3.2.1 设备上的浏览器中,http 地址会弹出一个对话框, Complete action using ,其中包含以下选项: MusicVideo player 。按 Video player ,我得到 Cannot play videoSorry, this video cannot be played 。按 Music ,我得到 Couldn't play the track you requested. 。同样,此地址在 iPad 上运行良好。

任何帮助将不胜感激。

stack overflow Live Video Streaming on Android 3.0+ (HLS and RTSP/RTP)
原文答案

答案:

作者头像

无法帮助您使用 RTSP 协议。

对于 HLS,我能够从 Apple 网站获取示例视频,该视频使用针对 2.3.4 和 3.0 构建的简单应用程序。

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mMediaController = new MediaController(this);
    mVideoView = (VideoView)findViewById(R.id.video_view);
    mVideoView.setVideoPath(mVideoPath);
    mVideoView.setMediaController(mMediaController);
    mVideoView.setOnPreparedListener(new OnPreparedListener() {

        @Override
        public void onPrepared(MediaPlayer mp) {
            // TODO Auto-generated method stub
            mp.start();
        }
    });
}
作者头像

RTSP 应该在 android 上受支持,但似乎被破坏了,我最近不得不播放 rtsp 流并最终使用 ffmpeg 编写了我自己的播放器。您可以尝试几个不错的项目。海豚就是其中之一。

作者头像

除非您正在开展一个项目来了解视频播放器和流媒体,否则使用现有播放器播放流媒体可能是最简单的方法。

根据我的经验,RTSP 可能很棘手,所以我发现采用此处概述的结构化方法是值得的: https://stackoverflow.com/a/67709149/334402