Могу ли я использовать MediaPlayer для воспроизведения видео из потоковой линии - PullRequest
0 голосов
/ 13 июля 2011

Вот мой код. Этот код должен ждать, пока Vdo не будет передан, тогда он может играть

Как я могу изменить его для воспроизведения видео из потоковой линии

    videoV = (SurfaceView) findViewById(R.id.SurfaceView1);
    Log.d("Connecting.... 0 " , "");
    sh = videoV.getHolder();
    b = (Button)findViewById(R.id.button1);
    File path = Environment.getExternalStorageDirectory();
    File file = new File(path, "sample.3gp");

    Log.d("Connecting.... 1 " , " Wait For Socket");
    try {
        Log.e("Connecting.... 2" , "");
        sock = new Socket("10.4.18.43", 5550);
        Log.e("Receiving video..." , "");

        final FileOutputStream fos = new FileOutputStream(file);
        final byte[] data = new byte[1024];

        Thread t = new Thread(new Runnable() {

            @Override
            public void run() {
                int count = 0;
                try {
                    count = sock.getInputStream().read(data, 0, data.length);
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                 while (count != -1) {
                    System.out.println(count);
                try {
                    fos.write(data, 0, count);
                    count = sock.getInputStream().read(data, 0, data.length);
                    Log.e("Receiving", "Receiving");
                    } catch (IOException e) {
                    e.printStackTrace();
                }

                }
                 Log.e("Receiving", "Finish");
            }
        });
        t.start();



    } catch (UnknownHostException e3) {
        // TODO Auto-generated catch block
        e3.printStackTrace();
    } catch (IOException e3) {
        // TODO Auto-generated catch block
        e3.printStackTrace();
    }


    sh.addCallback(this);     
    mp = new MediaPlayer();
    try {

        mp.setDataSource(file.getAbsolutePath());
        //mp.setDataSource(ParcelFileDescriptor.fromSocket(sock).getFileDescriptor());
        mp.setDisplay(sh);
    } catch (IllegalArgumentException e1) {
        e1.printStackTrace();
    } catch (IllegalStateException e1) {
        e1.printStackTrace();
    } catch (IOException e1) {
        e1.printStackTrace();
    }

     b.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {


                try {
                    mp.prepare();
                    //mp.prepareAsync();
                } catch (IllegalStateException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                mp.start();
            }
        });

1 Ответ

0 голосов
/ 26 марта 2012

Запись возможна, но вы не можете воспроизводить потоковое видео напрямую без записи файла. Если вы собираетесь воспроизводить потоковое видео непосредственно из дескриптора файла участка сокета, Mediaplayer выдаст исключение setDetaSourceFD, поскольку файл сокета fd не доступен для поиска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...