杜杜不是我 2015-04-14 07:59 采纳率: 0%
浏览 9134

跪求大神指教Android下播放RTSP实时流问题!

小弟在做一个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.....................请问有没有大神了的,指点一下小弟。怎么修改。或者有没有别的办法可以实现。

  • 写回答

4条回答

  • 年轻的zhangchang 2015-04-15 08:43
    关注

    首先你要保证二者是不是在通一个网络下面 有没有存在丢包的情况

    评论

报告相同问题?

悬赏问题

  • ¥15 运筹学排序问题中的在线排序
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧