Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 尝试使用h264编码器开发视频聊天应用程序_Android_Chat_H.264_Android Mediacodec - Fatal编程技术网

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

Android 尝试使用h264编码器开发视频聊天应用程序,android,chat,h.264,android-mediacodec,Android,Chat,H.264,Android Mediacodec,我正在尝试使用h264编码器为视频和MediaCodec库开发视频聊天应用程序。视频应同时在客户端和服务器上显示。现在我需要一个教程来了解它。这意味着如何在设备上显示摄像头视频以及如何将此视频发送到ip(点对点聊天) 谢谢您可以尝试使用标准摄像头api在SurfaveView上显示帧,从摄像头获取帧,对其进行编码并发送到网络。你可以在stackoverflow上找到关于它的所有细节,下面是主要的想法 开放式摄像机: c = Camera.open(index); 将参数设置为摄影机,

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


谢谢

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

开放式摄像机:

     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
        };
    }
将数据放入编码器,如中所述

使用ffmpeg进行流媒体传输。初始化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级别和相应级别发送数据。我记得有一些针对android的预构建ffmpeg二进制文件,还有一些如何构建的说明。

欢迎访问stackoverflow.com!到目前为止你试过什么?我不熟悉MediaCodec。我创建了一个类作为这个链接(),我的问题是如何将数据放入mdiacodec库?你能给我一个完整的示例吗?嘿,mediacodec页面有非常好的示例代码:)只需将createDecoderByType更改为编码器的创建,它就会工作。从摄像头加载输入帧并将其发送到muxer,正如我在上面所写的。如果你的应用程序针对android 4.3及以上版本,你可以查看fadden的页面,它有很多编码器和其他mediacodec的示例:我建议不要使用
mediacodec
doc作为模板。它缺少几种方式(参数太少,无法
dequeueOutputBuffer()
,无法处理流的结尾——循环永远不会退出,忽略了有关缓冲区处理的重要细节,等等)。bigflake有一些小的自包含示例和常见问题列表,Grafika()有一些稍微宽泛一些的示例。但这些都没有真正涵盖音频,这是一个单独的乐趣桶,特别是当你在播放过程中进入a/V同步时。