博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MFC 发送数据到SDK服务器
阅读量:6930 次
发布时间:2019-06-27

本文共 5726 字,大约阅读时间需要 19 分钟。

//====HWPuSDK.h=================================================================

/* 接口文件中 : 结构体及变量的定义 *///连接信息typedef struct {    CHAR szDecVIP[IP6_ADDR_LEN];    //视频IP地址,以"/n" 做为结束符    ULONG ulDecVPort;               //视频端口    CHAR szDecAIP[IP6_ADDR_LEN];    //音频IP地址,以"/n" 做为结束符    ULONG ulDecAPort;               //音频端口    CHAR chTransProtocol;           //传输协议: 1:RTP(TCP Client) 2:RTP(UDP) ...            // 音频视频解码需相同,当TCP时,以上IP、PORT为入参,当UDP时,IP、PORT为出参    CHAR chDecFlags;                //解码标志:0 仅解视频; 1 仅解音频; 2 同时解,同时解时使用VIP及VPORT即可    CHAR chKeepaliveFlags;          //保活标志,在VIP/VPort 发送RTSP保活信令: 0 不保活,1 保活     CHAR szRes[6];                  //预留,主动解码:szRes[0]=1;默认被动:szRes[0]=0;被动解码音视频Ip和Port可不填写} PU_DECLINK_INFO_S, *LPPU_DECLINK_INFO_S;//解码信息结构体typedef struct DEC_INFO {    ULONG ulChannelId;              //通道ID    PU_DECLINK_INFO_S stDecLinkInfo;//连接信息} PU_DEC_INFO_S, *LPPU_DEC_INFO_S;

//====DecSendData.h=============================================================

public:    LONG    m_threadID;         //     bool    m_bThreadFlage;     //     CString DecSendData::GetDirectoryPathA();    void DecSendData::SendData();    int DecSendData::getOneFrame(char *&pstrbuff, int &iLength, char *pOneFrame,                             int &iOneLength, char &cType, bool &bIsFindStartCode);

//====DecSendData.cpp===========================================================

/* 窗体函数中 : 结构体及变量的定义 */typedef struct{    //byte 0    unsigned char TYPE : 5;    unsigned char NRI  : 2;    unsigned char F    : 1;} NALU_HEADER;public static int const H264_START_CODE_LENGTH = 0x04;public static int const H264_START_CODE = 0x00000001;public static int const H264_NALU_TYPE_SILCE = 1;public static int const H264_NALU_TYPE_IDR = 5;public static int const EIVS_MAX_IPADDR_LEN = 32;

-------------------------------------------------------------------------------------------------------------------

// 线程声明DWORD WINAPI ThreadProc( LPVOID lpParam ){    // 创建DecSendData窗体的对象    DecSendData *pDlg = (DecSendData *)lpParam;    ASSERT(pDlg);    // 调用发送数据函数    pDlg->SendData();    return 1;}

-------------------------------------------------------------------------------------------------------------------

// 发送数据按钮事件void DecSendData::OnBnClickedOk(){    // TODO: 在此添加控件通知处理程序代码    UpdateData(TRUE);    g_pMainDlg->fedDecInfo.ulChannelId = g_pMainDlg->m_pDecodeMainInfo->ulChannelId;    m_bThreadFlage = true;    CreateThread( NULL, 0,ThreadProc,(void*)this,0,NULL);    OnOK();}

-------------------------------------------------------------------------------------------------------------------

// 发送数据void DecSendData::SendData(){    FILE *pFileHandle = NULL;    // 打开需要解码的文件    pFileHandle = fopen("OneStdFrame3.264", "rb");    char *pBuff = new char[1024 * 1024];    char *pOneFrame = new char[1024 * 1024];    int iOneLength = 0;    int iReadLength = 1;    ULONG ulthreadID = m_threadID;    bool bIsFindStartCode = false;    char cType = 0;;    while ((0 < iReadLength) && m_bThreadFlage)    {        iReadLength = fread(pBuff, 1, 1024 * 1024, pFileHandle);        if (iReadLength < 0)        {            printf("Error : Read the decodeing file Error! \n");            break;        }        char *pTempBuff = pBuff;        int iLeftLength = iReadLength;        while ((iLeftLength > 0) && m_bThreadFlage)        {            // 获得一帧数据            if (1 == getOneFrame(pTempBuff, iLeftLength, pOneFrame, iOneLength, cType, bIsFindStartCode))            {                memcpy(pOneFrame, pTempBuff, iLeftLength);                iOneLength = iLeftLength;                break;            }            else            {                //fwrite(pOneFrame, 1, iOneLength, pnFileHandle);                IVS_PU_MatrixSendData(ulthreadID, pOneFrame, iOneLength, ENC_H264);                iOneLength = 0;                if ((H264_NALU_TYPE_SILCE == cType)                    || (H264_NALU_TYPE_IDR == cType))                {                    //fwrite("Hello world.", 1,sizeof("Hello world."), pnFileHandle);                    Sleep(40);                }                //fflush(pnFileHandle);            }        }    }    Sleep(1000);    delete [] pBuff;    pBuff = NULL;    delete [] pOneFrame;    pOneFrame = NULL;    fclose(pFileHandle);}

-------------------------------------------------------------------------------------------------------------------

// 获取一帧数据int DecSendData::getOneFrame(char *&pstrbuff, int &iLength, char *pOneFrame, int &iOneLength, char &cType, bool &bIsFindStartCode){    int iCopyLength = 0;    while (H264_START_CODE_LENGTH <= iLength)    {        if (H264_START_CODE == ntohl((unsigned long)*(int *)pstrbuff))  //lint !e826        {            if (!bIsFindStartCode)            {                bIsFindStartCode = true;                pstrbuff += H264_START_CODE_LENGTH;                iLength -= H264_START_CODE_LENGTH;                iCopyLength += H264_START_CODE_LENGTH;                NALU_HEADER naluheader = *(NALU_HEADER*)pstrbuff;                cType = naluheader.TYPE;            }            else            {                if (iOneLength)                {                    memcpy(pOneFrame + iOneLength, (pstrbuff - iCopyLength), iCopyLength);                }                else                {                    memcpy(pOneFrame, (pstrbuff - iCopyLength), iCopyLength);                }                iOneLength += iCopyLength;                bIsFindStartCode = false;                return 0;            }        }        if (bIsFindStartCode)        {            ++iCopyLength;        }        ++pstrbuff;        --iLength;    }    pstrbuff -= iCopyLength;    iLength += iCopyLength;    return 1;}

结尾。。。。。。待完善!

转载于:https://www.cnblogs.com/xuejianhui/articles/2741305.html

你可能感兴趣的文章
man手册的基本使用
查看>>
ios9---通讯录权限
查看>>
Python函数的参数
查看>>
大前端的自动化工厂(3)—— babel
查看>>
第三周
查看>>
如何选择最好的VDI瘦客户端
查看>>
android学习之手机防盗Two
查看>>
证书格式简介及不同格式之间的转换方式
查看>>
Cisco 交换机端口镜像
查看>>
cgic程序的编写遇到的问题
查看>>
python 学习笔记6(数据库 sqlite)
查看>>
git安装配置
查看>>
c# equals和==的区别
查看>>
0415博客园评价
查看>>
Chisel3 - Tutorial - Stack
查看>>
linux下搜索命令
查看>>
关于this绑定的四种方式
查看>>
【原创】一起学C++ 之指针的--/++ ---------C++ primer plus(第6版)
查看>>
HDU5945 Fxx and game(DP+单调队列优化)
查看>>
django启动创建用户失败
查看>>