更新时间:2023-05-25 06:23:52
视频直播需要先创建 IThingSmartCameraP2P
对象,然后进行 P2P(Peer-to-peer)通道连接。P2P 连接成功后,就可以播放实时视频、查看截图、录制视频、实时对讲数据传输。
整体流程如下图所示:
接口说明
创建 IThingSmartCameraP2P
对象,用来支持此设备预览。
IThingSmartCameraP2P createCameraP2P(String devId);
参数说明
参数 | 说明 |
---|---|
devId | 设备 ID |
示例代码
IThingIPCCore cameraInstance = ThingIPCSdk.getCameraInstance();
if (cameraInstance != null) {
cameraInstance.createCameraP2P(devId));
}
ThingCameraView
是 IPC SDK 为页面布局文件提供的视频渲染视图容器。
如果您需要使用自己的视频渲染视图,只需实现 IRegistorIOTCListener
接口,再将您自己的视频渲染视图和 IThingSmartCameraP2P
对象绑定即可。
<com.thingclips.smart.camera.middleware.widget.ThingCameraView
android:id="@+id/camera_video_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
接口说明
public void setViewCallback(AbsVideoViewCallback callback);
参数说明
参数 | 说明 |
---|---|
callback | 回调接口 |
示例代码
ThingCameraView mVideoView = findViewById(R.id.camera_video_view);
mVideoView.setViewCallback(new AbsVideoViewCallback() {
@Override
public void onCreated(Object view) {
super.onCreated(view);
//渲染视图构造完成时回调
}
});
AbsVideoViewCallback
AbsVideoViewCallback
为渲染视图回调抽象类,您可以重写自己需要的回调,一般重写 onCreated
方法。
接口说明
渲染视图容器构造完成时回调。
public void onCreated(Object view);
接口说明
单击视图时回调。
public void videoViewClick();
接口说明
设置触发视图滑动操作时回调。
public void setOnRenderDirectionCallback(OnRenderDirectionCallback onRenderDirectionCallback);
参数说明
参数 | 说明 |
---|---|
onRenderDirectionCallback | 触摸事件回调接口 |
OnRenderDirectionCallback
OnRenderDirectionCallback
为渲染视图触摸事件的抽象类,您可以利用此方法来实现云台 PTZ 功能。
public interface OnRenderDirectionCallback {
//左滑
void onLeft();
//右滑
void onRight();
//上滑
void onUp();
//下滑
void onDown();
//手指抬起,取消
void onCancel();
}
接口说明
public void createVideoView(String devId);
参数说明
参数 | 说明 |
---|---|
devId | 设备 ID |
示例代码
ThingCameraView mVideoView = findViewById(R.id.camera_video_view);
mVideoView.createVideoView(devId);
如果未构造视频渲染视图,会返回 null。
接口说明
public Object createdView();
示例代码
ThingCameraView mVideoView = findViewById(R.id.camera_video_view);
mVideoView.createdView();
为 IThingSmartCameraP2P
对象绑定视频渲染视图。
接口说明
void generateCameraView(T view);
示例代码
mCameraP2P.generateCameraView(mVideoView.createdView());
向 IThingSmartCameraP2P
对象注册监听器,否则无法正常显示画面。
接口说明
void registerP2PCameraListener(AbsP2pCameraListener listener);
// 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);
//4. 渲染视图构造完成时,为 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);
}
在开始视频播放之前,需要先连接 P2P 通道。
IPC SDK 只负责下发指令和接收摄像机响应结果,您需要自行维护 P2P 状态。
接口说明
连接 P2P 通道。
void connect(String devId, OperationDelegateCallBack callBack);
接口说明
连接 P2P 通道,并指定优先连接方式。
void connect(String devId, int mode, OperationDelegateCallBack callBack);
参数说明
参数 | 说明 |
---|---|
mode | 连接方式
|
接口说明
void disconnect(String devId, OperationDelegateCallBack callBack);
参数说明
参数 | 说明 |
---|---|
callBack | 操作结果回调 |
示例代码
mCameraP2P.connect(devId, new OperationDelegateCallBack() {
@Override
public void onSuccess(int sessionId, int requestId, String data) {
//连接成功
}
@Override
public void onFailure(int sessionId, int requestId, int errCode) {
//连接失败
}
});
P2P 连接成功之后,就能进行实时视频播放了。
接口说明
开始播放实时视频。
void startPreview(int clarity, OperationDelegateCallBack callBack);
接口说明
停止播放实时视频。
int stopPreview(OperationDelegateCallBack callBack);
参数说明
参数 | 说明 |
---|---|
clarity | 清晰度模式
|
callBack | 操作结果回调 |
示例代码
mCameraP2P.startPreview(new OperationDelegateCallBack() {
@Override
public void onSuccess(int sessionId, int requestId, String data) {
//开始播放实时视频成功
}
@Override
public void onFailure(int sessionId, int requestId, int errCode) {
//开始播放实时视频失败
}
});
startPreview
开始播放实时视频成功回调之后,onReceiveFrameYUVData
回调会开始接收视频数据,并传递给业务层。
不再使用 IPC 功能的时候,请务必注销 P2P 监听器和销毁 IThingSmartCameraP2P
对象。
接口说明
注销 P2P 监听器。
void removeOnP2PCameraListener(AbsP2pCameraListener listener);
接口说明
删除 P2P 对象。
void destroyP2P();
示例代码
@Override
public void onDestroy() {
if (null != mCameraP2P) {
mCameraP2P.removeOnP2PCameraListener(absP2pCameraListener);
mCameraP2P.destroyP2P();
}
}
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈