Android 上的 RTSP 实时流播放

9

我想在Android上进行直播。我尝试了很多方法,但都没有成功。我该怎么做?

这是RTSP的例子:

mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(KralStream.getTvStreamUrl().toString());
mMediaPlayer.setDisplay(holder);
mMediaPlayer.prepareAsync();
mMediaPlayer.setOnBufferingUpdateListener(this);
mMediaPlayer.setOnCompletionListener(this);
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setOnVideoSizeChangedListener(this);
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mMediaPlayer.setLooping(true);

异常 :05-26 10:22:46.186:
错误/MediaPlayerService(10157):
创建PVPlayer 05-26 10:23:06.382:
错误/PlayerDriver(10157): 命令
PLAYER_INIT 完成时出现错误或
信息为 -1 05-26 10:23:06.382:
错误/MediaPlayer(23800): 错误 (1,
-1) 05-26 10:23:06.382: 错误/MediaPlayer(23800): 错误 (1,-1)

RTSP:

VideoView videoView = (VideoView)findViewById(R.id.videoView1);
Uri uri = Uri.parse("rtsp://strm-3.tr.medianova.tv/rkraltv/rkraltv");
videoView.setVideoURI(uri);
videoView.start();

它会显示这个消息:
抱歉,无法播放此视频。异常; 05-26 10:40:08.979: ERROR/MediaPlayerService(10157): 创建PVPlayer 05-26 10:40:09.188: INFO/ActivityManager(10163): 显示的活动 com.giantrabbit.nagare/.KralTvNow:433 毫秒(总计433毫秒)05-26 10:40:11.702: WARN/PowerManagerService(10163): 计时器 0x3->0x3 | 0x1 05-26 10:40:29.061: WARN/MediaPlayer(24284):信息/警告 (1, 26)05-26 10:40:29.061: INFO/MediaPlayer(24284):信息(1,26)05-26 10:40:29.100: ERROR/PlayerDriver(10157):命令 PLAYER_INIT 完成,出现错误或 信息 -1 05-26 10:40:29.104: ERROR/MediaPlayer(24284):错误(1, -1)05-26 10:40:29.108:ERROR/MediaPlayer(24284):错误(1,-1)

RTSP:

mPreview = (SurfaceView) findViewById(R.id.surface);
holder = mPreview.getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
extras = getIntent().getExtras();

public void play() {
    try {
        Uri video = KralStream.getTvStreamUrl();
        Toast.makeText(this, video.toString(), Toast.LENGTH_SHORT).show();
        mMediaPlayer = new MediaPlayer();
        mMediaPlayer.setDataSource(path);
        mMediaPlayer.setDisplay(holder);
        mMediaPlayer.prepare();
        mMediaPlayer.setOnBufferingUpdateListener(this);
        mMediaPlayer.setOnCompletionListener(this);
        mMediaPlayer.setOnPreparedListener(this);
        mMediaPlayer.setOnVideoSizeChangedListener(this);
        mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    }
    catch (Exception e) {
        Log.e(TAG, "error: " + e.getMessage(), e);
    }
}

异常:

05-26 10:36:57.589: ERROR/MediaPlayerService(10157): 创建PVPlayer 05-26 10:37:20.542: ERROR/PlayerDriver(10157): 命令PLAYER_INIT完成时出现错误或信息为-1 05-26 10:37:20.542: ERROR/MediaPlayer(24240): 错误(1,-1) 05-26 10:37:20.565: WARN/PlayerDriver(10157): PVMFInfoErrorHandlingComplete 05-26 10:37:20.682: ERROR/MediaPlayerDemo(24240): 准备失败:状态=0x1 05-26 10:37:20.682: ERROR/MediaPlayerDemo(24240): java.io.IOException: 准备失败:状态=0x1 05-26 10:37:20.682: ERROR/MediaPlayerDemo(24240): at android.media.MediaPlayer.prepare(Native Method) 05-26 10:37:20.682: ERROR/MediaPlayerDemo(24240): at com.giantrabbit.nagare.KralTvNow.play(KralTvNow.java:162) 05-26 10:37:20.682: ERROR/MediaPlayerDemo(24240): at com.giantrabbit.nagare.KralTvNow.surfaceCreated(KralTvNow.java:215) 05-26 10:37:20.682: ERROR/MediaPlayerDemo(24240): at android.view.SurfaceView.updateWindow(SurfaceView.java:536) 05-26 10:37:20.682: ERROR/MediaPlayerDemo(24240): at android.view.SurfaceView.dispatchDraw(SurfaceView.java:339) 05-26 10:37:20.682: ERROR/MediaPlayerDemo(24240): at android.view.ViewGroup.drawChild(ViewGroup.java:1638) 05-26 10:37:20.682: ERROR/MediaPlayerDemo(24240): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367) 05-26 10:37:20.682: ERROR/MediaPlayerDemo(24240): at android.view.ViewGroup.drawChild(ViewGroup.java:1638) 05-26 10:37:20.682: ERROR/MediaPlayerDemo(24240): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367) 05-26 10:37:20.682: ERROR/MediaPlayerDemo(24240): at android.view.View.draw(View.java:6796) 05-26 10:37:20.682: ERROR/MediaPlayerDemo(24240): at android.widget.FrameLayout.draw(FrameLayout.java:352) 05-26 10:37:20.682: ERROR/MediaPlayerDemo(24240): at android.view.ViewGroup.drawChild(ViewGroup.java:1640) 05-26 10:37:20.682: ERROR/MediaPlayerDemo(24240): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367) 05-26 10:37:20.682: ERROR/MediaPlayerDemo(24240): at android.view.View.draw(View.java:6796) 05-26 10:37:20.682: ERROR/MediaPlayerDemo(24240): at android.widget.FrameLayout.draw(FrameLayout.java:352) 05-26 10:37:20.682: ERROR/MediaPlayerDemo(24240): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1894) 05-26 10:37:20.682: ERROR/MediaPlayerDemo(24240): at android.view.ViewRoot.draw(ViewRoot.java:1407) 05-26 10:37:20.682: ERROR/MediaPlayerDemo(24240): at android.view.ViewRoot.performTraversals(ViewRoot.java:1163) 05-26 10:37:20.682: ERROR/MediaPlayerDemo(24240): at android.view.ViewRoot.handleMessage(ViewRoot.java:1727) 05-26 10:37:20.682: ERROR/MediaPlayerDemo(24240): at android.os.Handler.dispatchMessage(Handler.java:99) 05-26 10:37:20.682: ERROR/MediaPlayerDemo(24240): at android.os.Looper.loop(Looper.java:123) 05-26 10:37:20.682: ERROR/MediaPlayerDemo(24240): at android.app.ActivityThread.main(ActivityThread.java:4627) 05-26 10:37:20.682: ERROR/MediaPlayerDemo(24240): at java.lang.reflect.Method.invokeNative(Native Method) 05-26 10:37:20.682: ERROR/MediaPlayerDemo(

这是HTTP的一个例子:

mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource("http://ikral.garantisistem.com:1935/ikral/smil:kral.smil/playlist.m3u8");
mMediaPlayer.setDisplay(holder);
mMediaPlayer.prepareAsync();
mMediaPlayer.setOnBufferingUpdateListener(this);
mMediaPlayer.setOnCompletionListener(this);
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setOnVideoSizeChangedListener(this);
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mMediaPlayer.setLooping(true);

异常:

05-26 10:16:24.276: 错误/MediaPlayerService(10157): 创建PVPlayer 05-26 10:16:24.292: 错误/(10157): PVMFMemoryBufferWriteDataStreamImpl构造函数内部 05-26 10:16:24.346: 信息/PlayerDriver(10157): 缓冲(100) 05-26 10:16:24.346: 错误/(10157): PVMFMemoryBufferReadDataStreamImpl构造函数内部 05-26 10:16:24.346: 错误/(10157): PVMFMemoryBufferReadDataStreamImpl构造函数内部 05-26 10:16:24.346: 错误/(10157): PVMFMemoryBufferReadDataStreamImpl构造函数内部 05-26 10:16:24.346: 错误/(10157): PVMFMemoryBufferReadDataStreamImpl构造函数内部 05-26 10:16:24.346: 错误/(10157): PVMFMemoryBufferReadDataStreamImpl构造函数内部 05-26 10:16:24.346: 错误/(10157): PVMFMemoryBufferReadDataStreamImpl构造函数内部 05-26 10:16:24.346: 错误/(10157): PVMFMemoryBufferReadDataStreamImpl构造函数内部 05-26 10:16:24.346: 错误/(10157): PVMFMemoryBufferReadDataStreamImpl构造函数内部 05-26 10:16:24.346: 错误/(10157): PVMFMemoryBufferReadDataStreamImpl构造函数内部 05-26 10:16:24.346: 错误/(10157): PVMFMemoryBufferReadDataStreamImpl构造函数内部 05-26 10:16:24.346: 警告/MediaPlayer(23736): 信息/警告(1,26) 05-26 10:16:24.354: 错误/PlayerDriver(10157): 命令PLAYER_INIT完成,但出现错误或信息为-10 05-26 10:16:24.354: 错误/MediaPlayer(23736): 错误(-10,-10) 05-26 10:16:24.354: 警告/PlayerDriver(10157): PVMFInfoErrorHandlingComplete 05-26 10:16:24.393: 信息/MediaPlayer(23736): 信息(1,26) 05-26 10:16:24.393: 错误/MediaPlayer(23736): 错误(-10,-10)

HTTP:

VideoView videoView = (VideoView)findViewById(R.id.videoView1);
Uri uri = Uri.parse("http://ikral.garantisistem.com:1935/ikral/smil:kral.smil/playlist.m3u8");
videoView.setVideoURI(uri);
videoView.start();

它会显示以下信息:

"抱歉,无法播放此视频。"

enter image description here


你在用哪款手机进行测试?一些像MOTOROLA这样的手机不支持某些视频格式。但是像Nexus这样的手机将支持这种视频流格式。 - Eby
我在三星Galaxy S和三星Galaxy Tab上进行了测试。 - Filiz Gökçe
1
网址是:rtsp://strm-3.tr.medianova.tv/rkraltv/rkraltv 编解码类型为h264 - Filiz Gökçe
你好,能告诉我你是如何在安卓上播放RTSP的吗? - Rat-a-tat-a-tat Ratatouille
有时候这种情况只会在模拟器上出现。你的视频格式是H.264吗?如果是,那么流媒体视频不应该有问题。但是,你仍然可能会看到错误信息。如果你已经授予了网络权限,建议在真实设备上进行测试。 - Onur Tuna
嗨,你解决了这个问题吗? - v teja
3个回答

2
请在您的 AndroidManifest.xml 文件中添加网络权限,例如:

请在AndroidManifest.xml文件中添加网络权限,如下所示

<uses-permission android:name="android.permission.INTERNET" />


1

0

这是由于视频格式的原因。尝试将其转换为3GP格式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接