尝试使用h264编码器开发视频聊天应用程序

时间:2014-02-21 10:06:34

标签: android chat h.264 mediacodec

我正在尝试使用视频和MediaCodec Lib的h264编码器开发视频聊天应用程序。视频应显示在客户端和服务器上。现在我需要一个教程来了解它。这意味着如何在我的设备上显示我的摄像头视频以及如何将此视频发送到ip(点对点聊天)?

谢谢

1 个答案:

答案 0 :(得分:2)

您可以尝试使用标准相机api在SurfaveView上显示帧并从相机获取帧,对其进行编码并发送到网络。你可以在stackoverflow找到它的所有细节,下面是主要的想法

打开相机:

     c = Camera.open(index);

将参数设置到摄影机并设置曲面以通过曲面显示在屏幕上:

     /*
        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 muxer \ streamer

    /*
           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);    

一个棘手的事情是为android构建ffmpeg并创建jni级别以从java级别和相应级别发送数据。我记得有一些预装的ffmpeg二进制文件用于android,还有说明如何构建它。