2011-07-13 14 views
0

ここに私のコードです。このコードは、VDOが、その後転送されるまで、それは私がストリームラインからビデオを再生するには、それを修正するにはどうすればよいストリームラインからMediaPlayer再生ビデオを使用できますか

を再生することができます待つ必要が

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(); 
      } 
     }); 

答えて

0

録音は可能ですが、書き込みせずに直接ストリーミングビデオを再生することはできませんファイル。 ソケットパーセルファイルディスクリプタから直接ストリームビデオを再生する場合、ソケットファイルfdがシーク可能でないため、MediaPlayerはsetDetaSourceFD例外をスローします。

+0

パーセルファイル記述子を使用してストリームビデオを再生するために必要なことはありますか?私にいくつかのアイデアを与える – Aravi

関連する問題