RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于飛凌嵌入式OK113i網(wǎng)頁視頻監(jiān)控項目

嵌入式技術 ? 來源:嵌入式技術 ? 作者:嵌入式技術 ? 2024-01-08 22:57 ? 次閱讀

1.開發(fā)板簡介

OK113i-S開發(fā)板采用核心板+底板的結構形式,基于全志T113-i處理器設計開發(fā),處理器為ARMCortex-A7, RISCV, HiFi4 DSP多核異構架構,主頻1.2GHz,核心板有兩種規(guī)格,分別是512MB DDR3L內存加8GB eMMC版本和256MB DDR3L內存加256MB SPI Nand版本。OK113i-S開發(fā)板將核心板的功能接口資源豐富、提供多種外設接口,如網(wǎng)卡、CPU內置音頻Codec、ADC、TF Card、LVDS、RGB、WIFI、4G等功能接口。

2.硬件開發(fā)平臺

開發(fā)平臺:Linux-5.4

編譯器:arm-linux-gnueabi-gcc 7.3.1

USB攝像頭

OK113i開發(fā)板

實現(xiàn)功能:通過OK113i飛凌嵌入式開發(fā)板,采用USB設備頭,通過V4L2框架實現(xiàn)視頻圖像采集。創(chuàng)建攝像頭圖像采集線程,搭建HTTP服務器,固定端口號為8080,建立HTTP長連接,實現(xiàn)網(wǎng)頁視頻監(jiān)控。

wKgaomWcCPiAadZLADnMcr04vyA576.pngwKgaomWcCW-AQ7roAFOLMXM97TI381.png

3.功能實現(xiàn)

1.移植交叉編譯器arm-linux-gnueabi-gcc。

2.移植矢量字庫freetye。

3.初始化攝像頭,通過V4L2驅動框架實現(xiàn)攝像頭編程;

4.創(chuàng)建攝像頭采集線程,搭建HTTP服務器,多線程處理http客戶端數(shù)據(jù)請求,建立http長連接;

5.采用互斥鎖+條件變量方式實現(xiàn)多線程間資源保護,將攝像頭采集圖像實時上傳至網(wǎng)頁端;

4.矢量字庫編譯與移植

FreeType 庫是一個完全免費(開源)的、高質量的且可移植的字體引擎,它提供統(tǒng)一的接口來訪問多種字體格式文件,可以非常方便我們開發(fā)字體顯示相關的程序功能。它支持單色位圖、反走樣位圖的渲染。 FreeType 庫是高度模塊化的程序庫,雖然它是使用 ANSI C開發(fā),但是采用面向對象的思想,因此, FreeType 的用戶可以靈活地對它進行裁剪。關于freetype 的詳細信息可以參考 freetype 的官方網(wǎng)站:https://www.freetype.org/來獲取更多相關的信息。

wKgZomWcCp2AFpH8AAwzInNqcm4185.png

[wbyq@wbyq src_pack]$ tar xvf /mnt/hgfs/ubuntu/software_pack/freetype-2.4.10.tar.bz2
[wbyq@wbyq src_pack]$ cd freetype-2.4.10/
[wbyq@wbyq freetype-2.4.10]$ ./configure --prefix=$PWD/_install --host=arm-linux
[wbyq@wbyq freetype-2.4.10]$ make && make install

5.V4L2攝像頭編程

V4L2 是 Video for linux2 的簡稱,為 linux 中關于視頻設備的內核驅動。在 Linux 中,視頻設備是設備文件,可以像訪問普通文件一樣對其進行讀寫,攝像頭在/dev/video*下,如果只有一個視頻設備,通常為/dev/video0。V4L2 是針對 uvc 免驅 usb 設備的編程框架,主要用于采集 usb 攝像頭等,編程模式如下:

wKgaomWcC2OAHt_-AAKSjArmBCM337.png

攝像頭初始化示例如下:

/*

攝像頭初始化

返回值:成功返回攝像頭描述符,失敗返回負數(shù)

*/

int Video_Init(struct CAMERA *camera)

{

    int video_fd;

    int i=0;

	/*1.打開設備節(jié)點*/

	video_fd=open(VIDEO_DEV,O_RDWR);

	if(video_fd==-1)return -1;

	/*2.設置攝像頭格式*/

	struct v4l2_format format;

	memset(&format,0,sizeof(format));

	format.type=V4L2_BUF_TYPE_VIDEO_CAPTURE;//視頻捕獲格式

	format.fmt.pix.width=800;

	format.fmt.pix.height=480;

	format.fmt.pix.pixelformat=V4L2_PIX_FMT_YUYV;//圖像數(shù)據(jù)格式y(tǒng)uyv

	if(ioctl(video_fd,VIDIOC_S_FMT,&format))return -2;

	printf("圖像尺寸:%d * %dn",format.fmt.pix.width,format.fmt.pix.height);

	camera->image_w=format.fmt.pix.width;

	camera->image_h=format.fmt.pix.height;

	/*3.向內核請求緩沖區(qū)*/

	struct v4l2_requestbuffers reqbuf;

	memset(&reqbuf,0,sizeof(reqbuf));

	reqbuf.count=4;/*緩沖區(qū)個數(shù)*/

	reqbuf.type=V4L2_BUF_TYPE_VIDEO_CAPTURE;//視頻捕獲格式

	reqbuf.memory=V4L2_MEMORY_MMAP;/*內存映射*/

	if(ioctl(video_fd,VIDIOC_REQBUFS,&reqbuf))return -3;

	printf("緩沖區(qū)個數(shù):%dn",reqbuf.count);

	/*4.將緩沖區(qū)映射到進程空間*/

	struct v4l2_buffer quebuff;

	for(i=0;imamp_buff[i]=mmap(NULL,quebuff.length,PROT_READ|PROT_WRITE,MAP_SHARED,video_fd,quebuff.m.offset);

		printf("buff[%d]=%pn",i,camera->mamp_buff[i]);

		camera->mmap_size=quebuff.length;

	}

	/*5.將緩沖區(qū)添加到采集隊列*/

	for(i=0;i

6.搭建HTTP服務器

HTTP 協(xié)議是 Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫,是用于從萬維網(wǎng)(WWW:World WideWeb )服務器傳輸超文本到本地瀏覽器的傳送協(xié)議。

HTTP 是基于客戶端/服務端(C/S)的架構模型,通過一個可靠的鏈接來交換信息,是一個無狀態(tài)的請求/響應協(xié)議。一個 HTTP"客戶端"是一個應用程序(Web 瀏覽器或其他任何客戶端),通過連接到服務器達到向服務器發(fā)送一個或多個 HTTP 的請求的目的。一個 HTTP"服務器"同樣也是一個應用程序通過接收客戶端的請求并向客戶端發(fā)送 HTTP 響應數(shù)據(jù)。HTTP 使用統(tǒng)一資源標識符(Uniform Resource Identifiers, URI)來傳輸數(shù)據(jù)和建立連接。

HTTP服務器創(chuàng)建示例:

/*1.創(chuàng)建網(wǎng)絡套接字*/

    sockfd=socket(AF_INET,SOCK_STREAM,0);

    if(sockfd==-1)

	 {

		 printf("創(chuàng)建socket套接字失敗n");

		 return 0;

	 }

     /*允許綁定已使用的端口號*/

	 int on = 1;

	 setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));

	 /*2.綁定端口號*/

	 struct sockaddr_in addr=

	 {

		.sin_family=AF_INET,//IPV4

		.sin_port=htons(HTTP_SERVER_PORT),//端口號

		.sin_addr.s_addr=INADDR_ANY,//本地所有IP

	 };

	 if(bind(sockfd,(struct sockaddr*)&addr,sizeof(addr)))

	 {

		 printf("綁定端口號失敗n");

		 return 0;

	 }

	 /*設置監(jiān)聽數(shù)量*/

	 listen(sockfd,100);

	 /*等待客戶端連接*/

	 struct sockaddr_in c_addr;

	 socklen_t addrlen=sizeof(c_addr);

	 int c_fd;

	 int *p;

	 while(1)

	 {

		 c_fd=accept(sockfd, (struct sockaddr *)&c_addr,&addrlen);

		 if(c_fd==-1)continue;

		 printf("%d 客戶端連接成功%s:%dn",c_fd,inet_ntoa(c_addr.sin_addr),ntohs(c_addr.sin_port));

		 p=malloc(sizeof(int));

		 *p=c_fd;

		 pthread_create(&pthid,NULL,pth_work,p);

		 pthread_detach(pthid);//設置分離屬性

	 }   

7.網(wǎng)頁視頻監(jiān)控處理

創(chuàng)建攝像頭采集線程,將采集的圖像進行JPG格式編碼,挺添加時間水印信息。攝像頭處理線程如下:

/*攝像頭處理函數(shù)*/

void *pth_camera_work(void *arg)

{

    LCD_Init();//LCD初始化

    video_fd=Video_Init(&camera);//攝像初始化

    if(video_fd

8.運行效果

wKgaomWcDRiAQ9bcAEe1tnzB810217.png

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5082

    文章

    19104

    瀏覽量

    304777
  • 視頻監(jiān)控

    關注

    17

    文章

    1710

    瀏覽量

    64945
  • 飛凌
    +關注

    關注

    0

    文章

    134

    瀏覽量

    16107
  • V4L2
    +關注

    關注

    0

    文章

    17

    瀏覽量

    3894
收藏 人收藏

    評論

    相關推薦

    技術帖 | 飛嵌入式T113-i開發(fā)板的休眠及喚醒操作

    嵌入式OK113i-S開發(fā)板支持兩種休眠方式:freeze和mem。本篇內容小編會為大家介紹如何讓飛嵌入式
    的頭像 發(fā)表于 12-29 08:02 ?1232次閱讀
    技術帖 | 飛<b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b>T<b class='flag-5'>113-i</b>開發(fā)板的休眠及喚醒操作

    【飛 OK113i-C 全志T113-i開發(fā)板】視頻編解碼測試

    前言本文測試OK113i-S開發(fā)板-視頻編解碼的功能OK113i-S開發(fā)板是支持視頻的編解碼的,下面是官方介紹的編解碼功能T113-i 是一
    發(fā)表于 12-25 09:41

    【飛OK113i-S開發(fā)板試用】基于飛嵌入式OK113i網(wǎng)頁視頻監(jiān)控項目

    :arm-linux-gnueabi-gcc 7.3.1 USB攝像頭 OK113i開發(fā)板實現(xiàn)功能:通過OK113i嵌入式開發(fā)板,采用USB設備頭,通過V4L2框架實現(xiàn)
    發(fā)表于 01-09 11:31

    雙核Cortex-A7 CPU、64位玄鐵C906 RISC-V CPU,OK113i-S開發(fā)板開發(fā)體驗

    OK113i網(wǎng)頁視頻監(jiān)控項目 實現(xiàn)功能: 通過OK113i
    發(fā)表于 01-16 10:07

    嵌入式全志T113-i開發(fā)板的休眠及喚醒操作

    嵌入式OK113i-S開發(fā)板支持兩種休眠方式:freeze和mem。這兩種方式可以通過/sys/power/state文件節(jié)點進行操作,用戶可以通過在該文件節(jié)點寫入freeze或mem來觸發(fā)相應
    發(fā)表于 01-17 09:29

    OK210申請】基于飛嵌入式OK210的多媒體播放系統(tǒng)

    微博,http://weibo.com/2840996695/profile?topnav=1&amp;wvr=6項目描述:項目名稱:基于飛
    發(fā)表于 07-06 17:37

    OK210申請】基于飛嵌入式智能家居系統(tǒng)飛嵌入式OK210開發(fā)板申請

    3.組員:三名,王亞玲,魏玉娟,張向前4.研發(fā)的方向為智能家居嵌入式方向5.本人自小就有對電子又很濃厚的興趣,在大學研究過微型空調的設計制作,單片機系統(tǒng),嵌入式,機器人等項目項目描述:
    發(fā)表于 07-13 12:03

    【實戰(zhàn)項目一:嵌入式視頻監(jiān)控系統(tǒng)】【初學必學】

    網(wǎng)頁視頻監(jiān)控系統(tǒng)實戰(zhàn)項目(驅動移植部分一)2.【創(chuàng)科之龍】嵌入式網(wǎng)頁
    發(fā)表于 07-19 18:18

    OK210申請】基于飛嵌入式智能家居系統(tǒng)

    可以用它來開發(fā)小軟件。項目描述:基于飛嵌入式的智能家居,通過對飛的了解,感覺選擇飛
    發(fā)表于 07-25 17:19

    OK210申請】基于arm嵌入式監(jiān)控智能小車的設計與實現(xiàn)

    視頻流的讀取該項目仍在進行中真的很希望可以獲得飛ok210的開發(fā)板進行arm平臺的移植和后面項目的實現(xiàn),以及對飛
    發(fā)表于 08-03 09:40

    分享一個不錯的基于飛嵌入式A40i實現(xiàn)網(wǎng)約車車載終端方案

    分享一個不錯的基于飛嵌入式A40i實現(xiàn)網(wǎng)約車車載終端方案
    發(fā)表于 12-27 07:18

    OK113i-C 全志T113-i開發(fā)板初體驗

    All available board: 0. ok113i Choice [ok113i]: 0 All available flash: 0. default 1. nor 2. nand
    發(fā)表于 12-14 15:33

    嵌入式T113-i開發(fā)板的調屏方法,就是這樣簡單

    的配備為客戶提供了更加多樣的選擇。今天小編就與大家分享一下為飛嵌入式OK113i-S開發(fā)板適配LVDS屏幕的過程。
    的頭像 發(fā)表于 01-12 11:50 ?2226次閱讀
    飛<b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b>T<b class='flag-5'>113-i</b>開發(fā)板的調屏方法,就是這樣簡單

    如何在飛嵌入式T113-i開發(fā)板的Buildroot中移植MQTT協(xié)議?

    嵌入式OK113i-S開發(fā)板上市一段時間以來收獲了很多關注,也成為了許多客戶項目選型的優(yōu)質之選。在實際的項目開發(fā)中,工程師朋友們可能會需
    的頭像 發(fā)表于 01-26 08:02 ?515次閱讀
    如何在飛<b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b>T<b class='flag-5'>113-i</b>開發(fā)板的Buildroot中移植MQTT協(xié)議?

    嵌入式T113-i開發(fā)板的調屏方法

    于飛嵌入式T113-i開發(fā)板的調屏問題,需要按照以下步驟進行操作
    的頭像 發(fā)表于 01-29 16:25 ?982次閱讀
    RM新时代网站-首页