Android推流SDK使用文档¶
简介¶
Android 推流 SDK (以下简称“推流 SDK”) 使用百度推出的 Android 推流SDK,为您提供简单、便捷的开发接口,助您在基于 Android 2.3.3及以上版本的移动设备上实现直播推流功能。https://bce.baidu.com/doc/LSS/Android-Capture-SDK.html#.E6.8E.A8.E6.B5.81.20SDK.20.E5.BC.80.E5.8F.91.E6.8C.87.E5.8D.97
添加依赖:¶
将 libs 目录复制到 Eclipse 工程根目录,注意根据所支持的 arm版本选择对应的动态链接库。
权限声明:¶
请您在 Android App 的 AndroidManifest.xml 中声明如下权限:
<uses-feature android:name="android.hardware.camera" />
<!-- 申明应用需要用到相机 -->
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
<!-- 申明应用需要用到自动对焦 -->
<uses-permission android:name="android.permission.CAMERA" />
<!-- 申请相机使用权限 -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- 申明录音权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 申明网络权限 -->
QUICK START¶
- 初始化 LiveSession
LiveSession是对视频采集、编码、推流等功能模块接口进行封装后的接口类,为您提供友好的编程接口。
LiveSession mLiveSession = new LiveSession(MainActivity.this);
// 使用该初始化接口后,默认采用后置摄像头采集,视频编码、音频编码均使用默认参数
// 如需定制其他参数请使用附录其他两种方式初始化
- 设置预览 View
初始化成功后,使用bindPreviewDisplay 接口为 LiveSession 对象设置预览View,否则无法启动相机。
SurfaceView cameraView = (SurfaceView) findViewById(R.id.cameraView);
mLiveSession.bindPreviewDisplay(cameraView.getHolder());
- 启动音视频采集设备
在开始推流前,我们还需要启动音视频采集设备(即相机和 MIC)。
mLiveSession.prepareSessionAsync();
- 开始推流
当采集设备成功启动后(即收到 onSessionPrepared 回调后,参考附录处理推流SDK 状态变化事件),可以通过调用 startRtmpSession方法设置推流地址并开始推流。 推流URL的具体值为你从新浪云视频直播服务获得的推送地址,例如: rtmp://xxxx。
final String url1 = "rtmp://xxxx";
if (mLiveSession.startRtmpSession(url1)) {
Log.d(TAG, "Starting Streaming in right state!");
} else {
Log.e(TAG, "Starting Streaming in wrong state!");
}
结束推流
mLiveSession.stopRtmpSession();
附录¶
- 推流 SDK 提供如下三种方法完成初始化:
使用 LiveSession(Context cxt)
LiveSession mLiveSession = new LiveSession(MainActivity.this);
// 使用该初始化接口后,默认采用后置摄像头采集
// 视频编码参数为720p@24fps、码率1024kbps
// 音频编码参数为双声道、采样率44.1khz、码率64kbps
使用 LiveSession(Context cxt, int width, int height, int fps, int bitrate)
LiveSession mLiveSession = new LiveSession(this, 640, 480, 15, 512000);
// 使用该初始化接口后,仍然采用后置摄像头采集
// 分辨率、帧率、码率将使用用户传入的参数
// 本示例代码所设置的视频编码参数为分辨率640x480、帧率15fps、码率512kbps
// 音频编码参数仍为默认值(双声道、采样率44.1khz、码率64kbps)
使用LiveSession(Context cxt, int width, int height, int fps, int bitrate, int cameraId)
int cameraId = Camera.CameraInfo.CAMERA_FACING_FRONT;
LiveSession mLiveSession = new LiveSession(this, 1280, 720, 15, 1024000, cameraId);
// 如示例代码中,使用该初始化接口后,将采用前置摄像头采集
// 同时设置了视频的分辨率、帧率、码率
// 音频编码参数仍为默认值(双声道、采样率44.1khz、码率64kbps)
- 处理推流 SDK 状态变化事件:
在推流 SDK 中,我们定义了名为 SessionStateListener 的interface,您可以实现该接口并将其传递给 LiveSession 对象(通过调用setStateListener 接口实现),这样就可以实时接收到推流 SDK的一些属性及状态更新信息。
interface 定义如下:
public interface SessionStateListener {
/**
* 录制设备准备完毕
* @param code 固定为RESULT_CODE_OF_OPERATION_SUCCEEDED
*/
void onSessionPrepared(int code);
/**
* 推流开始后的回调
* @param code 固定为RESULT_CODE_OF_OPERATION_SUCCEEDED
*/
void onSessionStarted(int code);
/**
* 推流结束后的回调
* @param code 固定为RESULT_CODE_OF_OPERATION_SUCCEEDED
*/
void onSessionStopped(int code);
/**
* 推流 SDK 出错后的回调
* @param code 错误类型如下:
* ERROR_CODE_OF_OPEN_MIC_FAILED
* ERROR_CODE_OF_OPEN_CAMERA_FAILED
* ERROR_CODE_OF_PREPARE_SESSION_FAILED
* ERROR_CODE_OF_CONNECT_TO_SERVER_FAILED
* ERROR_CODE_OF_DISCONNECT_FROM_SERVER_FAILED
* ERROR_CODE_OF_UNKNOWN_STREAMING_ERROR
* ERROR_CODE_OF_PACKET_REFUSED_BY_SERVER
* ERROR_CODE_OF_WEAK_CONNECTION
* ERROR_CODE_OF_SERVER_INTERNAL_ERROR
* ERROR_CODE_OF_CONNECTION_TIMEOUT
*/
void onSessionError(int code);
}
注意:prepareSessionAsync、startRtmpSession、stopRtmpSession均为异步接口,即接口被调用后,不会立即得到结果,需要实现SessionStateListener interface侦听回调结果。如果执行成功,onSessionPrepared、onSessionStarted、onSessionStopped方法将分别被调用,且参数固定为RESULT_CODE_OF_OPERATION_SUCCEEDED。如果执行失败,只有onSessionError 方法将被调用,参数及意义如下:
ERROR_CODE_OF_OPEN_MIC_FAILED // MIC设备无法打开
ERROR_CODE_OF_OPEN_CAMERA_FAILED // 相机设备无法打开
ERROR_CODE_OF_PREPARE_SESSION_FAILED // onSessionPrepared 接口调用失败,原因只能是 MIC 或相机打开失败
ERROR_CODE_OF_CONNECT_TO_SERVER_FAILED // startRtmpSession 接口调用失败,原因通常为连接不上推流服务器
ERROR_CODE_OF_DISCONNECT_FROM_SERVER_FAILED // stopRtmpSession 接口调用失败,原因通常是网络异常
复制
另外,在推流过程中,如果遇到数据包发送失败的情况时,onSessionError 方法也将被调用,参数及意义如下:
ERROR_CODE_OF_UNKNOWN_STREAMING_ERROR // 未知的推流错误,建议收到此参数后立即结束推流
ERROR_CODE_OF_PACKET_REFUSED_BY_SERVER // 服务器拒绝错误,建议检查推流地址是否为百度开放云的地址
ERROR_CODE_OF_WEAK_CONNECTION // 弱网错误,建议收到此参数后提示用户网络不稳定
ERROR_CODE_OF_SERVER_INTERNAL_ERROR // 服务器错误,建议收到此参数后立即结束推流,并在服务器恢复后再尝试推流
ERROR_CODE_OF_CONNECTION_TIMEOUT // 连接超时,建议收到此参数后提示用户已经断网