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:解析输入的參数

global.in.init = dlsym(global.in.handle, "input_init"); // 让 global.in.init = input_init dlsym 取动态对象地址
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_stop
pthread_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_thread
         pthread_detach(servers[id].threadID); // 等待线程结束,以便回收

            server_thread (Httpd.c\plugins\output_http)  
                  ->  client_thread
                        if ( 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的更多相关文章

  1. golang 远程传输文件

    概述 之前有一篇介绍如何使用 golang 通过SSH协议来执行远程命令:golang 执行远程命令 同样,通过SSH协议也可以使用 golang 来远程传输文件. 除了 SSH 的库,为了传输文件, ...

  2. curl远程传输工具

    /** * curl远程传输工具 */ public function post_curl($url,$body,$header,$type='POST'){ $ch = curl_init(); c ...

  3. linux下使用scp远程传输自动输入密码

    由于需要将A服务器的文件 远程传输到B服务器 但是scp命令每次都要手动输入密码 这样脚本执行太繁琐,所以讲A服务器和B服务器互信即可,具体操作如下: 首先在A服务器配置: mkdir -p ~/.s ...

  4. blfs(systemd版本)学习笔记-安装lrzsz软件包实现ssh远程传输文件到lfs系统

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 安装lrzsz软件包实现ssh远程传输文件到lfs系统 这个软件包在lfs系列的书中没有,这里是参照lrzsz官网的说明进行编译 ...

  5. Linux使用scp远程传输命令进行服务器文件互传(阿里云服务器)

    阿里云同一个区的的两个云服务器,通过内网进行文件传输,速度快不说(正常传输文件的速度能达到35m~50m/s),还不占用公网带宽. 阿里云云服务器有一个安全组策略,可能需要设置下 内网入.出方向的IP ...

  6. Rsyslog远程传输的几种方式

    基本介绍 Rsyslog是一个syslogd的多线程增强版,rsyslog vs. syslog-ng 链接是rsyslog官方和syslog特性和性能上的一些对比,目前大部分Linux发行版本默认也 ...

  7. Linux远程传输文件免密码

    首先为什么Linux远程传输要免密码?手动使用scp命令传输每次都要输密码太过麻烦了. 开发中有一句话,能复制粘贴尽量不要手打. 运维中有一句话,能脚本化实现尽量不要手动执行. 远程传输文件免密码的目 ...

  8. Vivotek 摄像头远程栈溢出漏洞分析及利用

    Vivotek 摄像头远程栈溢出漏洞分析及利用 近日,Vivotek 旗下多款摄像头被曝出远程未授权栈溢出漏洞,攻击者发送特定数据可导致摄像头进程崩溃. 漏洞作者@bashis 放出了可造成摄像头 C ...

  9. 远程传输文件命令:scp

    1.概述 scp(secure copy)是一个基于 SSH 协议在网络之间进行安全传输的命令,其格式为“scp [参数] 本地文件 远程帐户@远程 IP 地址:远程目录”. 与第 2 章讲解的 cp ...

随机推荐

  1. JAVASE学习笔记:第十章 SWing经常使用控件类(二)

    7.JComboBox 下拉列表         /*   * 初始化下拉列表   */  public void addcomb(){   String[] area = {"山西省&qu ...

  2. Linux-清除rootpassword

    1.Linux进入单用户模式,通常选择内核按e 最后加入single,按b进入单用户. 2.清除/etc/shadow中root这一行第一个:符号和第二个:符号之间内容. 3.正常启动,passwd ...

  3. HTTP协议建立连接、通讯与关闭连接全过程

    为解决服务器TimeWait多的问题,了解了一下TCP/IP协议的连接过程.以访问一静态页面为例,从建立连接到访问拿到数据,然后关闭的整个过程.使用EtherPeek截图如下:   图首为一次交互过程 ...

  4. MyEclipse 2016 安装/破解

    MyEclipse2016 C1 已经出现了!感觉好像不错的样子! 不多说了,开整... 好熟悉的界面,点击Next! 如上图标注1所示,请修改安装目录! 根据自己的喜好可以选择不同的版本,也可以安装 ...

  5. 【2017 Multi-University Training Contest - Team 7】Hard challenge

    [Link]:http://acm.hdu.edu.cn/showproblem.php?pid=6127 [Description] 平面上有n个点,每个点有一个价值,每两个点之间都有一条线段,定义 ...

  6. 洛谷 P3669 [USACO17OPEN]Paired Up 牛牛配对

    P3669 [USACO17OPEN]Paired Up 牛牛配对 题目描述 Farmer John finds that his cows are each easier to milk when ...

  7. 转 openssl 建立服务器证书

    openssl 建立服务器证书 ##  1,建立目录和文件     set path=D:/openssl/bin     D:     cd D:/openssl/conf/     ren ope ...

  8. OpenShift 自定义 OPENSHIFT_DOCUMENT_ROOT 变量,替换网站根目录路径!

    OpenShift 自定义 OPENSHIFT_DOCUMENT_ROOT 变量,替换网站根目录路径! 预先定义的子目录 :)     DIY: DocumentRoot=${OPENSHIFT_RE ...

  9. 【ASP.NET开发】.NET三层架构简单解析

    对于三层架构来说,主要是使用设计模式的思想,对于项目的各个模块实现"高内聚,低耦合"的思想.这里就不做详细的介绍了,如果大家有兴趣,可以阅读软件工程和设计模式相关文章. 对于三层架 ...

  10. Excel数据比对-批量数据比对

    1.导出现场的Excel收费规则2.有专门的代码写的测试收费规则的工具(开发自己开发的)3.在这个工具上选择,导出的收费规则Excel,点击导出按钮(导出按钮里面有计算每一列的计费结果4.Excel里 ...