Android SDK #
UPRTCClient #
public class UPRTCClient {
/**
* 初始化
* @param c
* @param appId 项目唯一标示
* @param appKey 应用唯一标示
*/
public static void init(Context c, String appId, String appKey);
/**
* 清理/释放
*/
public static void clean();
/**
* 日志开关
*/
public static void logEnable(boolean enable);
/**
* 构造
* @param c
*/
public UPRTCClient(Context c);
/**
* 设置事件处理者
* @param handler
*/
public void setHandler(UPRTCClientHandler handler);
/**
* 加入房间
* @param serverUrl 房间所在服务器地址
* @param roomId 房间ID
* @param peerId 用户ID
*/
public void joinRoom(String serverUrl, String roomId, String peerId);
/**
* 打开摄像头
* @param c
* @param cameraInfo 摄像头信息
* @param codec 参照 getCodecCapability可在其返回中选择任意video编码器,可选
* @param codecOptions 参照共同 CodecOptions,可选
* @param encodings rtp编码参数,可选
* @return UPRTCPeerTrack
*/
public UPRTCPeerTrack openCamera(Context c, UCameraInfo cameraInfo, String codec, String codecOptions, List<URtpEncodingParameters> encodings);
public UPRTCPeerTrack openCamera(Context c, UCameraInfo cameraInfo, String codec);
public UPRTCPeerTrack openCamera(Context c, UCameraInfo cameraInfo);
/**
* 创建摄像机预览
* @param c
* @param cameraInfo 同openCamera参数
* @return UCameraPreview
*/
public UCameraPreview cameraPreview(Context c, UCameraInfo cameraInfo);
/**
* 通过摄像机预览打开摄像机(创建摄像机的UPRTCPeerTrack)
* @param cameraPreview 通过上面的方法创建的摄像机预览
* @param codec 参照 getCodecCapability可在其返回中选择任意video编码器,可选
* @param codecOptions 参照共同 CodecOptions,可选
* @param encodings rtp编码参数,可选
*/
public UPRTCPeerTrack openCamera(Context c, UCameraPreview cameraPreview, String codec, String codecOptions,
List<URtpEncodingParameters> encodings);
public UPRTCPeerTrack openCamera(Context c, UCameraInfo cameraInfo){
return openCamera(c, cameraInfo, null, null, null);
}
public UPRTCPeerTrack openCamera(Context c, UCameraInfo cameraInfo, String codec){
return openCamera(c, cameraInfo, codec, null, null);
}
/**
* 切换摄像头
* @param c
* @param cameraInfo 摄像头信息
* @return UPRTCPeerTrack
*/
public UPRTCPeerTrack switchCamera(Context c, UCameraInfo cameraInfo);
/**
* 关闭摄像头
*/
public void closeCamera();
/**
* 设置摄像机采集视频帧处理
* @param cameraCapturerProcessor 参照 UCameraCapturerProcessor
*/
public void setCameraCapturerProcessor(UCameraCapturerProcessor cameraCapturerProcessor);
/**
* 打开麦克风
* @param audioConstraints 音频约束条件设置,可选
* @param codec 参照 getCodecCapability可在其返回中选择任意audio编码器,可选
* @param codecOptions 参照共同 CodecOptions,可选
* @return UPRTCPeerTrack
*/
public UPRTCPeerTrack openMic(UAudioConstraints audioConstraints, String codec, String codecOptions);
public UPRTCPeerTrack openMic();
/**
* 关闭麦克风
*/
public void closeMic();
/**
* 分享屏幕
* @param activity 处理系统分享请求回调的activity
* @param options 分享屏幕选项
* @param notification 分享屏幕服务通知,可选,设置时分享服务启动时弹出系统通知,提升服务级别/存活时间
* @param codec 同openCamera
* @param codecOptions 同openCamera
* @param encodings 同openCamera
* @return
*/
public UShareScreenRequest shareScreen(Activity activity, UShareScreenOptions options,
Notification notification, String codec, String codecOptions, ArrayList<URtpEncodingParameters> encodings);
public UShareScreenRequest shareScreen(Activity activity, Notification notification);
public UShareScreenRequest shareScreen(Activity activity);
/**
* 停止分享屏幕
*/
public void stopShareScreen();
/**
* 是否正在分享屏幕
* @return
*/
public boolean isSharingScreen();
/**
* 发送房间内消息
* @param jsonStr 消息内容JSON字符串
*/
public void sendMessage(String jsonStr);
/**
* 设置发送最大比特率
* @param bitrate 比特率
*/
public void setMaxBitrate(int bitrate);
/**
* 是否已加入房间
* @retrurn true已加入 false未加入
*/
public boolean isJoined();
/**
* 是否具有生产媒体的能力,例如主播有,观众没有
* @return true有 false没有
*/
public boolean mediaEnable();
/**
* 离开房间
*/
public void exitRoom();
/**
* 释放client native资源
*/
public void dispose();
/**
* 获得摄像机列表
*/
public static List<UCameraInfo> cameraDevices(Context c);
/**
* 取得设备编码能力(加入房间后有效),包括audio,video
* return json字符串数组
*/
public String[] getCodecCapability();
}
UPRTCClientHandler #
public interface UPRTCClientHandler {
/**
* 加入房间
* @param code 0 表示成功
*/
void onRoomJoined(int code);
/**
* 接收到房间消息
* @param msg
*/
void onMessage(String msg);
/**
* 用户加入房间
* @param peerId 用户ID
*/
void onPeerJoined(String peerId);
/**
* 用户离开房间
* @param peerId 用户ID
*/
void onPeerExited(String peerId);
/**
* 房间成员的媒体加入
* @param peerTrack 用户媒体Track
*/
void onPeerMediaJoined(UPRTCPeerTrack peerTrack);
/**
* 房间成员的媒体离开
* @param peerTrack 用户媒体Track
*/
void onPeerMediaExited(UPRTCPeerTrack peerTrack);
/**
* 用户在房间中可生产媒体
* @param kind 可以输出的媒体种类,audio或video,如果是video表示也可以输出audio
*/
void onMediaEnable(String kind);
/**
* 用户在房间中不可生产媒体
*/
void onMediaDisable();
/**
* track分数有变化时回调,注意:当回调的是自己分享屏幕的分数时peerTrack为空
* @param peerTrack 分数变化的Track
* @param trackScore 分数对象
*/
void onTrackScoreChange(UPRTCPeerTrack peerTrack, UPeerTrackScore trackScore);
/**
* 房间总人数,直播时有效
* @param num 人数
*/
void onPeerTotalNum(int num);
/**
* 用户离开房间
*/
void onRoomExited();
}
UPRTCPeerTrack #
public class UPRTCPeerTrack {
public static final String UPRTC_KIND_VIDEO = "video";
public static final String UPRTC_KIND_AUDIO = "audio";
public static final String UPRTC_DEVICE_CAMERA = "camera";
public static final String UPRTC_DEVICE_MIC = "mic";
public static final String UPRTC_DEVICE_DESKTOP = "desktop";
public static final String UPRTC_DEVICE_FILE = "file";
/**
* 开始播放
* 视频时可重复调用,传入不同的viewGroup,改变视频渲染位置,传空移除渲染
* @param c
* @param viewGroup 父布局
* @param type 渲染缩放类型,默认SCALE_ASPECT_FIT
* @param mirror 是否镜面渲染,默认false
*/
public void startPlay(Context c, ViewGroup viewGroup, RendererCommon.ScalingType type, boolean mirror);
public void startPlay(Context c, ViewGroup viewGroup, RendererCommon.ScalingType type);
public void startPlay(Context c, ViewGroup viewGroup);
/**
* 音频播放,音频也可调用上面的播放方法,视频相关的参数将被忽略
*/
public void startPlay();
/**
* 开始播放,并监听分贝,只对音频有效
* @param listener 分贝回调
* @param interval 回调间隔时间,单位毫秒
*/
public void startPlay(AudioTrackDBListener listener, int interval);
/**
* 停止播放
* 停止播放会先暂停,再移除渲染画面,音频的停止和暂停同效果,stop之后可再调用start。
* 本地麦克风和摄像头生成的PeerTrack,需要调用对应的关闭方法彻底停止,关闭后无法再调用start。
*/
public void stop();
/**
* 暂停播放
*/
public void pause();
/**
* 恢复播放
*/
public void resume();
/**
* 取得媒体类型
* @return audio或者video
*/
public String getKind();
/**
* 取得媒体设备类型
* @return 参照上面的常量属性,例如 UPRTC_DEVICE_CAMERA
*/
public String getDeviceType();
/**
* 取得媒体设备名称
* @return
*/
public String getDeviceName();
/**
* 取得媒体设备ID
* @return
*/
public String getDeviceId();
/**
* 取得网络分数 0 ~ 10
* @return
*/
public int getScore();
/**
* 是否正在播放
* @return
*/
public boolean isPlaying();
/**
* 获得PeerTrack唯一标示
* @return
*/
public String getId();
/**
* 取得媒体所有者ID/用户ID
* @return
*/
public String getPeerId()
/**
* 是否是自己的生产媒体,也可理解为是否本地媒体
* @return
*/
public boolean isMe()
/**
* track是否已经关闭
* @return
*/
public boolean isClosed()
/**
* 播放是否暂停
* @return
*/
public boolean isPaused()
/**
* 取得网络分数 0 ~ 10
* @return 分数对象
*/
public UPeerTrackScore getScore();
// 以下视频独有
/**
* 取得渲染缩放类型
* @return
*/
public RendererCommon.ScalingType getScalingType();
/**
* 设置渲染缩放类型,播放后也可以设置
* @param scalingType
*/
public void setScalingType(RendererCommon.ScalingType scalingType);
/**
* 是否镜像显示
* @return
*/
public boolean isMirror();
/**
* 设置是否镜像显示,播放后也可以设置
* @return
*/
public void setMirror(boolean mirror)
/**
* 设置最佳时间层和空间层
* @param spatialLayer 空间层
* @param temporalLayer 时间层
*/
public void setPlayPreferredLayers(int spatialLayer, int temporalLayer);
/**
* 取得最大空间层
* @return
*/
public int getMaxSpatialLayer();
/**
* 取得最大时间层
* @return
*/
public int getMaxTemporalLayer();
/**
* 取得视频分辨率
* @return
*/
public Size getResolution();
/**
* 取得视频帧旋转角度
* @return
*/
public int getRotation();
/**
* 取得渲染视图,视频播放后取得
* @return
*/
public SurfaceView getSurfaceView();
/**
* 打开/关闭track分数监听,打开后会立即回调onTrackScoreChange
* @param enable true打开,false关闭
*/
public void setScoreChangeListenEnable(boolean enable);
}
UCameraInfo #
public class UCameraInfo {
/**
* 构造函数
*/
public UCameraInfo(String deviceId, String deviceName,
List<CameraEnumerationAndroid.CaptureFormat> formats, boolean isFront);
/**
* 获得设备ID
* @return
*/
public String getDeviceId();
/**
* 获得设备名
* @return
*/
public String getDeviceName();
/**
* 是否是前置摄像头
* @return
*/
public boolean isFront();
/**
* 摄像头支持的采集格式
* @return
*/
public List<CameraEnumerationAndroid.CaptureFormat> getFormats();
/**
* 获得采集格式
* @return
*/
public CameraEnumerationAndroid.CaptureFormat getTargetFormat();
/**
* 设置采集格式
* @param targetFormat 目标格式
* @return
*/
public void setTargetFormat(CameraEnumerationAndroid.CaptureFormat targetFormat);
}
UCameraPreview #
public class UCameraPreview {
/**
* 渲染预览画面
* 参数参照UPRTCPeerTrack的startPlay方法
*/
public void start(Context c, ViewGroup viewGroup, RendererCommon.ScalingType type, boolean mirror);
/**
* 移除渲染视图,并关闭摄像机,关闭后不能作为openCamera的参数
*/
public void close();
/**
* 移除渲染视图
*/
public void stop();
/**
* 取得渲染视图
*/
public SurfaceView getSurfaceView();
}
UCameraCapturerProcessor #
摄像机采集帧处理,例如:美颜滤镜处理
public interface UCameraCapturerProcessor {
void onCapturerStarted(boolean b);
void onCapturerStopped();
/**
* 处理捕获的视频帧
* @param {org.webrtc.VideoFrame} videoFrame 原始帧数据
* @return 处理后的帧数据
*/
VideoFrame onFrameCaptured(VideoFrame videoFrame);
}
UAudioConstraints #
回声消除,自动增益,降噪等,建议使用默认即可,无需特殊设置。mandatory表示是否强制使用,如不支持会异常,enable为建议开启,如不支持不会出错。
public class UAudioConstraints {
public UAudioConstraints();
public void echoCancellationEnable(boolean enable, boolean mandatory);
public void autoGainControlEnable(boolean enable, boolean mandatory);
public void experimentalAutoGainControlEnable(boolean enable, boolean mandatory);
public void noiseSuppressionEnable(boolean enable, boolean mandatory);
public void experimentalNoiseSuppressionEnable(boolean enable, boolean mandatory);
public void highpassFilterEnable(boolean enable, boolean mandatory);
public void typingNoiseDetectionEnable(boolean enable, boolean mandatory);
public void audioMirroringEnable(boolean enable, boolean mandatory);
public void audioNetworkAdaptorConfigEnable(boolean enable, boolean mandatory);
private void addConstraints(String key, boolean enable, boolean mandatory);
public MediaConstraints getMediaConstraints();
}
URtpEncodingParameters #
public class URtpEncodingParameters {
/**
* 是否可用
*/
private boolean active = true;
/**
* 最大比特率
*/
private Integer maxBitrateBps;
/**
* 最小比特率
*/
private Integer minBitrateBps;
/**
* 最大帧数
*/
private Integer maxFramerate;
/**
* 时间层数
*/
private Integer numTemporalLayers;
/**
* 分辨率缩放
*/
private Double scaleResolutionDownBy;
// 各属性set get 方法省略
}
UShareScreenOptions #
分享屏幕参数
public class UShareScreenOptions implements Parcelable {
// 宽高无需要考虑旋转问题,按照正常方式设置,例如1920x1080,1280x720,640x480等
// 屏幕采集宽,默认1280
private int width;
// 屏幕采集高,默认720
private int height;
// 是否宽高比例裁剪,默认true
private boolean cropToScale;
// 是否开启分数监听,等同于setScoreChangeListenEnable
private boolean scoreObservedEnable;
// ...省略 get set 方法
}
UShareScreenRequest #
分享屏幕请求,系统回调处理
public class UShareScreenRequest {
// 初始状态
public static final int U_SHARE_SCREEN_INIT = 0;
// 用户拒绝
public static final int U_SHARE_SCREEN_DENIED = 1;
// 用户授权分享
public static final int U_SHARE_SCREEN_GRANTED = 2;
// 分享屏幕服务正在启动
public static final int U_SHARE_SCREEN_SERVICE_STARTING = 3;
// 分享屏幕服务启动成功
public static final int U_SHARE_SCREEN_SERVICE_SUCCESS = 4;
// 正在开始分享
public static final int U_SHARE_SCREEN_STARTING = 5;
// 分享成功
public static final int U_SHARE_SCREEN_SUCCESS = 6;
// 分享错误
public static final int U_SHARE_SCREEN_ERROR = 7;
// 分享结束
public static final int U_SHARE_SCREEN_END = 8;
/**
* 分享屏幕状态监听
*/
public interface UShareScreenStateListener {
// 参照上面的状态
void onSharingScreen(int status);
}
/**
* 监听屏幕分享状态
*/
public void setStateListener(UShareScreenStateListener stateListener);
/**
* 分享屏幕请求回调处理
* @param requestCode
* @param resultCode
* @param data
* @return 0 表示不是分享屏幕请求,1 用户授权分享屏幕, -1 用户拒绝分享屏幕
*/
public int onActivityResult(int requestCode, int resultCode, Intent data)
}
UAudioTrackDBListener #
public interface UAudioTrackDBListener {
/**
* 分贝回调
* @param db 分贝 0 ~ 100
* @param peerTrack 音频track
*/
void onAudioTrackDB(int db, UPRTCPeerTrack peerTrack);
}
UPeerTrackScore #
// set get 方法省略
public class UPeerTrackScore {
/**
* 媒体的设备类型,参照上UPRTCPeerTrack里的宏定义,例如 UPRTC_DEVICE_CAMERA
*/
private String deviceType;
/**
* 分数,自己->服务端的网络分数
*/
private int score;
/**
* 远程分数/对方分数,Track所有者/生产者->服务端的网络分数,对自己生产的Track无效
*/
private int remoteScore;
/**
* 当Track使用分层编码(多路RTP流),代表每一路RTP流分数
*/
private List<USimulcastScore> scores;
}
USimulcastScore #
// set get 方法省略
public class USimulcastScore {
/**
* 多路RTP流的索引,表示分数是哪一路rtp流的
*/
private int index;
/**
* RTP同步源标识
*/
private int ssrc;
/**
* rtp id
*/
private String rid;
/**
* 分数
*/
private int score;
}