Android EasyRTMP 介绍
来源:互联网 发布:淘宝口红代购知乎 编辑:程序博客网 时间:2024/06/03 11:00
EasyRTMP是什么?
EasyRTMP是一个EasyDarwin配套使用,也可以单独使用的RTMP推送库,通过EasyRTMP我们就可以避免接触到稍显复杂的RTMP推送流程,只需要调用EasyRTMP的几个API接口,就能轻松、稳定地把流媒体音视频数据推送给Red5、Ngnix、crtmpserver等RTMP服务器.
我们有专门的使用EasyRTMP library 实现的安卓版本的EasyRTMP,可直接将手机摄像头或者桌面以RTMP协议推送到相关服务器,简单易用,易于集成.EasyRTMP的APP界面如图所示:
可以看到,在首页有如下的功能元素
- 切换分辨率
- 录像
- 切换摄像头
- 帧率码率显示
- 开启,关闭摄像头推送
- 开启,关闭屏幕推送
- 设置
在此逐一介绍下:
切换分辨率
切换分辨率,即切换摄像头的预览分辨率.首先需要获取到摄像头支持的分辨率.通过如下方式获取到摄像头支持的分辨率:
List<Camera.Size> supportedPreviewSizes = mCamera.getParameters().getSupportedPreviewSizes();
通过如下方式设置预览分辨率:
Camera.Parameters parameters = mCamera.getParameters();parameters.setPreviewSize(width, height);...mCamera.setParameters(parameters);
切换分辨率时,先关闭预览,重新设置分辨率,再开启预览即可:
mCamera.stopPreview();// 设置新分辨率...mCamera.startPreview();
录像
录像是通过EasyMuxer来进行录像的.EasyMuxer是对MediaMuxer进行的一个封装,通过简单的一些接口即可进行便捷录像\更换文件\关闭录像等功能.同时,EasyMuxer可对PCM音频格式进行录像,这样任何类型的音频编码数据都可以在先解码后,再编成AAC来录像成.MP4格式.EasyMuxer的介绍见博客文章:http://blog.csdn.net/jyt0551/article/details/72787095
切换摄像头
切换摄像头跟切换分辨率类似,都是先要把当前预览关闭,再重新打开.不同的是,切换摄像头时,需要将摄像头release再重新open,而切换分辨率只用stopPreview再startPreview即可.
stopPreview();destroyCamera();if (mCameraId == Camera.CameraInfo.CAMERA_FACING_FRONT) { //现在是后置,变更为前置 if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {//代表摄像头的方位,CAMERA_FACING_FRONT前置 CAMERA_FACING_BACK后置 mCameraId = Camera.CameraInfo.CAMERA_FACING_BACK; createCamera(); startPreview(); break; }} else { //现在是前置, 变更为后置 if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {//代表摄像头的方位,CAMERA_FACING_FRONT前置 CAMERA_FACING_BACK后置 mCameraId = Camera.CameraInfo.CAMERA_FACING_FRONT; createCamera(); startPreview(); break; }}
显示帧率码率
为了方便处理,帧率码率的统计放在了推送端.即统计某一时间段内发送的视频帧数和字节数,然后除以时间段得出结果.这里使用EventBus POST出去即可.上层捕获到该Event后,进行展示.
mTotal += length;if (type == 1){ mTotalFrms++;}long interval = System.currentTimeMillis() - pPreviewTS;if (interval >= 3000){ long bps = mTotal * 1000 / (interval); long fps = mTotalFrms * 1000 / (interval); Log.i(TAG, String.format("bps:%d, fps:%d", fps, bps)); pPreviewTS = System.currentTimeMillis(); mTotal = 0; mTotalFrms = 0; BUS.post(new StreamStat((int)fps, (int)bps));}
上层捕获并显示:
@Subscribepublic void onStreamStat(final StreamStat stat) { streamStat.post(new Runnable() { @Override public void run() { streamStat.setText(getString(R.string.stream_stat, stat.fps, stat.bps / 1024)); } });}
开启,关闭摄像头推送
当未推送的时候,点击按钮即可发起推送.这时候,初始化Pusher库,初始化成功后,得到Pusher句柄,后续的Push接口里会根据该值来判断是否进行真正的推送动作.
当推送开始时,点击按钮可关闭推送.相应地进行反初始化,这样在Push接口就不会进行推送了.
开启,关闭屏幕推送
推送屏幕主要在RecordService服务里进行的.点击推送按钮时,先开启服务:
Intent intent = new Intent(getApplicationContext(), RecordService.class);startService(intent);
具体来说,MediaProjection 类可以将当前屏幕画面采集到一个surface里面,而MediaCodec可以从一个surface里面获取视频数据源。我们让MediaProjection投射到MediaCodec创建的Surface,MediaCodec就可以获取到MediaProjection投射的视频了.
关闭屏幕推送时,停止服务器,在服务内部 onDestory时,反初始化相关资源.
有关屏幕推送更详细的描述,见:
http://blog.csdn.net/jyt0551/article/details/72787095
设置
设置里面的功能如下图所示:
- URL可以设置要推送的流地址,客户端亦可用改地址进行播放;
- 是否使能摄像头后台采集.如果使能的话,推送将在APP转到后台时继续.
- 是否使用软编码?如果使能,那么app会使用x264软编码推送
- 叠加水印 如果使能, 那么视频上面会叠加一些水印信息.目前可现实文字水印,文字内容在APP内可以设置
- 仅推送音频 如果使能,那则不会推送视频,仅推送声音.
- 打开录像文件夹 点击后会打开在APP内产生的录像片段,可以进行便捷查看
- 版本号显示
- 保存设置并推出设置界面
EasyRTMP项目介绍
EasyRTMP是EasyDarwin团队开发的一套RTMP直播推送功能组件,内部集成了包括:基本RTMP协议、断线重连、异步推送、环形缓冲区、推送网络拥塞自动丢帧、缓冲区关键帧检索、事件回调(断线、音视频数据回调),通过EasyRTMP我们就可以避免接触到稍显复杂的RTMP推送或者客户端流程,只需要调用EasyRTMP的几个API接口,就能轻松、稳定地进行流媒体音视频数据的推送,支持市面上绝大部分的RTMP流媒体服务器,包括Red5、Ngnix_rtmp、crtmpserver等主流RTMP服务器,全平台支持:Windows、Linux、ARM(各种交叉编译工具链)、Android、iOS;
EasyRTMP项目地址:https://github.com/EasyDarwin/EasyRTMP
获取更多信息
邮件:support@easydarwin.org
WEB:www.EasyDarwin.org
Copyright © EasyDarwin.org 2012-2017
- Android EasyRTMP 介绍
- EasyRTMP Android采集AAC流进行RTMP推送
- EasyRTMP安卓Android手机直播之AAC采集、编码与RTMP推送
- [转载]使用EasyRTMP的Android版采集AAC音频流进行RTMP推送
- Android平台使用EasyRTMP将RTSP转RTMP流进行RTMP直播推送
- EasyRTMP Android安卓手机直播推流摄像头偏暗的问题解决
- EasyPusher RTSP推流/EasyRTMP RTMP推流Android安卓摄像头视频偏暗的问题解决方案
- EasyRTMP 1.3.17.1014版本更新
- EasyRTMP实现的一套简单、高效、易用的全平台(Windows/Linux/ARM/Android/iOS)RTMP直播推送库
- EasyRTMP 简单高效的RTMP推送库
- EasyRTMP之RTMP直播高效推送缓冲区
- EasyPusher/EasyRTMP摄像头偏暗的问题解决
- Android介绍
- Android介绍
- android 介绍
- Android介绍
- Android介绍
- android介绍
- Bootstrap按钮组
- python 数据结构之单链表的实现
- tar命令常用参数速记、详解-随笔
- 第十二课、 C循环
- Vision_数据结构_拓扑排序
- Android EasyRTMP 介绍
- java学习第24天,学习String字面量
- Python连接MySQL数据库执行sql语句时的参数问题
- 应试C++
- Android关于触摸事件跟点击事件两个方法的关系
- 数据库中触发器和索引的使用
- Java:如何用链表实现队列
- erlang shell 命令中文使用说明
- HTML(五) 使用img标签