2014-02-21 18 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