更新时间:2024-06-17 02:45:31下载pdf
视频直播需要先创建 IThingSmartCameraP2P
对象,然后进行 P2P(Peer-to-peer)通道连接。P2P 连接成功后,就可以播放实时视频、查看截图、录制视频、实时对讲数据传输。
演示录屏 | 类 | 接口 | 描述 | 备注 |
---|---|---|---|---|
IThingIPCCore | createCameraP2P | 创建 camera 对象 | 一个设备 ID 对应一个 camera 对象 | |
IThingSmartCameraP2P | connect | 连接 |
-3 或 -105 建议重连。 更多信息,参考 错误码查询 |
|
IThingSmartCameraP2P | startPreview | 拉流 | 拉流回调成功后,VideoView 开始播放。
更多信息,参考 错误码查询 |
|
IThingSmartCameraP2P | stopPreview | 停止拉流 | - | |
IThingSmartCameraP2P | disconnect | 断连 | 设备不需要连接时,需要及时断开释放 P2P 会话 |
注意不要在 IThingSmartCameraP2P
对象调用方法的回调函数里(可能异步调用)调用该对象的其他 API。否则,可能会造成死锁。
void connect(String devId, OperationDelegateCallBack callBack);
void startPreview(int clarity, OperationDelegateCallBack callBack);
int stopPreview(OperationDelegateCallBack callBack);
void destroyP2P();
Java:
// 1. 创建 IThingSmartCameraP2P
IThingSmartCameraP2P mCameraP2P = null;
IThingIPCCore cameraInstance = ThingIPCSdk.getCameraInstance();
if (cameraInstance != null) {
mCameraP2P = cameraInstance.createCameraP2P(devId));
}
ThingCameraView mVideoView = findViewById(R.id.camera_video_view);
// 2. 为渲染视图容器设置回调
mVideoView.setViewCallback(new AbsVideoViewCallback() {
@Override
public void onCreated(Object view) {
super.onCreated(view);
// 渲染视图构造完成时,为 IThingSmartCameraP2P 绑定渲染视图
if (null != mCameraP2P){
mCameraP2P.generateCameraView(view);
}
}
});
// 3. 构造渲染视图
mVideoView.createVideoView(devId);
// 4. 注册 P2P 监听
AbsP2pCameraListener absP2pCameraListener = new AbsP2pCameraListener() {
@Override
public void onSessionStatusChanged(Object camera, int sessionId, int sessionStatus) {
super.onSessionStatusChanged(camera, sessionId, sessionStatus);
// sessionStatus = -3 (超时)或 -105(鉴权失败) 时,建议发起一次重连,注意避免循环
}
};
if (null != mCameraP2P){
mCameraP2P.registerP2PCameraListener(absP2pCameraListener);
}
// 5. 连接 P2P
if (null != mCameraP2P){
mCameraP2P.connect(devId, new OperationDelegateCallBack() {
@Override
public void onSuccess(int sessionId, int requestId, String data) {
//连接成功,发送 Handler 消息回到主线程再发起拉流
}
@Override
public void onFailure(int sessionId, int requestId, int errCode) {
//连接失败
}
});
}
// 6. 拉流
if (null != mCameraP2P){
mCameraP2P.startPreview(new OperationDelegateCallBack() {
@Override
public void onSuccess(int sessionId, int requestId, String data) {
//开始播放实时视频成功
}
@Override
public void onFailure(int sessionId, int requestId, int errCode) {
//开始播放实时视频失败
}
});
}
// 7. 在页面关闭或者不需要拉流时,停流释放 P2P 会话
@Override
public void onDestroy() {
if (null != mCameraP2P) {
// 不需要拉流时,停止拉流
mCameraP2P.stopPreview(null);
mCameraP2P.disconnect(devId,null);
mCameraP2P.removeOnP2PCameraListener(absP2pCameraListener);
mCameraP2P.destroyP2P();
}
}
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈