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;
}
上次更新: 8/27/2024, 7:32:11 PM