MRTC-Android-SDK-api
优质
小牛编辑
133浏览
2023-12-01
目录
接入使用步骤
环境要求
- JDK版本1.8
minSdkVersion 16
SDK接入步骤
在build.gradle
文件中设置的dependencies
加入MRTC
依赖如下例:dependencies { ... implementation 'tv.mudu:mrtc:1.0.2' ... }
在
app/src/main/AndroidManifest.xml
中加入必要的设备权限如下:<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.mrtc"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.FLASHLIGHT" /> ... </manifest>
- SDK的基本使用流程如下:
- 推流sdk
- MRTCSetting配置推流参数,创建MRTCPusher
- 传入推流预览视图,开始预览
- 开始推流
- 根据使用场景切换摄像头,暂停恢复等等
- 拉流sdk
- 创建MRTCPuller
- 传入拉流地址和预览视图,开始拉流
- 根据使用场景暂停恢复等等
- 推流sdk
设置
您可以使用MRTCSetting
配置推流参数,每一个参数都有默认值,也可以从MRTCSetting
中获取机器支持的配置。
基本配置
MRTCSetting setting = null; try{ setting = MRTCSetting.builder().createSetting(); }catch (MRTCException e){ } /*默认配置 编解码器:机器支持的编解码器的第一个 视频宽高:1280x720 最大码率:2000kbps 帧率:25 摄像头:前置 硬件加速:开启 屏幕捕捉:关闭 */
自定义配置
- 获取支持的编解码器
MRTCVideoCodec[] codecs = MRTCSetting.getSupportVideoCodec();
- 获取支持的分辨率(注:分辨率格式为: 宽x高)
String[] resolutions = MRTCSetting.getSupportResolutions();
- 获取支持的fps
MRTCSetting.MRTCFpsRange fpsRange = MRTCSetting.getSupportFps();
构造自定义配置
MRTCSetting setting = null; /*捕捉摄像头配置*/ MRTCVideoCodec codec = new MRTCVideoCodec("H264"); try{ setting = MRTCSetting.builder().setVideoCodec(codec) .setResolution("960x540")//分辨率 .setMaxBitrate(1500)//最大码率 .setFps(30)//帧率 .setHardwareAccleration(false)//硬件加速 .setFront(false)//后置摄像头 .createSetting();//创建配置 }catch (MRTCException e){ } /*捕捉屏幕配置*/ MRTCVideoCodec codec = new MRTCVideoCodec("H264"); try{ setting = MRTCSetting.builder().setVideoCodec(codec) .setResolution("960x540")//分辨率 .setMaxBitrate(1500)//最大码率 .setFps(30)//帧率 .setHardwareAccleration(false)//硬件加速 .setUseScreenCapture(true)//开启屏幕捕捉 .setMediaProjection(mediaCode,mediaData)//设置数据源 .createSetting();//创建配置 }catch (MRTCException e){ }
设置为自定配置时,您需要自己定义偏好编解码器、视频分辨率、最大码率、帧率、前后摄像头。
自定义配置建议参数:
- 获取支持的编解码器
分辨率 | 帧率 | 码率 |
---|---|---|
360p | 25 | 350 |
480p | 25 | 600 |
540p | 25 | 1000 |
720p | 25 | 1500 |
360p | 30 | 400 |
480p | 30 | 750 |
540p | 30 | 1200 |
720p | 30 | 1800 |
注:码率估算公式:(0.0000782*视频宽*视频高*帧率)
编解码器
构造方法
MRTCVideoCodec codec = new MRTCVideoCodec("H264"); MRTCVideoCodec codec = new MRTCVideoCodec("VP8"); MRTCVideoCodec codec = new MRTCVideoCodec("VP9"); /*暂时只支持H264,VP8,VP9三种*/
推流
- 推流器的使用
MRTCPuller为拉流的核心类- 初始化
在配置好推流参数后,可以使用MRTCPusher
的public MRTCPusher(Context appContext, MRTCSetting setting)
方法创建推流器
例:MRTCPusher pusher = new MRTCPuser(getApplicationContext(),setting);
- 注册错误回调
/*创建同时注册错误回调*/ MRTCPusher pusher = new MRTCPusher(getApplicationContext(),setting,exceptionObserver); /*或者在创建推流器后注册错误回调*/ pusher.excetionEvents = exceptionObserver;
- 开始预览 pusher对象初始化完成后,开议开始预览操作。预览时需要传入用于显示视频画面的
org.webrtc.SurfaceViewRenderer
//设置视频的显示拉伸模式 renderer.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FILL); pusher.startPreview(renderer);
- 开始推流 预览后可以开始推流,您摄像头捕获的视频画面将传输到流媒体服务器。如果您不需要传输视频画面,只需要推音频流,跳过预览步骤即可
pusher.startPush("推流地址",pushEventsListener);
- 其他推流控制 推流控制主要包括开始推流、停止推流、开始预览、停止预览、暂停推流、恢复推流、静音、恢复静音、销毁推流等操作,您可以根据业务需求添加按钮进行操作。示例代码如下:
/*正在推流状态下可以调用暂停推流,暂停推流后将会暂停视频推流。*/ pusher.pause(); /*暂停状态可调用恢复推流,视频会恢复正常推流*/ pusher.resume(); /*推流状态下可调用停止推流,调用后推流停止*/ pusher.stopPush(); /*预览状态下才可以调用停止预览,如在推流状态下调用停止预览,视频将停留在最后一帧,如需重新推视频流,需要调用停止推流后后重新推*/ pusher.stopPreivew(); /*静音操作,在推流状态下调用将停止音频推流*/ pusher.mute(); /*恢复静音操作,在静音状态下调用将恢复音频推流*/ pusher.unmute(); /*切换摄像头,在预览状态下或推流状态下调用调转摄像头(前后切换)*/ pusher.switchCamera(); /*开启关闭闪光灯*/ pusher.setFlashLight(true/false); /*设置码率,码率可在初始化配置时设置,也可在推流状态下实时调整*/ pusher.setMaxBitrate(2000); /*销毁推流,调用销毁推流将停止预览、停止推流,并销毁一切推流资源,不在需要推流的时候请调用此方法,否则有可能内存泄漏*/ pusher.destory(); /*获取推流状态*/ MRTCPusherState state = pusher.getState();
- 初始化
拉流
- 拉流器的使用
MRTCPuller为拉流的核心类- 初始化
使用MRTCPuller的public MRTCPuller(Context appcontext,MRTCPullExceptionEvents exceptionEvents)
方法进行初始化。示例代码如下:MRTCPuller puller = new MRTCPuller(getApplicationContext());
- 注册错误回调
/*在初始化时注册错误回调*/ MRTCPuller puller = new MRTCPuller(getApplicationContext(),exceptionObserver); /*在初始化后注册错误回调*/ puller.exceptionEvents = exceptionObserver;
- 开始拉流
示例代码如下:/*renderer为org.webrtc.SurfaceViewRenderer类型*/ //设置视频的显示拉伸模式 renderer.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FILL); puller.startPull("拉流地址",renderer,pullObserver);
- 拉流其他操作
/*正在拉流状态下可调用暂停视频拉流*/ puller.pause(); /*暂停状态下可调用恢复视频拉流。*/ puller.remuse(); /*拉流状态下可调用静音接口*/ puller.mute(); /*静音后可以调用不静音接口恢复音频*/ puller.unmute(); /*停止拉流,调用后将停止拉流和渲染*/ puller.stopPull(); /*获取推流状态*/ MRTCPullerState state = puller.getState();
- 初始化
其他操作
获取推/拉流信息
/* 在推/拉流成功后可调用getStats方法获取拉流信息 hashMap key值含义: candidateType:转发类型 videoCodec:视频编/解码器 videoBitrate:视频码率 videoPacketsLostRate:丢包率 audioCodec:音频编/解码器 */ pusher.getStats(new MRTCPusher.MRTCPusherStatsEvents(){ @Override public void onStats(HashMap<String, String> hashMap){ } }); puller.getStats(new MRTCPuller.MRTCPullerStatsEvents(){ @Override public void onStats(HashMap<String, String> hashMap){ } });