AndroidFFmpeg
Introduction: android 读取摄像头和麦克风,使用 rtmp 推流
Tags:

左边是推流端,右边是播放端, 由于 gif 图片过大,如果加载不出来,请查看 art/streaming.gif
开发工具
Android Studio 3.0
Android NDK r12
使用的开源库
支持如下功能:
- [x] H.264/AAC 硬编 Api 18 支持.
- [x] H.264/AAC 软编 Api 16.
- [x] 更多可选项配置(正在开发中).
- [x] 水印(正在开发中).
视频编码配置
- 硬编 使用 MediaCodec 编码.
- 软编 使用 FBO 读取纹理数据,由于使用 FBO 读取的数据是上下颠倒的,故而使用 libyuv 将图像旋转了 180 度,openh264 编码.
音频编码配置
- 硬编 使用 MediaCodec 编码.
- 软编 使用 fdk-aac 编码为 aac 数据.
使用方式:
onCreate 中设置初始化
CameraSetting cameraSetting = new CameraSetting();
AudioSetting audioSetting = new AudioSetting();
StreamingSetting streamingSetting = new StreamingSetting();
streamingSetting.setRtmpUrl("rtmp://www.ossrs.net:1935/live/demo")
.setEncoderType(EncoderType.SOFT);
GLSurfaceView glSurfaceView = (GLSurfaceView) findViewById(R.id.gl_surface_view);
mMediaStreamingManager = new MediaStreamingManager(glSurfaceView);
mMediaStreamingManager.prepare(cameraSetting, streamingSetting, audioSetting);
打开摄像头在onResume中调用
mMediaStreamingManager.resume();
释放摄像头onPause中调用
mMediaStreamingManager.pause();
开始推流
mMediaStreamingManager.startStreaming();
停止推流
mMediaStreamingManager.stopStreaming();
自定义滤镜
实现 setSurfaceTextureCallback 接口
mMediaStreamingManager.setSurfaceTextureCallback(this);
public int onDrawFrame(int textureId, int textureWidth, int textureHeight, float[] transformMatrix)
在 onDrawFrame 函数中实现滤镜处理,这里的 textureId 参数为GLES11Ext.GL_TEXTURE_EXTERNAL_OES类型,textureWidth为纹理的宽度,textureHeight为纹理的高度,transformMatrix为纹理的textureTransform数组,返回值如果<=0 或者是 textureId 代表不处理滤镜,否则需要返回一个GLES20.GL_TEXTURE_2D类型的纹理 id,示例中使用了MagicCamera作为滤镜处理库.
关于我
wlanjie, 联系方式:qq:153920981 微信:w153920981
