色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 >
mjpg-streamer源碼分析
時(shí)間:2018-08-15作者:華清遠(yuǎn)見(jiàn)

mjpg-streamer是一個(gè)很好的開(kāi)源項(xiàng)目,用來(lái)做視頻服務(wù)器,使用的是v4l2的接口。前面我們說(shuō)了它的移植過(guò)程,但是在某些特定的情況下這個(gè)工程不能達(dá)到我們的需求,所以我們需要對(duì)源碼進(jìn)行修改,或者直接寫(xiě)一個(gè)自己的視頻服務(wù)器。在修改源碼或?qū)懽约旱姆⻊?wù)器之前我們分析下這個(gè)源碼的代碼。

這個(gè)代碼里有三個(gè)部分是我們需要掌握的內(nèi)容,第一是v4l2接口,第二個(gè)是socket編程,第三個(gè)是多線程編程。

一、 v4l2接口說(shuō)明

這里涉及到我們?nèi)绾螐臄z像頭中把數(shù)據(jù)取出來(lái),首先是封裝一個(gè)結(jié)構(gòu)體用來(lái)描述攝像頭的一些信息,比如采集圖片的寬高,圖片的格式,等等。

struct vdIn {
                int fd;
                char *videodevice;
                char *status;
                char *pictName;
                struct v4l2_capability cap;
                struct v4l2_format fmt;
                struct v4l2_buffer buf;
                struct v4l2_requestbuffers rb;
                void *mem[NB_BUFFER];
                unsigned char *tmpbuffer;
                unsigned char *framebuffer;
                int isstreaming;
                int grabmethod;
                int width;
                int height;
                int fps;
                int formatIn;
                int formatOut;
                 int framesizeIn;
                int signalquit;
                int toggleAvi;
                int getPict;
                int rawFrameCapture;
                /* raw frame capture */
                unsigned int fileCounter;
                /* raw frame stream capture */
                unsigned int rfsFramesWritten;
                unsigned int rfsBytesWritten;
                /* raw stream capture */
                FILE *captureFile;
                unsigned int framesWritten;
                unsigned int bytesWritten;
                int framecount;
                int recordstart;
                int recordtime;
        };

接著是把這個(gè)結(jié)構(gòu)體寫(xiě)入驅(qū)動(dòng)中,用來(lái)初始化攝像頭。這個(gè)操作通過(guò)ioctl完成,涉及到的命令包括VIDIOC_QUERYCAP、VIDIOC_S_FMT、VIDIOC_S_PARM、VIDIOC_REQBUFS,VIDIOC_QUERYBUF,并通過(guò)mmap完成內(nèi)存的映射。

后我們通過(guò)ioct命令完成圖片的讀取,涉及到的命令包括VIDIOC_QBUF和VIDIOC_DQBUF。然后把獲得的數(shù)據(jù)寫(xiě)入到文件里就是圖片,通過(guò)網(wǎng)絡(luò)傳輸出去連續(xù)的圖片就是視頻。

二、 socket編程

在這個(gè)程序里使用的是tcp套接字,每有一個(gè)連接請(qǐng)求就創(chuàng)建一個(gè)線程單獨(dú)和這個(gè)請(qǐng)求通信,這里涉及到的函數(shù)包括socket、bind、listen、accept和write。

三、 多線程編程

為了能同時(shí)響應(yīng)多個(gè)客戶端的請(qǐng)求,這里使用了多線程編程,為每一個(gè)請(qǐng)求建立一個(gè)連接,每個(gè)連接就是一個(gè)線程。這里涉及到的函數(shù)包括pthread_create、pthread_detach、pthread_cond_init、pthread_cond_destroy、pthread_mutex_init、pthread_mutex_destroy。

四、 mjpg-streamer工作流程


發(fā)表評(píng)論

全國(guó)咨詢電話:400-611-6270,雙休日及節(jié)假日請(qǐng)致電值班手機(jī):15010390966

在線咨詢: 曹老師QQ(3337544669), 徐老師QQ(1462495461), 劉老師 QQ(3108687497)

企業(yè)培訓(xùn)洽談專線:010-82600901,院校合作洽談專線:010-82600350,在線咨詢:QQ(248856300)

Copyright 2004-2018 華清遠(yuǎn)見(jiàn)教育科技集團(tuán) 版權(quán)所有 ,京ICP備16055225號(hào),京公海網(wǎng)安備11010802025203號(hào)

主站蜘蛛池模板: 久久久久成人片免费观看 | 俺たちの熟女纱香60歳 | 欧美一码二码三码无码 | 亚在线观看免费视频入口 | 日本丰满人妻XXXXXHD | 免费看成人片 | 免费久久久久 | 国产亚洲精品自在久久VR | 亚洲国产精品一区二区第四页 | 欧美精产国品一二三类产品特点 | 内射囯产旡码丰满少妇 | 国产成人影院一区二区三区 | 国产美女裸体无遮挡免费视频 | 亚洲精品国产一区二区三区在线观看 | 日韩美女在线观看一区 | 久久人人爽天天玩人人妻精品 | 波多野结衣亚洲AV无码无在线观看 | 国产22页| 中文字幕人妻三级中文无码视频 | 女人高潮被爽到呻吟在线观看 | 干美少妇 | 色网中文字幕 | XXX波多野结衣苍井空 | 狠狠色噜噜狠狠狠888米奇 | 神马免费午夜福利剧场 | 超碰CAO已满18进入离开官网 | 久久久久人妻精品一区三寸蜜桃 | 成人亚洲欧美成αⅴ人在线观看 | 成年男女免费视频网站很黄的 | 成人免费A片在线看网站外卖员 | 成人午夜精品网站在线观看 | 日本aⅴ亚洲精品中文乱码 美女胸18大禁视频网站 | 欧美老妇xxxxx性开放 | 日韩综合精品视频 | 看久久久久久A级毛片 | 日日噜噜噜夜夜爽爽狠狠照片 | 小货sao边洗澡边cao你动漫 | 欧美人与性口牲恔配视1 | 特级毛片在线大全免费播放 | 亚洲日本va中文字幕在线 | 日本va欧美va欧美va精品 |