0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何移植视频流服务器

xCb1_yikoulinux 来源:一口Linux 作者:土豆居士 2022-07-26 12:56 次阅读

彭老师在录制的《物联网综合项目实战》课程中,在web页面中加入了实时监控摄像头的功能,特地整理了一篇如何移植视频流服务器的文章,供大家学习。

953a35f6-0c95-11ed-ba43-dac502259ad0.png

一、嵌入式视频图像开源库

嵌入式系统中,常用的视频图像处理开源系统有:luvcview、cheese、motion、mjpg-streamer或者ffmpeg,其中:

•luvcview: 基于V4L2、SDL的程序,支持拍照录像,参数调节,代码精简实用,适合学习V4L2编程

•cheese:基于V4L2、GTK的程序,支持拍照录像,特殊视频效果

•motion:移动侦测拍照程序

•mjpg-streamer:网络摄像机程序

二、mjpg-streamer简介

MJPG-streamer是一个优秀的开源project,它可以通过HTTP的方式访问linux上面的兼容摄像头,从而做到远程视频传输的效果。

MJPG-streamer从webcam摄像头采集图像,把他们以流的形式通过基于ip的网络传输到浏览器如Firehox,Cambozola,VLC播放器,Windows的移动设备或者其他拥有浏览器的移动设备。

它可以利用某些webcams的硬件压缩功能来降低服务器CPU的开销。

它为嵌入式设备和一些常规服务器提供了一个轻量且更少CPU消耗的方案,因为它无需为视频帧压缩浪费大量的计算效率。

三、测试摄像头

9554a58a-0c95-11ed-ba43-dac502259ad0.png

1)按上图的方式将罗技摄像头连接入虚拟机

2)下载安装cheese 检测摄像头是否能够正常工作

$sudoapt-getupdate
$sudoapt-getinstallcheese

ubuntu 16.04已经自带该程序

3)测试

摄像头连接后会生成以下设备文件

root@ubuntu:/home/peng/work#ls/dev/video0-l
crw-rw----+1rootvideo81,0Mar2507:18/dev/video0

运行

root@ubuntu:/home/peng/work#cheese
9587d248-0c95-11ed-ba43-dac502259ad0.png

四、移植

安装准备:

1. 安装前准备

sudoapt-getinstalllibsdl1.2-devsubversion
sudoapt-getinstalllibjpeg62-dev
sudoapt-getinstallimagemagick

2. 下载mjpeg-streamer

gitclonehttps://github.com/shrkey/mjpg-streamer

如果没有安装git,执行以下命令

sudoapt-getinstallgit

3. 编译安装

cdmjpg-streamer/mjpg-streamer
95bb38fe-0c95-11ed-ba43-dac502259ad0.png
root@ubuntu:/home/peng/work/camera/mjpg-streamer#tree-L1./
./
├──doc
├──mjpeg-client#分别有linux和windows的客户端
├──mjpg-streamer#目录下提供了的执行程序和各个输入输出设备组件
├──mjpg-streamer-experimental
├──mjpg-streamer.tar.gz
├──README.md
├──udp_client
└──uvc-streamer#目录下提供了uvc-streamer的可执行目录

6directories,2files

ps:重新编译前,需要执行

make
sudomakeinstall
root@ubuntu:/home/peng/work/camera/mjpg-streamer/mjpg-streamer#makeinstall
install--mode=755mjpg_streamer/usr/local/bin
install--mode=644input_uvc.sooutput_file.sooutput_udp.sooutput_http.soinput_testpicture.soinput_file.so/usr/local/lib/
install--mode=755-d/usr/local/www
install--mode=644-Dwww/*/usr/local/www

95dd6bd6-0c95-11ed-ba43-dac502259ad0.png

编译生成的库文件功能

(1)input_testpicture.so。这是一个图像测试插件,它将预设好的图像编译成一个头文件,可以在没有摄像头的情况下传输图像,从而方便调试程序。

(2)input_uvc.so。此文件调用USB摄像头驱动程序V4L2,从摄像头读取视频数据。

(3)input_control.so。这个文件实现对摄像头转动的控制接口。

(4)output_http.so。这是一个功能齐全的网站服务器,它不仅可以从单一文件夹中处理文件,还可以执行一定的命令,它可以从输入插件中处理一幅图像,也可以将输入插件的视频文件根据现有M-JPEG标准以HTTP视频数据服务流形式输出。

(5)output_file.so。这个插件的功能是将输入插件的JPEG图像存储到特定的文件夹下,它可以用来抓取图像。

4 修改脚本

修改脚本文件

/home/peng/work/camera/mjpg-streamer/mjpg-streamer/start.sh
./mjpg_streamer-i"./input_uvc.so-y"-o"./output_http.so-w./www"-o"./output_file.so-f/www/pice-d15000"
9600b03c-0c95-11ed-ba43-dac502259ad0.png
"./input_uvc.so-y":指定摄像头是YUV,默认是JPEG,一口君使用的罗技摄像头是YUV
"./output_http.so-w./www":指定web服务器根目录./www,我们可以通过浏览器测试摄像头
"./output_file.so-f/www/pice-d15000":指定拍照保存照片目录/www/pice,并且每15s保存一次照片

也可以指定分辨率:

./mjpg_streamer-i"input_uvc.so-d/dev/video0-n-y-r640x480-f30"-o"./output_http.so-w./www"-o"./output_file.so-f/www/pice-d15000"

市面上有的摄像头支持格式有YUV,MJPEG,H264 ;mjpg-stream支持MJPEG和YUV两种格式

5 测试

运行

./start.sh

(1)网页测试

961174bc-0c95-11ed-ba43-dac502259ad0.png(2)网页视频流测试

96333ff2-0c95-11ed-ba43-dac502259ad0.png

(3) 拍照功能实现

浏览器上地址栏输入如下内容:

http://127.0.0.1:8080/?action=snapshot

或者

http://127.0.0.1:8080/?action=stream

snapshot 表示每次抓拍一张图形显示在网页上,stream 表示视频流也就是连续的图像

6. 补充

一口君还使用了一款z-star摄像头,该款摄像头不要添加-y选项9665eed4-0c95-11ed-ba43-dac502259ad0.png

./mjpg_streamer-i"./input_uvc.so-d/dev/video0"-o"./output_http.so-w./www"-o"./output_file.so-f/www/pice-d150000"

有时候摄像头生成的设备文件不是/dev/video0

9692533e-0c95-11ed-ba43-dac502259ad0.png我们需要对应参数:

-d/dev/video1

五、代码流程

96ad463a-0c95-11ed-ba43-dac502259ad0.png

六、支持单拍、连拍

由于 mjpg_stream 中 output-file.so 能实现连续拍照的功能,不能实现单拍或 连拍几张的功能所以需要对 output_file 原码进行修改。修改文件目录:

peng@ubuntu:~/work/camera/mjpg-streamer/mjpg-streamer/plugins/output_file/output_file.c
  1. 在 196 行 函数 voidworker_thread(voidarg) 体中加入以下代码:
charbuf[10];//用于存放从管道读取的命令
intflags=0;//拍照标志,1:表示11张照片,2:表示1张照片
intfd_com=0;//打开管道的文件描述符

intstop_num=0;//拍照计数

if(access("/tmp/webcom",F_OK)< 0)//创建有名管道用于接收拍照命令
{
if(mkfifo("/tmp/webcom",0666)< 0)
{
printf("photofifocreatefailed
");
}
}

fd_com=open("/tmp/webcom",O_RDONLY,0666);
if(fd_com< 0)
{
perror("openthefilewebcomerror");
}
  1. 在229行 while( ok >= 0 && !pglobal->stop){ 后加入
if(flags==0)
{
while(1)
{
read(fd_com,buf,sizeof(buf));
if(strncmp(buf,"danger",6)==0)//拍11张照片
{
flags=1;
bzero(buf,sizeof(buf));
break;
}

if(strncmp(buf,"one",3)==0)//拍1张照片
{
flags=2;
bzero(buf,sizeof(buf));
break;
}
}
}
  1. 在355行
355/*ifspecified,waitnow*/
356if(delay>0){
357usleep(1000*delay);
358}

后加入

stop_num++;
if(flags==1)//判断拍照的数量
{
if(stop_num>9)
{
stop_num=0;
flags=0;
}
}
elseif(flags==2)
{
stop_num=0;
flags=0;
}

审核编辑:汤梓红


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5096

    文章

    19227

    浏览量

    308693
  • 服务器
    +关注

    关注

    12

    文章

    9367

    浏览量

    86284
  • 移植
    +关注

    关注

    1

    文章

    384

    浏览量

    28228

原文标题:手把手教你ubuntu下移植MJPG-streamer

文章出处:【微信号:yikoulinux,微信公众号:一口Linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    相关推荐

    基于H264的嵌入式视频服务器的设计

    基于H264的嵌入式视频服务器的设计摘要! 本文介绍了基于的嵌入式视频服务器的设计重点阐述了嵌入式操作系统" 视频
    发表于 06-25 10:50

    网络视频服务器的概念及其构成

    服务器在普通网络环境中应用成为可能。3.H264  联合视频工作组(JVT,Joint Video Team)在H26L的基础上提出了H.264编码技术,它通过增加运算的复杂性降低了码的同时提高
    发表于 08-22 14:34

    树莓派做一个网络摄像头上传实时视频到云服务器,云服务器推流到客户端可以实现吗

    访问云服务器,或者是云服务器,总之客户端可以随时随地通过终端设备简单的查看实时视频,请教一下做过这个项目的大佬,有没有可以实现的方案?
    发表于 08-16 01:23

    福州大带宽高防视频服务器租用

    现在的网络视频的质量越来越高480P、720P、1024P、1080P的视频,现在最基本的480P普清视频大小也要500M以上,更何况高清,超清,蓝光视频的大小。这也意味对
    发表于 12-27 10:01

    如何移植web服务器

    作为一个电子专业的码龙,在嵌入式设备上实现web数据展示和控制,确实曾对自己提出了一个不大不小的挑战。虽然web已存在这么多年,但是在嵌入式设备上实现,并清楚讲明如何移植web服务器,如何设计前端
    发表于 11-08 06:41

    rk3288视频服务器MJPG_Streamer移植简析

    1、firefly-rk3288视频服务器MJPG_Streamer移植MJPG_Streamer 是一个开源的轻量级的视频传输服务器应用项
    发表于 04-08 16:33

    基于H 264的嵌入式视频服务器的设计

    基于H 264的嵌入式视频服务器的设计 摘要! 本文介绍了基于#$%& 的嵌入式视频服务器的设计"重点阐述了" 嵌入式操作系统" 视频
    发表于 08-25 13:02 33次下载

    基于视频服务器视频监控系统的设计

          介绍了一种基于视频服务器视频监控系统的设计,着重介绍了视频服务器、系统的总体
    发表于 09-03 10:10 18次下载

    嵌入式Web服务器Boa的移植及其应用

    嵌入式Web服务器Boa的移植及其应用:鉴于目前监控系统对实时性和多连接处理能力的要求,介绍一款单任务的嵌入式Web服务器Boa.对将Boa移植到运行uClinux操作系统的ARM微处
    发表于 09-20 18:00 56次下载

    Linkpower网络视频服务器系列

    网络视频服务器概述 Linkpower网络视频服务器可以无缝地将您现有的模拟CCTV系统集成到基于IP的数字解决方中,网络视频
    发表于 07-05 12:08 16次下载

    数字电视视频服务器的设计

    讨论了一种分布式视频服务器的设计与实现。重点从磁盘和文件调度与节目调度策略两个方面讨论提高数字电视视频服务器整体性能的技术。
    发表于 11-19 15:24 22次下载

    视频监控服务器购买须知

    网络视频服务器实际质量、性能差异性比较大。顾客在购买网络视频服务器之前可以从以下几个产品性能指标进行权衡。
    发表于 12-21 16:42 2951次阅读

    Boa服务器移植说明分析

    Boa服务器移植,内含说明文档,原理分析和源码
    发表于 01-18 14:13 0次下载

    在线视频服务器租用如何配置?

    视频服务器中的媒体资源则是以实时数据的形式传输的,不稳定的网络对服务器的传输速度影响非常大,负荷非常高。再加之各种新鲜的视频资源不间断上传
    发表于 05-06 11:46 1117次阅读

    如何选择视频服务器的配置尺寸?

    服务器用于构建视频网站的配置要求非常高。它需要高性能的硬件配置和网络带宽来支持实时视频处理和传输。它不仅需要高性能的CPU处理,而且对内
    的头像 发表于 12-14 11:28 700次阅读