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 准备 ---- - `下载 `__\ 最新的Android 推流 SDK。 - 适配 CPU 指令集:armv7/armv7a、arm64。 添加依赖: ---------- 将 libs 目录复制到 Eclipse 工程根目录,注意根据所支持的 arm版本选择对应的动态链接库。 权限声明: ---------- 请您在 Android App 的 AndroidManifest.xml 中声明如下权限: :: 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 // 连接超时,建议收到此参数后提示用户已经断网