使用指南

核心类

UStreamingManager 包含了 RTMP 直播推流需要的接口,方法列表如下:

snippet.java
/**
 * 构造 UStreamingManager 对象
 */
public UStreamingManager();
 
/**
 * 使 UStreamingManager 暂停工作,通常在 Activity#onPause 中调用
 */
public pause();
 
/**
 * 使 UStreamingManager 恢复工作,通常在 Activity#onResume 中调用
 */
public resume();
 
/**
 * 销毁 UStreamingManager 对象,通常在 Activity#onDestroy 中调用
 */
public destory();
 
/**
 * Prepare UStreamingManager
 * @param glSurfaceView      预览的 GLSurfaceView
 * @param cameraParam      UCameraParam 对象
 * @param microphoneParam  UMicrophoneParam 对象
 * @param videoEncodeParam UVideoEncodeParam 对象
 * @param audioEncodeParam UAudioEncodeParam 对象
 * @param faceBeautyParam  UFaceBeautyParam 对象
 */
public void prepare(GLSurfaceView glSurfaceView,
                        UCameraParam cameraParam,
                        UMicrophoneParam microphoneParam,
                        UVideoEncodeParam videoEncodeParam,
                        UAudioEncodeParam audioEncodeParam,
                        UFaceBeautyParam faceBeautyParam);
 
/**
 * 开始推流
 * @param rtmpUrl 推流地址
 */
public void startPublish(String rtmpUrl);
 
/**
 * 停止推流
 */
public void stopPublish();
 
/**
 * 设置图片推流的图片文件地址
 * @param filePath 图片在手机上的路径
 */
public void setPictureStreamingFilePath(String filePath);
 
/**
 * 设置图片推流的图片资源文件
 * @param resId 图片的资源 ID
 */
public void setPictureStreamingResourceId(int resId);
 
/**
 * 在摄像头和图片推流之间切换
 */
public synchronized boolean switchPictureStreaming();
 
/**
 * 手动对焦,在预览画面上指定对焦区域大小以及相应的中心坐标
 * @param 对焦区域的宽度
 * @param 对焦区域的高度
 * @param 对焦区域中心 X 坐标
 * @param 对焦区域中心 Y 坐标
 */
public void manualFocus(int focusBlockWidth, int focusBlockHeight, int focusBlockCenterX, int focusBlockCenterY);
 
/**
 * 注册相机对焦监听器
 * @param 对焦监听器
 */
public void setFocusListener(UFocusListener listener);
 
/**
 * 切换到下一个摄像头
 */
public void switchCamera();
 
/**
 * 切换到指定摄像头
 */
public void switchCamera(UCameraParam.CAMERA_FACING_ID facingId);
 
/**
 * 设置闪光灯开关
 */
public void setFlashEnabled(boolean enabled);
 
/**
 * 更新美颜设置
 * @param 美颜设置对象
 */
public final void updateFaceBeautyParam(UFaceBeautyParam Param);
 
/**
 * 注册自定义美颜监听器
 * @param 监听器对象
 */
public final void setVideoFrameListener(UVideoFrameListener listener);
 
/**
 * 注册音频帧监听器
 * @param 监听器对象
 */
public final void setAudioFrameListener(UAudioFrameListener listener);
 
/**
 * 注册推流过程码率、帧率统计信息监听器
 * @param 监听器对象
 */
public final void setStatisticsInfoListener(UStatisticsInfoListener listener);
 
/**
 * 获取当前摄像头的最大曝光补偿值
 * @return 最大曝光补偿值
 */
public int getMaxExposureCompensation();
 
/**
 * 获取当前摄像头的最小曝光补偿值
 * @return 最小曝光补偿值
 */
public int getMinExposureCompensation();
 
/**
 * 设置曝光补偿值
 */
public void setExposureCompensation(int exposureCompensation);
 
/**
 * 设置预览画面的缩放值
 * 调用此方法前,请先调用 getZooms 方法获取有效值
 * @param 缩放值
 */
public void setZoom(float zoom);
 
/**
 * 获取有效的缩放值列表
 * 已由小至大排序
 * @return 如果该分辨率不支持缩放,则返回 null
 */
public List<Float> getZooms();
 
/**
 * 设置水印
 * @param watermarkParam 水印参数,包括水印图片、放置位置等
 */
public void setWatermark(UWatermarkParam watermarkParam)

参数类

UCameraParam

UCameraParam 类用于设置摄像头采集的相关参数,包含以下方法:

snippet.java
/**
 * 设置采集摄像头
 * @param 默认设置为手机的后置摄像头
 */
public UCameraParam setCameraId(UCameraParam.CAMERA_FACING_ID cameraId);
 
/**
 * 设置采集画面的分辨率
 * @param 可以选择从 120P 到 1200P 之间的多种分辨率。默认设置为 480P
 */
public UCameraParam setCameraPreviewSizeLevel(UCameraParam.CAMERA_PREVIEW_SIZE_LEVEL level);
 
/**
 * 设置采集画面的长宽比
 * @param 可以选择 4:3 或 16:9。默认设置为 16:9
 */
public UCameraParam setCameraPreviewSizeRatio(UCameraParam.CAMERA_PREVIEW_SIZE_RATIO ratio);

UMicrophoneParam

UMicrophoneParam 类用于设置麦克风采集的相关参数,包含以下方法:

snippet.java
/**
 * 设置音频采集源
 * @param 默认为系统的 MediaRecorder.AudioSource.MIC,可视情况进行修改
 */
public UMicrophoneParam setAudioSource(int source);
 
/**
 * 设置音频格式
 * @param 默认为系统的 AudioFormat.ENCODING_PCM_16BIT,其他格式可能不兼容部分设备,请视情况使用
 */
public UMicrophoneParam setAudioFormat(int format);
 
/**
 * 设置音频声道
 * @param 默认为系统的 AudioFormat.CHANNEL_IN_MONO,其他格式如 AudioFormat.CHANNEL_IN_STEREO 可能不兼容部分设备,请视情况使用
 */
public UMicrophoneParam setChannelConfig(int channelConfig);
 
/**
 * 设置音频采样率
 * @param 采样率, 默认为 44100,其他设置可能不兼容部分设备,请视情况使用
 */
public UMicrophoneParam setSampleRate(int rate);

UVideoEncodeParam

UVideoEncodeParam 类用于设置视频编码的相关参数,包含以下方法:

snippet.java
/**
 * 设置编码码率
 * @param 码率,单位为 bps,默认为 1000 * 1000
 */
public UVideoEncodeParam setEncodingBitrate(int bitrate);
 
/**
 * 设置编码 fps
 * @param fps 值,默认设置为 30
 */
public UVideoEncodeParam setEncodingFps(int fps);
 
/**
 * 设置编码视频的分辨率
 * @param 可以选择从 240P 到 1200P 之间的多种分辨率,默认设置为 480 * 848
 */
public UVideoEncodeParam setEncodingSizeLevel(UVideoEncodeParam.VIDEO_ENCODING_SIZE_LEVEL level);
 
/**
 * 如果 SDK 内置的分辨率列表不能满足需求,可以通过此方法自定义编码视频的分辨率
 * @param width 宽度
 * @param height 高度
 */
public UVideoEncodeParam setPreferedEncodingSize(int width, int height);
 
/**
 * 设置编码视频关键帧的间隔
 * @param 单位为帧数,默认设置为 30 帧
 */
public UVideoEncodeParam setKeyFrameInterval(int interval);

UAudioEncodeParam

UAudioEncodeParam 类用于设置音频编码的相关参数,包含以下方法:

snippet.java
/**
 * 设置编码码率
 * @param 码率,单位为 bps,默认为 44100
 */
public UAudioEncodeParam setBitrate(int bitrate);
 
/**
 * 设置音频声道数
 * @param 声道数,目前只支持 1 (默认) 和 2,分别对应 UMicrophoneParam 声道设置的 AudioFormat.CHANNEL_IN_MONO 与 AudioFormat.CHANNEL_IN_STEREO
 */
public UAudioEncodeParam setChannels(int channels);
 
/**
 * 设置音频采样率
 * @param 采样率, 默认为 44100
 */
public UAudioEncodeParam setSampleRate(int sampleRate);

回调类

UStreamingStateListener

该接口用户回调推流过程中的状态变化信息,方法如下:

snippet.java
/**
 * 推流状态发生变化时触发
 * @param state 当前状态
 * @param extra 相关信息
 */
void onStateChanged(UStreamingState state, Object extra);

UVideoFrameListener

该接口用于回调视频采集相关的事件,方法如下:

snippet.java
/**
 * Surface 创建时触发.
 */
void onSurfaceCreated();
 
/**
 * Surface 大小发生变化时触发
 * @param width  the width of the Surface
 * @param height the height of the Surface
 */
void onSurfaceChanged(int width, int height);
 
/**
 * Surface 销毁时触发
 */
void onSurfaceDestroy();
 
/**
 * 采集到一帧视频时触发
 * @param texId           the texture ID of Camera SurfaceTexture object to be rendered.
 * @param texWidth        width of the drawing surface in pixels.
 * @param texHeight       height of the drawing surface in pixels.
 * @param timestampNs     timestamp of this frame in Ns.
 * @param transformMatrix transform matrix.
 * @return                the texture ID of the newly generated texture to be assigned to the SurfaceTexture object.
 */
int onDrawFrame(int texId, int texWidth, int texHeight, long timestampNs, float[] transformMatrix);

UAudioFrameListener

该接口用于回调音频采集相关的事件,方法如下:

snippet.java
/**
 * 录制失败时触发
 * @param 错误码,在 UErrorCode 中定义
 */
void onAudioRecordFailed(int errorCode);
 
/**
 * 采集到一帧音频时触发
 * @param data PCM 数据
 * @param timestampNs 音频帧时间戳,单位为 ns
 */
void onAudioFrameAvailable(byte[] data, long timestampNs);

UStatisticsInfoListener

该接口用于回调推流过程中的帧率、码率等统计信息,方法如下:

snippet.java
/**
 * 发送视频帧后触发
 * @param fps      frame per second
 * @param bitrate  bit per second
 */
void onVideoInfoChanged(double fps, double bitrate);
 
/**
 * 发送音频帧后触发
 * @param bitrate  bit per second
 */
void onAudioBitrateChanged(double bitrate);

自定义对象

UStreamingState

推流过程状态信息,包含如下内容:

错误码 说明
READY SDK 采集准备完成
CONNECTING 正在连接推流服务器
STREAMING 开始发送音视频数据
SHUTDOWN 关闭推流
ERROR 推流过程中出现异常
DISCONNECTED 推流连接断开
CONNECTED 推流连接建立成功
UNAUTHORIZEDSTREAMINGURL 推流域名未授权

UErrorCode

自定义错误码,包含如下内容:

错误码 错误值 说明
SUCCESS 0 无错误发生
ERRORIOEXCEPTION 20101 IO 错误
ERRORSIGNINVALID 20102 签名无效
ERRORJSONINVALID 20103 JSON 格式错误
ERRORHTTPSOCKETTIMEOUT | 20104 | SOCKET 错误 | | ERRORHTTPIOEXCEPTION 20105 HTTP IO 错误
ERRORHTTPRESPONSEEXCEPTION | 20106 | HTTP 返回错误 | | ERRORWRONGSTATE | 20001 | 状态错误 | | ERRORSETUPCAMERAFAILED 20004 设置摄像头失败
ERRORSETUPMICROPHONEFAILED | 20005 | 设置麦克风失败 | | ERRORSETUPVIDEOENCODERFAILED | 20006 | 设置视频编码器失败 | | ERRORSETUPAUDIOENCODERFAILED | 20007 | 设置音频编码器失败 | | ERRORUNAUTHORIZED 20008 鉴权失败
ERRORINVALIDARG 20010 传入了错误的参数信息
ERRORDIFFERENTAUDIOPARAMS | 20011 | 音频参数不一致 | | ERRORMISSINGDYNAMICLIBRARY 20012 缺少动态库文件
ERRORNOVIDEOTRACK | 20013 | 未发现视频信息 | | ERRORLOWMEMORY | 20015 | 内存不足 | | ERRORMULTICODECWRONG 20016 该设备不支持多例 MediaCodec
ERRORSETUPVIDEODECODERFAILED 20017 设置视频解码器失败