ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

树莓派 Onenet 视频服务 出现 “段错误”

2021-10-18 13:34:53  阅读:228  来源: 互联网

标签:__ 视频 树莓 Onenet struct int device soap onvif


树莓派 Onenet 视频服务 出现 “段错误”

软硬平台

硬件平台:树莓派

软件版本:2020-02-13-raspbian-buster.img

问题描述

在运行编译完成的Onenet视频推流程序时,出现如下情况:

pi@raspberrypi:~/Desktop/onenet_sdk/bin $ ./sample_video_s 
INFO: [info]:url=http://192.168.137.***:8081/onvif/device_service has profiles-------------------------------------------------------:
INFO: profile [0: level=1 bitrate=10000 framterate=10]
段错误

问题解决

出现“段错误”主要是因为指针没有初始化,造成了树莓派内存访问问题,我们需要将sample/onvif/device_onvif.c中所有的指针初始化为NULL,再次编译后的文件就可以放到树莓派平台愉快的玩耍了。

#include <stdint.h>
#include <log.h>
#include "namespace.h"
#include "soapH.h"
#include "device_onvif.h"
#include "wsseapi.h"
#include "getifaddrs.h"


#define DEBUG 1

#define M_ONVIFDEVICE_NUMBERS 30
#define M_ONVIFDEVICE_DISCOVERY_NUMS 30

int  ont_onvifdevice_capablity(const char *url, device_onvif_t *devicePtr);
int  ont_onvifdevice_getplayurl(device_onvif_t *devicePtr, int profileindex);
int  ont_onvifdevice_getprofile(device_onvif_t *devicePtr);
int  ont_onvifdevice_getconfigurations(device_onvif_t *devicePtr);
***********************************省略***********************************
}


int  ont_onvifdevice_getprofile(device_onvif_t *devicePtr)
{
    struct _trt__GetProfiles trt__GetProfile = { 0 };
    struct _trt__GetProfilesResponse trt__Response = { 0 };
    static struct soap *soap;
    struct SOAP_ENV__Header header = { 0 };
    int i = 0;
    int result = 0;
    soap = soap_new();

    ***********************************省略***********************************
}

int  ont_onvifdevice_capablity( const char *url, device_onvif_t *devicePtr)
{
    static struct soap *soap;
    struct SOAP_ENV__Header header = { 0 };
    const char* soap_endpoint = url;
    int i = 0;
    int result = 0;
    struct _tds__GetCapabilities _Capabilities = { 0 };
    struct tt__Capabilities *items = NULL;
    struct _tds__GetCapabilitiesResponse __GetCapabilitiesResponse = { 0 };
    enum tt__CapabilityCategory _eCapAll[1] = { tt__CapabilityCategory__All };

   ***********************************省略***********************************
}

int  ont_onvifdevice_getplayurl(device_onvif_t *devicePtr, int profileindex)
{
    struct _trt__GetStreamUri trt__GetStreamUri = { 0 };
    struct _trt__GetStreamUriResponse trt__GetStreamUriResponse = { 0 };
    struct tt__StreamSetup _tt__StreamSetup = { 0 };
    struct tt__Transport tt__transport = { 0 };
    int result = 0;
    trt__GetStreamUri.StreamSetup = &_tt__StreamSetup;
    trt__GetStreamUri.StreamSetup->Stream = 0;//stream type  

    trt__GetStreamUri.StreamSetup->Transport = &tt__transport;
    trt__GetStreamUri.StreamSetup->Transport->Protocol = 2;
    trt__GetStreamUri.StreamSetup->Transport->Tunnel = 0;

    trt__GetStreamUri.ProfileToken = devicePtr->profiles[profileindex].strprofile;
    struct soap *soap;
    struct SOAP_ENV__Header header = { 0 };

    soap = soap_new();
    soap_set_namespaces(soap, namespaces);
    soap_default_SOAP_ENV__Header(soap, &header);
    soap_wsse_add_Security(soap);
    soap_wsse_add_UsernameTokenDigest(soap, "Id", (const char*)devicePtr->strUser, (const char*)devicePtr->strPass);
    soap->recv_timeout = 5;
***********************************省略***********************************
}

/*#include "namespace.h"*/

void ont_gen_uuid(char _HwId[1024])
{
	unsigned char macaddr[6];
	unsigned int Flagrand;

	srand((int)time(0));
	Flagrand = rand() % 9000 + 1000;
	macaddr[0] = 0x1; macaddr[1] = 0x2; macaddr[2] = 0x3; macaddr[3] = 0x4; macaddr[4] = 0x5; macaddr[5] = 0x6;

	sprintf(_HwId, "urn:uuid:%ud68b-1dd2-11b2-a105-%02X%02X%02X%02X%02X%02X",
		Flagrand, macaddr[0], macaddr[1], macaddr[2], macaddr[3], macaddr[4], macaddr[5]);

}

device_onvif_discovery_info_t* getDeviceOnvifDiscoveryPtr(device_onvif_discovery_list_t * dodlPtr, int* index)
{
    int i = *index;
    device_onvif_discovery_info_t *dodiPtr = NULL;
***********************************省略***********************************
}


static struct soap* ont_onvif_initsoap(struct SOAP_ENV__Header *header, const char *was_To, const char *was_Action, int timeout, const char* ip)
{
	struct soap *soap = NULL;
	unsigned char macaddr[6];
	char _HwId[1024];
	unsigned int Flagrand;
	soap = soap_new();
	***********************************省略***********************************
}

int ont_onvif_device_discovery( device_onvif_cluster_t *cluster )
{
    device_onvif_discovery_list_t *_gOnvifDeviceDiscoveryPtr = &cluster->onvif_device_discovery_list;
	int HasDev = 0;
    int i = 0;
	int retval = SOAP_OK;
	wsdd__ProbeType req;
	struct __wsdd__ProbeMatches resp;
	wsdd__ScopesType sScope;
	struct SOAP_ENV__Header header;
	struct soap* soap;

   ***********************************省略***********************************
}
***********************************省略***********************************
***********************************省略***********************************

标签:__,视频,树莓,Onenet,struct,int,device,soap,onvif
来源: https://blog.csdn.net/qq_44857700/article/details/120824556

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有