基于linux下GB28181实现

开发环境:debian linux   硬件环境:Hi3516D   开发工具:arm+linux+gcc、Xshell等

项目描述:

基于osip2以及eXosip2的开源库,下载编译,移植调试,流封装,最后实现GB28181实时流推送功能

工作职责:

实现GB28181实时流推送功能

实现步骤:

1,在gun官网下载开源库osip和exosip源代码,在windows上的VS2010上建立GB28181工程,加载库和相关文件,梳理会话流程并编译。

2,在PC上下载常用GB28181服务器,并且安装,配置。

3,两台PC,一台模拟相机,作为GB28181的客户端,另外一台作为GB28181的服务端,实现SIP协议的注册及会话,同时,以H264视频文件测试推流是否成功。

4,将windows上实现的GB28181协议,移植到linux上,实现推流到服务器。

5,将GB28181工程在linux上,再一次进行交叉编译,移植到ARM平台,准备在实现推流,以视频文件进行推流测试。

6,取得实时视频流,先经过PS流格式封装、再进行RTP打包封装,最后经SIP协议,实时推送到服务器,实现GB28181的最后功能

int *gb28181_init_Sip(void *arg)
{

    sleep(5);

    char loacal_ip[30]={0};
  int i,flag;
  int flag1 = 1;
    printf("jxc-------------------------gb28181 start\n");

    //IPC_Client_Sent_Port(30000);
    //eXosip_event_geteventsocket();
    
    //libmath_init();
    //libmath_init_2();

    Get_Dst_Src_IPaddress();


    get_local_ip_char("eth0",loacal_ip);

    memset(eXosip_ipc_ip,0,sizeof(eXosip_ipc_ip));
    memset(eXosip_media_ip,0,sizeof(eXosip_media_ip));
    
    strcpy(eXosip_ipc_ip,loacal_ip);
    strcpy(eXosip_media_ip,loacal_ip);

    //printf("[jxc]:Dest_IP=%s \n",Dest_IP);
    //printf("[jxc]:Src_IP=%s \n\n",Src_IP);

    //memset(eXosip_server_ip,0,sizeof(eXosip_server_ip));
    //memset(eXosip_ipc_ip,0,sizeof(eXosip_ipc_ip));
    //memset(eXosip_media_ip,0,sizeof(eXosip_media_ip));
    
    //strcat(eXosip_server_ip,Dest_IP);
    //strcat(eXosip_ipc_ip,Src_IP);
    //strcat(eXosip_media_ip,Src_IP);
    

    device_info.server_id            = eXosip_server_id;
    device_info.server_ip            = eXosip_server_ip;
    device_info.server_port         = eXosip_server_port;

    device_info.ipc_id                = eXosip_ipc_id;
    device_info.ipc_pwd             = eXosip_ipc_pwd;
    device_info.ipc_ip                = eXosip_ipc_ip;
    
    device_info.ipc_media_port        = eXosip_ipc_media_port;
    device_info.ipc_sess_port        = eXosip_ipc_sess_port;
    
    device_info.alarm_id            =eXosip_alarm_id;
    
    device_info.media_ip            =eXosip_media_ip;
    device_info.media_port            =eXosip_media_port;

    printf("---------------------------------------\n");
    printf("[jxc]:server_ip=%s \n",device_info.server_ip);
    printf("[jxc]:ipc_ip=%s \n",device_info.ipc_ip);
    printf("[jxc]:media_ip=%s \n\n\n",device_info.media_ip);
    printf("---------------------------------------\n");

    int len0=strlen(device_info.server_ip);
    int len1=strlen(device_info.server_id);
    int len2=strlen(device_info.server_port);
    int len3=strlen(device_info.ipc_id);
    printf("------0-------len=%d \n",len0);
    printf("------1-------len=%d \n",len1);
    printf("------2-------len=%d \n",len2);
    printf("------3-------len=%d \n",len3);

    //---------鍘绘帀灏惧反涓婇潪IP鍦板潃鐨勭壒娈婂瓧绗?
    for(i=0;i<len0;i++)
    {
        if((device_info.server_ip[i]!=0X2E)&&((device_info.server_ip[i]<0X30)||(device_info.server_ip[i]>0X39)))
        {
            printf("device_info.server_ip[%d]=0x%x\n\n",i,device_info.server_ip[i]);
            device_info.server_ip[i] = 0x00;
        }
    }
    for(i=0;i<len1;i++)
    {
        if((device_info.server_id[i]<0X30)||(device_info.server_id[i]>0X39))
        {
            printf("device_info.server_id[%d]=0x%x\n\n",i,device_info.server_id[i]);
            device_info.server_id[i] = 0x00;
        }
    }    
    for(i=0;i<len2;i++)
    {
        if((device_info.server_port[i]<0X30)||(device_info.server_port[i]>0X39))
        {
            printf("device_info.server_port[%d]=0x%x\n\n",i,device_info.server_port[i]);
            device_info.server_port[i] = 0x00;
        }
    }
    for(i=0;i<len3;i++)
    {
        if((device_info.ipc_id[i]<0X30)||(device_info.ipc_id[i]>0X39))
        {
            printf("device_info.ipc_id[%d]=0x%x\n\n",i,device_info.ipc_id[i]);
            device_info.ipc_id[i] = 0x00;
        }
    }        
    //-------------------------------
    //device_info.server_ip[len0-1]=0x00;
    //device_info.server_ip[len0-2]=0x00;

    //device_info.server_id[len1-1]=0x00;
    //device_info.server_id[len1-2]=0x00;

    //device_info.server_port[len2-1]=0x00;
    //device_info.server_port[len2-2]=0x00;

    //device_info.ipc_id[len3-1]=0x00;
    //device_info.ipc_id[len3-2]=0x00;

    //device_info.ipc_ip[len2-1]=0x00;
    //device_info.ipc_ip[len2-2]=0x00;

    //device_info.media_ip[len3-1]=0x00;
    //device_info.media_ip[len3-2]=0x00;
    
    for(i=0;i<20;i++)
    {
        printf("0x%x ",device_info.server_ip[i]);
    }
    printf("\n");
    for(i=0;i<20;i++)
    {
        printf("0x%x ",device_info.ipc_ip[i]);
    }
    printf("\n");
    for(i=0;i<20;i++)
    {
        printf("0x%x ",device_info.media_ip[i]);
    }
    printf("\n");
    
    device_info.device_name         = eXosip_device_name;
    device_info.device_manufacturer = eXosip_device_manufacturer;
    device_info.device_model        = eXosip_device_model;
    device_info.device_firmware     = eXosip_device_firmware;
    device_info.device_encode        = eXosip_device_encode;
    device_info.device_record        = eXosip_device_record;
    
    device_status.status_on         = eXosip_status_on;
    device_status.status_ok         = eXosip_status_ok;
    device_status.status_online     = eXosip_status_online;
    device_status.status_guard        = eXosip_status_guard;
    device_status.status_time        = eXosip_status_time;

    dt_eXosip_callback.dt_eXosip_deviceControl = dt_eXosip_deviceControl;
    dt_eXosip_callback.dt_eXosip_getDeviceInfo = dt_eXosip_getDeviceInfo;
    dt_eXosip_callback.dt_eXosip_getDeviceStatus = dt_eXosip_getDeviceStatus;
    dt_eXosip_callback.dt_eXosip_getRecordTime = dt_eXosip_getRecordTime;
    dt_eXosip_callback.dt_eXosip_mediaControl = dt_eXosip_mediaControl;
    dt_eXosip_callback.dt_eXosip_playControl = dt_eXosip_playControl; 

    int cnt = 0;
    while (dt_eXosip_init() == -1)
    {
        cnt++;
        if (cnt > 10)
        {
            cnt = 0;
            printf("[jxc]:dt_eXosip_init() 10 times failed\n");
            sleep(3);
            return -1;
        }
    }
    if(dt_eXosip_register(3600) == 0)
      {
        printf("use timer in workthread of console application\n");
        
        //pthread_create(&pthread_1,NULL,Pthead_handl,NULL);
        //pthread_join(pthread_1,NULL);
        dt_eXosip_processEvent();
    }
    

    printf("\n\njxc-------------------------end\n");
    return (0);
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GB28181是一个基于SIP协议的视频监控标准,用于实现视频监控设备之间的互联互通。在Linux环境下进行GB28181的开发和移植需要以下几个步骤和工具: 1. 硬件环境:使用Hi3516D作为开发平台,该平台支持ARM架构。 2. 开发环境:使用Debian Linux作为操作系统,该系统提供了完整的开发环境和工具链,包括ARM Linux GCC等。 3. 交叉编译:在Linux上进行交叉编译,将GB28181工程移植到ARM平台上。交叉编译是指在一种平台上开发和编译程序,然后将其移植到另一种平台上运行。 4. 移植过程:首先,需要将GB28181工程适配到ARM平台的特定硬件和操作系统上。然后,使用工具链进行交叉编译,生成适用于ARM平台的可执行文件。 5. 推流测试:在移植完成后,可以使用视频文件进行推流测试,以验证GB28181在ARM平台上的功能和性能。 引用提供了开发环境和硬件环境的信息,而引用则提到了在Linux上进行交叉编译,并准备在ARM平台上实现推流。引用的代码片段显示了在程序中打印相关信息的代码。 综上所述,GB28181Linux上的开发和移植需要使用Debian Linux作为开发环境,并在ARM平台上进行交叉编译和移植。完成移植后,可以使用视频文件进行推流测试。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [基于linuxGB28181实现](https://blog.csdn.net/m0_37793633/article/details/124983291)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值