透明通道


流程图如下

pic


Code

#include "GlnkClientMgr.h"
#include "glnk_client.h"
#include "DataSourceListener2.h"
#include "DeviceStatusChangedListener.h"
#include "glnk_client_GlnkChannel.h"
#include "glnk_client_LanSearchIndep.h"
#include "glnk_utils.h"
#include "OnLanSearchListener.h"
#include "glnk_errno.h"

#ifdef WIN32
#pragma comment(lib, "glnkclient.lib")
#pragma comment(lib, "libglnkcclient.a")
#endif

class DeviceStatus :public DeviceStatusChangedListener
{
    virtual void onChanged(const char* gid, int status)
    {
        printf("[测试代码]%s 状态码为:%d\n", gid, status);
    }
};


class DataSource : public DataSourceListener
{
    virtual void onConnecting(){
        printf("[测试代码]开始连接设备\n");
    }


    virtual void onConnected(int mode, const char* ip, unsigned short port){
        printf("[测试代码]连接完成,连接模式为:%d , 设备ip:%s, 设备端口: %d \n", mode, ip, port);
    }

    virtual void onModeChanged(int mode, const char* ip, unsigned short port){
        printf("[测试代码]连接模式更改,连接模式为:%d , 设备ip:%s, 设备端口: %d \n", mode, ip, port);
    }

    virtual void onDisconnected(int errcode) {
        printf("[测试代码]连接被非主动断开,断开码:%d\n", errcode);
    }


    virtual void onReConnecting() {
        printf("[测试代码]正在重新连接\n");
    }

    virtual void onAuthorized(int result){
        printf("[测试代码]登录设备反馈码:%d\n", result);
    }

    virtual void onDataRate(unsigned int bytesPersecond) {
        printf("[测试代码]每秒流量为:%d\n", bytesPersecond);
    }

    virtual void onAVStreamFormat(void *data, unsigned int length) {

        GlnkStreamFormat format = { 0 };

        int result = getGlnkStreamFormat(&format, data, length);
        printf("[测试代码]此处获取音视频信息\n");
    }

    virtual void onIOCtrlByManu(const void *data, unsigned short length){
        printf("[测试代码]设备通过透明通道返回的数据\n");
    }


    virtual void onVideoData(const void *data, unsigned int length, unsigned int frameIndex, unsigned int timestamp, int isIFrame) {}
    virtual void onAudioData(const void *data, unsigned int length, unsigned int timestamp) {}
    virtual void onRemoteFileSearchResp(int result, int count){}
    virtual void onRemoteFileSearchItem(const char *framename, int recordType,
        int startYear, int startMonth, int startDay, int startHour, int startMinute, int startSecond, int startMs,
        int endYear, int endMonth, int endDay, int endHour, int endMinute, int endSecond, int endMs) {}
    virtual void onRemoteFileResp(int version, int result, int fileDuration) {}
    virtual void onRemoteFileEOF(){}
    virtual void onRemoteFileCtrlResp(int result, int ctrlCmd) {}
    virtual void onTalkingResp(int result, int audiofmt, int audioChannels, int audioSampleRate, int audioBitsPerSample){}
    virtual void onKeepliveResp(int result){}
    virtual void onVideoDataManu(const void *data, unsigned int length, const void *frameInfo, unsigned int infoLength) {}
    virtual void onAudioDataManu(const void *data, unsigned int length, const void *frameInfo, unsigned int infoLength) {}
    virtual void onIOCtrl(unsigned short type, const void *data, unsigned short length) {}

};


int main()
{
    const char* gid[] = { "bl06fb5c4x", "tt0xx244f8" };
    GlnkClient* client = NULL;
    GlnkChannel* channel = NULL;

    DeviceStatus* l = new DeviceStatus;
    DataSource* ds = new DataSource;

    GlnkClientMgr* clientMgr = GlnkClientMgr::getInstance();
    if (clientMgr)
    {
        client = clientMgr->getGlnkClient();
        if (client)
        {
            if (-1 == client->init("Demo", "20150914", "1234567890", 1, 1))//设置环境
                goto err;

            if (-1 == client->setOnDeviceStatusChangedListener(l))
                goto err;

            if (-1 == client->setStatusAutoUpdate(1))
                goto err;

            if (-1 == client->start())
                goto err;

            int re = 0;
            for (int i = 0; i < 2; i++)
                re = client->addGID(gid[i]);



            channel = GlnkChannel::Create(client, ds);
            if (channel)
            {
                re = channel->setMetaData("bl06fb5c4x", "admin", "admin", 0, 3, 2);
                re = channel->start();

                getchar();

                //re = channel->sendData(data, size);//发送透明通道数据

                getchar();
            }
        }
    }

err:
    if (channel)
    {
        channel->stop();
        channel->release();
    }

    if (client)
        client->release();
    if (clientMgr)
        clientMgr->release();

    delete l;
    delete ds;

    return 0;
}