首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >RTSP视频不在Android MediaPlayer中播放

RTSP视频不在Android MediaPlayer中播放
EN

Stack Overflow用户
提问于 2014-07-08 14:43:30
回答 1查看 1.9K关注 0票数 1

可在Android MediaPlayer中播放RTSP视频吗?如果是的话,怎么做呢?我得到的错误服务器死错误(100,0),这是我的编码部分包com.example.samplemedia;

代码语言:javascript
运行
复制
import java.io.IOException;

import android.app.Activity;
import android.media.AudioManager;
import android.media.ExifInterface;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.media.MediaPlayer.OnBufferingUpdateListener;
import android.media.MediaPlayer.OnErrorListener;
import android.net.Uri;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
import android.widget.MediaController;
import android.widget.VideoView;

public class MainActivity extends Activity implements Callback,
        OnPreparedListener,OnBufferingUpdateListener,OnErrorListener {
    MediaPlayer mediaPlayer;
    SurfaceHolder surfaceHolder;
    SurfaceView playerSurfaceView;
    String videoSrc = "rtsp://r3---sn-a5m7zu7s.c.youtube.com/CiILENy73wIaGQnZtkPljfg7OhMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        playerSurfaceView = (SurfaceView) findViewById(R.id.playersurface);

        surfaceHolder = playerSurfaceView.getHolder();
        surfaceHolder.addCallback(this);
    }

    @Override
    public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
        // TODO Auto-generated method stub

    }

    @Override
    public void surfaceCreated(SurfaceHolder arg0) {

        try {
            mediaPlayer = new MediaPlayer();
            mediaPlayer.setDisplay(surfaceHolder);
            mediaPlayer.setDataSource(videoSrc);
            mediaPlayer.prepare();
            mediaPlayer.setOnPreparedListener(this);
            mediaPlayer.setOnBufferingUpdateListener(this);
            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            mediaPlayer.setOnErrorListener(this);

        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onPrepared(MediaPlayer mp) {
        mediaPlayer.start();
    }

    @Override
    public void onBufferingUpdate(MediaPlayer mp, int percent) {
        mp = this.mediaPlayer;
        percent = 90;
    }

    @Override
    public boolean onError(MediaPlayer arg0, int arg1, int arg2) {
        // TODO Auto-generated method stub
        return true;
    }




}

这是我的逻辑结果,结果是07-09 12:17:05.484: E/MediaPlayer(3990):错误(1,-2147483648) 07-09 12:17:05.484: W/System.err(3990):java.io.IOException: status=0x1 07-09 12:17:05.494: W/System.err(3990):at android.media.MediaPlayer.prepare(原生方法) 07-09 12:17:05.494: W/System.err(3990):at status=0x1 07-09 12:17:05.494: W:android.view.SurfaceView.updateWindow(SurfaceView.java:1126) 07-09 12:17:05.494: W/System.err(3990):android.view.SurfaceView.access$000(SurfaceView.java:88) 07-09 12:17:05.494: W/System.err(3990):android.view.SurfaceView$3.onPreDraw(SurfaceView.java:186) 07-09 12:17:05.494: 05.494: W/System.err(3990):在android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:590) 07-09 12:17:05.494: W/System.err(3990):android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1642) 07-09 12:17:05.494: W/System.err(3990):android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2467) 07-09 12:17:05.494: 05.494: W/System.err(3990):at android.os.Handler.dispatchMessage(Handler.java:99) 07-09 12:17:05.494: W/System.err(3990):at android.os.Looper.loop(Looper.java:137) 07-09 12:17:05.494: W/System.err(3990):at android.os.Looper.loop 07-09 12:17:05.494: W/System.err(3990):at java.lang.reflect.Method.invokeNative(原生方法) 07-0912:17:05.494: W/System.err(3990):java.lang.reflect.Method.invoke(Method.java:511) 07-09 12:17:05.494: W/System.err(3990):com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 07-09 12:17:05.494: W/System.err(3990):com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 07-09 12:17:05.494: W/System.err(3990):在dalvik.system.NativeStart.main(原生方法) 07-09 12:05.574: I/MediaPlayer(3990):Info (701,0) 07-09 12:17:07.784: W/AudioSystem(3990):AudioFlinger服务器死了!07-09 12:17:07.784: W/IMediaDeathNotifier(3990):媒体服务器死了07-09 12:17:07.784: 07.784: E/MediaPlayer(3990):错误(100,0) 07-09 12:17:07.784: E/MediaPlayer(3990):Error (100,0) 07-09 12:17:07.784: E/MediaPlayer(3990):error (100,0) 07-09 12:17:07.784: E/MediaPlayer(3990):Error (100,0)

EN

回答 1

Stack Overflow用户

发布于 2014-07-08 16:06:34

当然,您可以考虑RTSP是android MediaPlayer支持的格式之一。下面是一个简短的例子,说明如何从youtube上播放RTSP。

代码语言:javascript
运行
复制
      public void startPlayer(final String videoSrc, final SurfaceHolder holder) {

      videoSource = "rtsp://v6.cache1.c.youtube.com/CjYLENy73wIaLQkDsLHya4-" +
            "Z9hMYDSANFEIJbXYtZ29vZ2xlSARSBXdhdGNoYKX4k4uBjbOiUQw=/0/0/0/video.3gp";

      if (videoSource != null) {

        if (mediaPlayer != null) {
            mediaPlayer.stop();
        }
        try {

            mediaPlayer = new MediaPlayer();

            final Surface surface = holder.getSurface();

            if (surface == null) {
                return;
            }

            mediaPlayer.setDisplay(holder);
            mediaPlayer.setDataSource(videoSrc);
            mediaPlayer.prepare();
            mediaPlayer.setOnPreparedListener(this);
            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        } catch (final IllegalArgumentException e) {
            e.printStackTrace();
        } catch (final SecurityException e) {
            e.printStackTrace();
        } catch (final IllegalStateException e) {
            e.printStackTrace();
        } catch (final IOException e) {
            e.printStackTrace();
        }
        }
      }

      @Override
      public void onPrepared(final MediaPlayer mp) {
      Log.i(tag, "onPrepared...mediaPlayer.start()");
      try {
          mediaPlayer.start();
      } catch (final Exception e) {
          e.printStackTrace();
      }
  }

希望它有帮助;)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24634792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档