RTSP视频可以在Android MediaPlayer中播放吗?如果是,怎么做?我得到的服务器死亡错误(100,0)这是我的编码部分包com的错误。实例样本媒体;
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;
}
}
这是我的Logcat结果,我得到的结果是07-09 12:17:05.484:E/MediaPlayer(3990):error(1,-2147483648)07-09 12:17:05.484:W/System。err(3990):java。木卫一。IOException:准备失败:状态=0x1 07-09 12:17:05.494:W/系统。err(3990):在android上。媒体媒体播放器。制备(天然方法)07-09 12:17:05.494:W/系统。错误(3990):在com。实例抽样媒体。主要活动。surfaceCreated(MainActivity.java:52)07-09 12:17:05.494:W/系统。err(3990):在android上。看法SurfaceView。更新域名(SurfaceView.java:1126)07-09 12:17:05.494:W/System。err(3990):在android上。看法SurfaceView。访问$000(SurfaceView.java:88)07-09 12:17:05.494:W/系统。err(3990):在android上。看法SurfaceView 3美元。onPreDraw(SurfaceView.java:186)07-0912:17:05.494:W/System。err(3990):在android上。看法ViewTreeObserver。dispatchOnPreDraw(ViewTreeObserver.java:590)07-09 12:17:05.494:W/System。err(3990):在android上。看法ViewRootImpl。performTraversals(ViewRootImpl.java:1642)07-09 12:17:05.494:W/System。err(3990):在android上。看法ViewRootImpl。handleMessage(ViewRootImpl.java:2467)07-09 12:17:05.494:W/System。err(3990):在android上。操作系统。处理程序。dispatchMessage(Handler.java:99)07-09 12:17:05.494:W/System。err(3990):在android上。操作系统。活套。loop(Looper.java:137)07-09 12:17:05.494:W/系统。err(3990):在android上。应用程序。活动线程。main(ActivityThread.java:4424)07-0912:17:05.494:W/System。err(3990):在java。朗。反思。方法调用(本机方法)07-09 12:17:05.494:W/系统。err(3990):在java。朗。反思。方法调用(Method.java:511)07-0912:17:05.494:W/System。错误(3990):在com.Android内部的操作系统。ZygoteInit$MethodandArgscaler。运行(ZygoteInit.java:784)07-0912:17:05.494:W/System。错误(3990):在com.Android内部的操作系统。合子体。main(ZygoteInit.java:551)07-0912:17:05.494:W/系统。厄尔(3990):在达尔维克。系统原生艺术。主(本机方法)07-09 12:17:05.574:I/MediaPlayer(3990):信息(701,0)07-09 12:17:07.784:W/AudioSystem(3990):AudioFlinger服务器已死亡!2007-09 12:17:07.784:W/IMediaDeathNotifier(3990):媒体服务器死亡07-09 12:17:07.784:E/MediaPlayer(3990):错误(100,0)07-09 12:17:07.784:E/MediaPlayer(3990):错误(100,0)07-09 12:17:07.784:E/MediaPlayer(3990):错误(100,0)07-09 12:17:07.784:E/MediaPlayer(3990):错误(100,0)
当然,你可以考虑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();
}
}
希望有帮助;)
我正在开发一个应用程序,我使用了谷歌的ExoPlayer,它工作起来很有魅力,现在我想在我的应用程序中添加RTSP支持,但使用ExoPlayer我无法播放,请任何人都可以帮我,如果有人有其他选择,请与我分享。 日志 E/ExoPlayerImplInternal:源错误。网蝴蝶电视。rtmp_客户端。RtmpClient$RtmpIOException at net。蝴蝶电视。rtmp_客户端。R
我目前正在开发一个需要解码UDP多播RTSP流的应用程序。目前,我可以通过ffplay查看RTP流 但是,我尝试使用FFMPEG通过(为了简洁起见,删除了错误检查和清理代码)打开UDP流。 这种方法适用于包含原始编码视频流的文件输入,但对于UDP多播RTSP流,它无法通过对执行的任何错误检查。请告知...
我遵循了一些关于将JavaFX与Swing(JFrame)结合起来播放视频的教程,但是我得到的只是一个黑屏,视频应该没有任何实际的内容播放,也没有错误报告。 我在这里做错了什么,为什么视频不播放? 我尝试了几个. flv视频,没有一个会开始播放(当我在浏览器中打开它们时,它们确实会播放) 我正在运行jre7和jdk1。安装了K-lite完整编解码器包的windows 8.1 N Pro上的7.0_
我在一个回收视图中有几张卡片。每张卡都有一个自定义视频视图。单击视频视图,视频应开始。然而,在我的例子中,它只显示蓝色边框,视频没有运行。代码如下所示, 自定义卡视图。xml: 自定义视频视图: 主要活动: activity\u main。xml: 我希望每张卡最初只显示一个缩略图。单击视频后,相关卡应启动视频(不是全部)。视频启动时,VideoView应占据整个屏幕。我怎样才能做到这一点? 谢谢