可在Android MediaPlayer中播放RTSP视频吗?如果是的话,怎么做呢?我得到的错误服务器死错误(100,0),这是我的编码部分包com.example.samplemedia;
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)
发布于 2014-07-08 16:06:34
当然,您可以考虑RTSP是android MediaPlayer支持的格式之一。下面是一个简短的例子,说明如何从youtube上播放RTSP。
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();
}
}
希望它有帮助;)
https://stackoverflow.com/questions/24634792
复制相似问题