1. 摄像机功能

IPC SDK 提供智能摄像机的实时视频播放,设备存储卡录像播放,对当前正在播放的视频截图、录制视频, 与摄像机实时通话等基础能力,并提供视频帧解码后的 YUV 数据,开发者可以对视频数据进行二次处理。

1.1. 视频直播

视频直播需要创建 ITuyaSmartCameraP2P 对象,然后进行 P2P 连接,连接成功后就可以播放实时视频、截图、录制视频和实时对讲数据传输。

1.1.1. 初始化

创建 ITuyaSmartCameraP2P 对象

接口说明

public static ITuyaSmartCameraP2P createCameraP2P(int p2pType, String devId);

参数说明

参数 说明
p2pType 设备 P2P 类型,从 DeviceBean 中获取,详见P2P 类型

示例代码

ITuyaSmartCameraP2P cameraP2P = TuyaSmartCameraP2PFactory.createCameraP2P(intentP2pType, devId);

页面布局文件中引入渲染视图容器

TuyaCameraView 是 IPC SDK 提供的视频渲染视图,如果您需要使用自己的视频渲染视图,只需要实现 IRegistorIOTCListener 接口,再将您自己的视频渲染视图和 ITuyaSmartCameraP2P 绑定即可。

<com.tuya.smart.camera.middleware.widget.TuyaCameraView
  android:id="@+id/camera_video_view"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  />

为渲染视图容器设置回调

接口说明

public void setViewCallback(AbsVideoViewCallback callback);

参数说明

参数 说明
callback 回调接口

示例代码

TuyaCameraView mVideoView = findViewById(R.id.camera_video_view);
mVideoView.setViewCallback(new AbsVideoViewCallback() {
    @Override
    public void onCreated(Object o) {
        super.onCreated(o);
        //渲染视图构造完成时回调
    }
});

AbsVideoViewCallback

渲染视图回调抽象类,开发者只需要重写自己关心的回调,一般只需要重写 onCreated 方法。

接口说明

渲染视图构造完成时回调

public void onCreated(Object view);

接口说明

点击视图时回调

public void videoViewClick();

接口说明

触发视图滑动操作时回调

public void startCameraMove(String cameraDirection);

参数说明

参数 说明
cameraDirection 滑动方向。"0"代表上,"2"代表右,"4"代表下,"6"代表左

接口说明

点击视图后手指抬起时回调

public void onActionUP();

构造渲染视图

接口说明

public void createVideoView(int p2pType);

参数说明

参数 说明
p2pType P2p 类型

示例代码

TuyaCameraView mVideoView = findViewById(R.id.camera_video_view);
mVideoView.createVideoView(p2pType);

接口说明

获取视频渲染视图

需要注意如果未构造视频渲染视图会返回 null

public Object createdView();

示例代码

TuyaCameraView mVideoView = findViewById(R.id.camera_video_view);
mVideoView.createdView();

为 ITuyaSmartCameraP2P 绑定渲染视图

接口说明

void generateCameraView(T view);

示例代码

mCameraP2P.generateCameraView(mVideoView.createdView());

注册 P2P 监听

向 ITuyaSmartCameraP2P 注册监听器,开发者只需要重写自己关心的回调

接口说明

void registerP2PCameraListener(AbsP2pCameraListener listener);

链路

示例代码

// 1. 创建 ITuyaSmartCameraP2P
ITuyaSmartCameraP2P mCameraP2P = TuyaSmartCameraP2PFactory.createCameraP2P(p2pType, devId);
TuyaCameraView mVideoView = findViewById(R.id.camera_video_view);
// 2. 为渲染视图容器设置回调
mVideoView.setViewCallback(new AbsVideoViewCallback() {
    @Override
    public void onCreated(Object o) {
        super.onCreated(o);
        //4. 渲染视图构造完成时,为 ITuyaSmartCameraP2P 绑定渲染视图
        if (null != mCameraP2P){
            mCameraP2P.generateCameraView(o);
        }
    }
});
// 3. 构造渲染视图
mVideoView.createVideoView(p2pType);
// 4. 注册 P2P 监听
mCameraP2P.registerP2PCameraListener(new AbsP2pCameraListener() {
    @Override
    public void onSessionStatusChanged(Object o, int i, int i1) {
        super.onSessionStatusChanged(o, i, i1);
    }
});

1.1.2. P2P 连接

在开始视频播放之前,需要先连接 P2P 通道。P2P 状态需要使用者自己维护,SDK 只负责下发指令和接收摄像机响应结果。

接口说明

开始连接 P2P 通道

void connect(String devId, OperationDelegateCallBack callBack);

断开 P2P 通道

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) {
        //连接失败
    }
});

1.1.3. 实时播放视频

P2P连接成功之后,就能进行实时视频播放了。

接口说明

开始播放实时视频

void startPreview(int clarity, OperationDelegateCallBack callBack);

停止播放实时视频

int stopPreview(OperationDelegateCallBack callBack);

参数说明

参数 说明
clarity 清晰度模式
callBack 操作结果回调

清晰度模式

模式
标清 2
高清 4

示例代码

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 回调会开始接收视频数据,并抛给业务层。

1.1.4. 销毁 ITuyaSmartCameraP2P 对象

不再使用 camera 功能的时候,一定要注销 P2P 监听器、销毁 P2P 对象

接口说明

注销 P2P 监听器

void removeOnP2PCameraListener();

接口说明

销毁 P2P 对象

void destroyP2P();

示例代码

@Override
public void onDestroy() {
    if (null != mTuyaSmartCamera) {
        mTuyaSmartCamera.removeOnP2PCameraListener();
        mTuyaSmartCamera.destroyP2P();
    }
}

1.2. 流程图

results matching ""

    No results matching ""