2014-02-21 16 views
0

我想開發一個視頻聊天應用程序使用h264編碼器的視頻和MediaCodec庫。視頻應顯示在客戶端和服務器上。現在我需要一個教程來了解它。這意味着如何在我的設備上顯示我的相機視頻以及如何將此視頻發送到IP(點對點聊天)?試圖開發一個使用h264編碼器的視頻聊天應用程序

感謝

+0

歡迎來到stackoverflow.com!你到目前爲止所嘗試過的? –

+0

我不熟悉MediaCodec。我創建了一個類作爲這個鏈接(http://stackoverflow.com/questions/21232206/raw-h-264-stream-output-by-mediacodec-not-playble) – mori

回答

2

,你可以嘗試使用標準的API相機上顯示的SurfaveView框架,並從攝像頭獲取的幀,編碼它們的發送到網絡。你可以在計算器找到有關它的所有細節,以下是主要觀點

打開相機:

 c = Camera.open(index); 

設置參數相機設置表面在屏幕上顯示通過量surfaceholder:

 /* 
     init paramerers firstly, like fps, framerate range, color format 
    */ 

    surfaceHolder = surfaceView.getHolder(); 
    surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
    surfaceHolder.addCallback(this);  

    c.setPreviewDisplay(surfaceHolder); 

從相機接收幀:

private Camera.PreviewCallback previewListener = new Camera.PreviewCallback() 
    { 
     @Override 
     public void onPreviewFrame(byte[] data, Camera camera) 
     {    
      //put **data** to encoder 
     }; 
    } 

將數據寫入編碼器,如http://developer.android.com/reference/android/media/MediaCodec.html

使用ffmpeg進行流式傳輸。 INIT RTSP連接,併發送編碼的幀到ffmpeg的複用器\流光

/* 
      outputBufferIndex is a buffer encoder prepared for output 
    */ 
    ByteBuffer outputBuffer = outputBuffers[outputBufferIndex]; 
    byte[] outData = new byte[bufferInfo.size]; 
    outputBuffer.get(outData); 

    //something what sends data to ffmeg muxer\network   
    writeVideoFrame(outData, outData.length, bufferInfo.presentationTimeUs);  

所述一個棘手的事情是建立FFMPEG Android和創建JNI電平從Java級別和對應的電平發送數據。我記得有一些針對android的預構建的ffmpeg二進制文件,還有如何構建它的說明。

+0

我的問題是如何把數據到mdiacodec庫?你能給我一個完整的樣本嗎? – mori

+0

嘿,mediacodec頁http://developer.android.com/reference/android/media/MediaCodec.html有很好的示例代碼:)只需將createDecoderByType更改爲編碼器的創建,它應該工作。加載從相機輸入框架,並將其發送到複合器,因爲我上面寫了 – Marlon

+0

如果您的應用程序爲Android 4.3或更高版本,您可以檢查fadden的頁面,它有很多編碼器和其他mediacodec的東西樣本:http:// bigflake .com/mediacodec/ – Marlon