mjpg-streamer摄像头远程传输UVC
mjpg-streamer摄像头远程传输UVC
1 下载源代码
mjpg-streamer的源代码地址 https://github.com/codewithpassion/mjpg-streamer
嵌入式 mini2440版 https://github.com/vfonov/mjpg-streamer
2 编译
mjpg-streamermake
执行
export LD_LIBRARY_PATH="$(pwd)"
./mjpg_streamer -i "./input_uvc.so -y" -o "./output_ http.so -w ./www"
电脑端 用火狐浏览器 输入
http://192.168.1.17:8080/?
action=stream
当中 192.168.1.17依据实际情况输入
2源代码分析
从main開始 位于Mjpg_streamer.c
getopt_long_only:解析输入的參数
input_init (input_uvc.c )-->if (init_videoIn(videoIn, dev, width, height, fps, format, 1) < 0)init_videoIn(V4l2uvc.c (plugins\input_uvc)init_v4l2
global.in.run = dlsym(global.in.handle, "input_run");input_run(input_uvc.c )-->pthread_create(&cam, 0, cam_thread, NULL);void *cam_thread( void *arg )uvcGrab(videoIn)if (videoIn->formatIn == V4L2_PIX_FMT_YUYV)pglobal->size = compress_yuyv_to_jpeg(videoIn, pglobal->buf, videoIn->framesizeIn, gquality);else{pglobal->size = memcpy_picture(pglobal->buf, videoIn->tmpbuffer, videoIn->buf.bytesused);}
global.out[i].init = dlsym(global.out[i].handle, "output_init");output_init( output_http.c)servers[param->id].id = param->id;servers[param->id].pglobal = param->global;servers[param->id].conf.port = port;servers[param->id].conf.credentials = credentials;servers[param->id].conf.www_folder = www_folder;servers[param->id].conf.nocommands = nocommands;
global.out[i].stop = dlsym(global.out[i].handle, "output_stop");output_stoppthread_cancel(servers[id].threadID);
global.out[i].run = dlsym(global.out[i].handle, "output_run");
output_run(output_http.c)pthread_create(&(servers[id].threadID), NULL, server_thread, &(servers[id])); // 创建一个线程 server_threadpthread_detach(servers[id].threadID); // 等待线程结束,以便回收
server_thread (Httpd.c\plugins\output_http)-> client_threadif ( strstr(buffer, "GET /?action=snapshot") != NULL ){req.type = A_SNAPSHOT;}else if ( strstr(buffer, "GET /?action=stream") != NULL ){req.type = A_STREAM;}else if ( strstr(buffer, "GET /?action=command") != NULL ){req.type = A_COMMAND;}
switch ( req.type ){case A_SNAPSHOT:DBG("Request for snapshot\n");send_snapshot(lcfd.fd);break;case A_STREAM:DBG("Request for stream\n");send_stream(lcfd.fd);break;}
mjpg-streamer摄像头远程传输UVC的更多相关文章
- golang 远程传输文件
概述 之前有一篇介绍如何使用 golang 通过SSH协议来执行远程命令:golang 执行远程命令 同样,通过SSH协议也可以使用 golang 来远程传输文件. 除了 SSH 的库,为了传输文件, ...
- curl远程传输工具
/** * curl远程传输工具 */ public function post_curl($url,$body,$header,$type='POST'){ $ch = curl_init(); c ...
- linux下使用scp远程传输自动输入密码
由于需要将A服务器的文件 远程传输到B服务器 但是scp命令每次都要手动输入密码 这样脚本执行太繁琐,所以讲A服务器和B服务器互信即可,具体操作如下: 首先在A服务器配置: mkdir -p ~/.s ...
- blfs(systemd版本)学习笔记-安装lrzsz软件包实现ssh远程传输文件到lfs系统
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 安装lrzsz软件包实现ssh远程传输文件到lfs系统 这个软件包在lfs系列的书中没有,这里是参照lrzsz官网的说明进行编译 ...
- Linux使用scp远程传输命令进行服务器文件互传(阿里云服务器)
阿里云同一个区的的两个云服务器,通过内网进行文件传输,速度快不说(正常传输文件的速度能达到35m~50m/s),还不占用公网带宽. 阿里云云服务器有一个安全组策略,可能需要设置下 内网入.出方向的IP ...
- Rsyslog远程传输的几种方式
基本介绍 Rsyslog是一个syslogd的多线程增强版,rsyslog vs. syslog-ng 链接是rsyslog官方和syslog特性和性能上的一些对比,目前大部分Linux发行版本默认也 ...
- Linux远程传输文件免密码
首先为什么Linux远程传输要免密码?手动使用scp命令传输每次都要输密码太过麻烦了. 开发中有一句话,能复制粘贴尽量不要手打. 运维中有一句话,能脚本化实现尽量不要手动执行. 远程传输文件免密码的目 ...
- Vivotek 摄像头远程栈溢出漏洞分析及利用
Vivotek 摄像头远程栈溢出漏洞分析及利用 近日,Vivotek 旗下多款摄像头被曝出远程未授权栈溢出漏洞,攻击者发送特定数据可导致摄像头进程崩溃. 漏洞作者@bashis 放出了可造成摄像头 C ...
- 远程传输文件命令:scp
1.概述 scp(secure copy)是一个基于 SSH 协议在网络之间进行安全传输的命令,其格式为“scp [参数] 本地文件 远程帐户@远程 IP 地址:远程目录”. 与第 2 章讲解的 cp ...
随机推荐
- Chormium线程模型及应用指南
核心概念 设计上遵循以下原则: 1 不要在UI线程做不论什么堵塞式的I/O操作,以及其他耗时的操作,通过消息传递把各种操作传给相应用途的线程去做. 2 不鼓舞线程加锁机制和线程安全对象. 对象仅仅存在 ...
- XMPP开发之从零開始
对于server的搭建和设置.我在这里就不再多说了.有好多前辈已经帮大家攻克了.能够參考下这篇博客 XMPPserver配置 我依照这个博客配置好了,server后,然后在网上參照代码写了一个小的de ...
- oralce的系统用户system的输入口令怎么找回?遇见ORA-28000: the account is locked怎么解锁?
好几个月前安装的Oracle软件忽然想用就忘记了当初设置的口令了,今天查了下怎么找回. 以一个用户jqz/jqz(曾经建立的一个用户.幸亏还记得)的身份登录后: SQL> connect/as ...
- js04---object1
我们目前为止大多数引用类型都是Object类型的实例,Object也是ECMAScript中使用最多的一种类型(就像java.lang.Object一样,Object类型是所有它的实例的基础).Obj ...
- 7lession-基础数据使用介绍
1.数值 这个使用比较简单 a = 1 b = 3.2 c = 12.5+4j d = 20L 2.字符串 代码 s = "hello world,i am comming" pr ...
- JS实现文件另存为
JS实现文件另存为 //下载平面图 function downPlan() { var oPop = window.open(src, "", "width=1, hei ...
- web存储方法,现成代码
1.cookie的设置与取用 function setCookie(cname,cvalue,exdays){ var d = new Date(); d.setTime(d.getTime()+(e ...
- Python中对于GIL全局解释器锁的一点理解
GIL全局解释器锁 python最初开发时,开发人只考虑到了单核CPU的,为解决多线程运算之间的数据完整性和状态同步选择了加锁的方式.即GIL锁. 而目前的CPU都有多个核心,在运行python的某个 ...
- 洛谷 P1104 生日
P1104 生日 题目描述 cjf君想调查学校OI组每个同学的生日,并按照从大到小的顺序排序.但cjf君最近作业很多,没有时间,所以请你帮她排序. 输入输出格式 输入格式: 有2行, 第1行为OI组总 ...
- 1.1 Introduction中 Consumers官网剖析(博主推荐)
不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ Consumers 消费者(Consumers) Consumers label t ...