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