小弟在做一个Android客户端,用于监控电脑端摄像头传过来的流,就是能在Android客户端看到电脑摄像头看到的东西。
现在遇到了问题不会解决。
1.先用了DarWin来充当流服务器,然后它里面有配置一个端口和地址,然后调用rtsp://218.192.127.43:554/live.sdp
电脑上安装一个VLC。然后就可以看到摄像头传来的画面了。
2.我想在Android端也实现这样的功能。我用SurfaceView,Mediaplayer来播放。但是播放不了。
我查了网上说是可以播放的(不知道是否可以。)
然后就报错了。下面是我的代码
public class LiveViewFragment extends Fragment implements OnClickListener
{
Context context;
SurfaceView sfv_liveview;
Button btn_connect;
MediaPlayer mediaPlayer;
Boolean needResume;
String rtspUrl = "rtsp://218.192.127.43:554/live.sdp";//这里从服务器得到实时视频播放地址;
@SuppressWarnings("deprecation")
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
{
context = getActivity();
View view = LayoutInflater.from(context).inflate(R.layout.activity_liveview, container, false);
sfv_liveview = (SurfaceView) view.findViewById(R.id.sfv_liveview);
btn_connect = (Button) view.findViewById(R.id.btn_connect);
sfv_liveview.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
sfv_liveview.getHolder().addCallback(new Callback()
{
@Override
public void surfaceCreated(SurfaceHolder holder)
{
//程序创建的执行的
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
{
//播放界面改变了
}
@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
//程序销毁的执行
}
});
btn_connect.setOnClickListener(this);
return view;
}
@Override
public void onClick(View v)
{
/*vv_liveview.setVideoURI(Uri.parse(rtspUrl));
vv_liveview.requestFocus();
vv_liveview.start();*/
switch (v.getId())
{
case R.id.btn_connect:
Play();
btn_connect.setEnabled(false);
break;
default:
break;
}
}
private void Play()
{
try
{
mediaPlayer = new MediaPlayer();
System.out.println("mediaPlayer创建了~!");
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDisplay(sfv_liveview.getHolder());
System.out.println(rtspUrl);
mediaPlayer.setDataSource(rtspUrl);
/*mediaPlayer.setOnInfoListener(new OnInfoListener()
{
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra)
{
switch (what)
{
case MediaPlayer.MEDIA_INFO_BUFFERING_START:
if (mediaPlayer.isPlaying())
{
mediaPlayer.stop();
needResume = true;
}
break;
case MediaPlayer.MEDIA_INFO_BUFFERING_END:
if (needResume)
{
mediaPlayer.start();
}
default:
break;
}
return false;
}
});*/
System.out.println("跑到准备前面了");
mediaPlayer.prepare();
System.out.println("跑到start前面了~!");
mediaPlayer.start();
/*mediaPlayer.setOnPreparedListener(new OnPreparedListener()
{
@Override
public void onPrepared(MediaPlayer mp)
{
System.out.println("跑到start前面了~!");
mediaPlayer.start();
}
});*/
mediaPlayer.setOnCompletionListener(new OnCompletionListener()
{
@Override
public void onCompletion(MediaPlayer mp)
{
mp.release();
btn_connect.setEnabled(true);
}
});
} catch (Exception e)
{
Toast.makeText(context, "播放失败",Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
}
}
3.这样一直播放不了。请大神指点。下面是logcat里面的东西
04-14 16:01:50.360: E/MediaPlayer-JNI(21089): QCMediaPlayer mediaplayer NOT present
04-14 16:01:50.360: I/System.out(21089): mediaPlayer创建了~!
04-14 16:01:50.360: I/System.out(21089): rtsp://218.192.127.43:554/live.sdp
04-14 16:01:50.360: I/System.out(21089): 跑到准备前面了
04-14 16:01:50.370: W/MediaPlayer(21089): info/warning (701, 0)
04-14 16:01:50.400: E/MediaPlayer(21089): error (1, -2147483648)
04-14 16:01:50.410: W/System.err(21089): java.io.IOException: Prepare failed.: status=0x1
04-14 16:01:50.410: W/System.err(21089): at android.media.MediaPlayer.prepare(Native Method)
04-14 16:01:50.410: W/System.err(21089): at com.du.monitorclient.LiveViewFragment.Play(LiveViewFragment.java:132)
04-14 16:01:50.410: W/System.err(21089): at com.du.monitorclient.LiveViewFragment.onClick(LiveViewFragment.java:83)
04-14 16:01:50.410: W/System.err(21089): at android.view.View.performClick(View.java:4444)
04-14 16:01:50.410: W/System.err(21089): at android.view.View$PerformClick.run(View.java:18440)
04-14 16:01:50.410: W/System.err(21089): at android.os.Handler.handleCallback(Handler.java:733)
04-14 16:01:50.410: W/System.err(21089): at android.os.Handler.dispatchMessage(Handler.java:95)
04-14 16:01:50.410: W/System.err(21089): at android.os.Looper.loop(Looper.java:136)
04-14 16:01:50.410: W/System.err(21089): at android.app.ActivityThread.main(ActivityThread.java:5050)
04-14 16:01:50.410: W/System.err(21089): at java.lang.reflect.Method.invokeNative(Native Method)
04-14 16:01:50.410: W/System.err(21089): at java.lang.reflect.Method.invoke(Method.java:515)
04-14 16:01:50.410: W/System.err(21089): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:807)
04-14 16:01:50.410: W/System.err(21089): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:623)
04-14 16:01:50.410: W/System.err(21089): at dalvik.system.NativeStart.main(Native Method)
4.....................请问有没有大神了的,指点一下小弟。怎么修改。或者有没有别的办法可以实现。