导航:首页 > 编程知识 > v4l2用什么编程

v4l2用什么编程

发布时间:2022-09-14 14:27:27

㈠ 如何利用VLC或FFMPEG将HTTP的串流转换成RTMP

这个应用主要是将HTTP的串流(非HLS或DASH)转换成RTMP协议传送到Adobe Flash Media Server或Wowza Media Server的媒体服务器。

根据维基网络: “Real Time Messaging Protocol (RTMP) was initially a proprietary protocol developed by Macromedia for streaming audio, video and data over the Internet, between a Flash player and a server. Macromedia is now owned by Adobe, which has released an incomplete version of the specification of the protocol for public use.”

RTMP的协议有以下的参数:

RTMP: 其原始采用TCP port 1935
RTMPS: 将RTMP加载到SSL的安全机制,就类似HTTPS。
RTMPE: 采用Adobe所提供给RTMP所发展的加密版本
RTMPT: 在RTMP上加挂he RTMP protocol 封装在HTTP请求中,可以穿越防火墙。这是一个很不错的协议,使用TCP端口80和443绕过公司对防火墙。封装的会话可能携带纯RTMP,RTMPS或RTMPE包内。
RTMP 串流
VLC 在 2.0.x版本里可以支持RTMP协议。不过,有些环境却没法执行,例如2.0.2, 2.0.3, 2.0.4, 2.0.6在Windows 2008 Server 64的服务器上确实没法执行。可以开启VLC然后开启网络串流,如“RTMP://aaa.bbb.com:1935/live/串流源“,看看可否开启。主要是VLC 2.0.x采用 ffmpeg/libav的程序库,但是, 有的包装却没法支持。所以必须先做确认。当 librtmp 的支持被启动于 ffmpeg/libav 则RTMPS才可以有功用。

VLC和RTMP的情形主要是用来捕获和转码应用程序生成一个单一的流。是通过另一个应用程序分配给多个客户端。这在Wowza是非常重要的。虽然,Wowza也支持VLC采用UDP/RTP/RTSP方式接收串流,但是,很多情况下是很不稳定的。

LC直接连接到一个的RTMP串流,如WOWZA,不听传入的请求。因此,它是不可能的,以查看的RTMP流直接从VLC。您需要连接到WOWZA,观看流。这是可以用VLC做到的:

$ vlc rtmp://rtmp.server.com:1935/path/to/stream有件事必须提醒的。从VLC将RTMP串流传送给Wowza服务器并不是都很稳定的。有一些时间关系的“虫”会造成Wowza关闭连线。 这样的问题都是与“音频”与”视频“时间戳(Timestamp)有关系的。采用“audio-desync” 选项来整合RTMP也不是个好点子,但是, 可以不断调整与修改。

Webcam RTMP streaming
以下是有关webcam的应用。其他的有采集装置、设备、视频文档等应用。

Windows 的范例
在windows的采集装置都是利用DirectShow这个界面的。在VLC的模块也是用这样的界面,成为“DirectShow“或”dshow”。以下是范例:

$ vlc dshow://"" --sout '#transcode{vcodec=h264,vb=300,fps=25,scale=1,acodec=mp4a,ab=64,channels=2}:std{access=rtmp,mux=ffmpeg{mux=flv},dst=rtmp://rtmp.server.com:1935/path/to/stream}'DirectShow选项也可在QT界面里采用

linux 的范例
通常在Linux的采集装置上都是采用“video for linux” (v4l2)这个界面。使用指令方式来采集webcam装置(或称为”v4l2 装置”)送出RTMP串流的范例如下:

$ vlc v4l2:// --v4l2-fps=25 --sout '#transcode{vcodec=h264,vb=300,fps=25,scale=1,acodec=mp4a,ab=64,channels=2}:std{access=rtmp,mux=ffmpeg{mux=flv},dst=rtmp://rtmp.server.com:1935/path/to/stream}'这个例子可以自动侦测 v4l2 装置并且选择第一个装置来采集讯号。其他的参数选项如视频标准(PAL, NTSC)、Chroma、宽度、长度等等可以自行设置。必须要注意的是,这些参数设置跟本身的设备有关。 当我门使用debug模式 (-vvv),VLC自身的video for linux (v4l2) 模块会显示出执行时所出现的数值讯息。v4l2 模块提供以下可作为优化的选项:

–v4l2-dev=: 指定所要采集的特定装置
–v4l2-standard=: 使用哪种视频标准,例如: SECAM, PAL, NTSC and more
–v4l2-width=: 视频呈现的宽度(in pixels)
–v4l2-height=: 视频呈现的长度度(in pixels)
以上是描述有关v4l2的参数选项。完整的v4l2模块讯息,可以利用下面的指令查询。

$ vlc -H -p v4l2 --advanced以下是另一个将http串流转码(transcode)到RTMP给Adobe Flash Media Server或Wowza Media Server等视频服务器

㈡ linux下QT+V4l2+FFMPEG摄像头采集程序,怎么配置

这个软件是你自己写的吗?在V4L2编程中在图像处理的时候就有一个参数是让截取的图像改变格式的,目前V4L2的支持大部分图像格式!

㈢ V4L2的USB摄像头编程,用的是友善之臂的MINI6410,但是程序只对有驱摄像头好用,现在的无驱摄像头不好用

查询系统硬件的VID和PID,VID/PID是全球USB组织统一分配的代码,VID是代表厂家,PID 是代表产品型号,任何一个USB设备生产商必须注册此两个号码,且注册后不能修改。

多读读彩虹桥木马的源码,看人家是怎么处理的。

㈣ Android 开发,使用ndk调用v4l2来读取Android摄像头的数据靠谱吗

一、用NDK进行C代码的调取(已熟悉此调取技术)
二、摄像头的获取,这个不能用SDK来调,因为用SDK来调头部跟踪程序很难获得我们的
数据,也不大能考虑AIDL跨进程通信的方案,因为这样数据交互可能太慢。

问题:

头部跟踪移植到Android系统中,跟踪程序需通过核心程序(C实现)调取Camera而不是通过Android SDK进行调取Camera。

前提:

Android的四个层次如下,

一个完成的Android应用,一般都是有java框架的,虽然NDK(Native Development Kit,一系列工具的集合)提供了一系列的工具,帮助开发者快速开发 C (或 C++ )的动态库,并能自动将 so 和 java 应用一起打包成 apk 。但是NDK 并没有提供各种系统事件处理支持,也没有提供应用程序生命周期维护。此外,在本次发布的 NDK 中,应用程序 UI 方面的 API 也没有提供。至少目前来说,使用纯 C 、 C++ 开发一个完整应用的条件还不完备。所以,就目前来说,必须依赖上层Java框架的支持。

解决方案:

初步考虑有三种方式可以实现:

一、由于Android是运行在Linux上的,所以可以考虑让C程序调V4L2
接口来获取摄像头数据。Video4linux2(简称V4L2),是linux中关于视频设备的内核驱动。在Linux中,视频设备是设备文件,可以像访问普通文件一样对其进行读写,摄像头在/dev/video0下。,不过可移植性差,因为不同厂家的设备驱动接口可能不完全一样,另外也要求开发者熟悉Linux内核编译。

二、SDK获取摄像头数据,再用JNI调C来处理图像,也就是使用JNI来调取跟踪程序并进行数据交互。

三、通过查看Android系统的底层代码,发现Android系统调摄像头也是通过JNI编程来实现的,所以考虑到是否能在JNI调用的Android底层Camera的底层流程中增加一步添加自己的业务逻辑。具体表现在调取Camera之前先启动头像识别程序,让头像识别程序去调Camera设备并获得进行数据交互,比如可以考虑在人像识别中调取android_hardware_Camera.cpp。Camera进程机制如下图:

在Android中,Camera的代码主要在以下的目录中:
Camera的JAVA程序的路径:packages/apps/Camera/src/com/android/camera/
在其中Camera.java是主要实现的文件
Camera的JAVA本地调用部分(JNI):
frameworks/base/core/jni/android_hardware_Camera.cpp

这部分内容编译成为目标是libandroid_runtime.so


Camera底层库在以下的目录中:
frameworks/base/libs/ui/
这部分的内容被编译成库libui.so。

Camera服务部分:
frameworks/base/camera/libcameraservice/
这部分内容被编译成库libcameraservice.so。

为了实现一个具体功能的Camera,在最底层还需要一个硬件相关的Camer库(例如通过调用video for linux驱动程序和Jpeg编码程序实现)。这个库将被Camera的服务库libcameraservice.so调用。

在 Camera系统的各个库中,libui.so位于核心的位置,它对上层的提供的接口主要是Camera类,类 libandroid_runtime.so通过调用Camera类提供对JAVA的接口,并且实现了android.hardware.camera 类。 libcameraservice.so是Camera的服务器程序,它通过继承libui.so的类实现服务器的功能,并且与libui.so中的另外一部分内容则通过进程间通讯(即Binder机制)的方式进行通讯。
libandroid_runtime.so和libui.so两个库是公用的,其中除了Camera还有其他方面的功能。

特别说明:Camera在模拟器上无法运行,以上所述方案暂时不能做测试,而且底层调取Camera属于系统开发和嵌入开发的范畴,需要的知识面比较广,我也只是在初步研究中,以上所述,如有错误,还请批评指正及包涵。

㈤ v4l2在windows下可以用吗

一、用NDK进行C代码的调取(已熟悉此调取技术)二、摄像头的获取,这个不能用SDK来调,因为用SDK来调头部跟踪程序很难获得我们的
数据,也不大能考虑AIDL跨进程通信的方案,因为这样数据交互可能太慢。

㈥ linux下怎么样进行摄像头编程

在linux下所有设备都是文件。所以对摄像头的操作其实就是对文件的操作。USB摄像头的设备文件就是在/dev目录下的video0(假如只有一个摄像头)。在linux下操作摄像头就是使用v4l2对摄像头进行的操作,操作步骤如下

㈦ v4l2编程 关于linux中无驱动摄像头无法驱动问题 会的话麻烦你看一下 万分感谢

linux中驱动应该可以在网上找找,然后安装一下。我只有这个办法了

㈧ 如何利用Video4Linux获取摄像头数据

1. 摄像头的安装

在Linux下常用的摄像头驱动是spca5xx。这个网站还给出了这款驱动支持的摄像头的种类。另外,ov511芯片直接就支持Linux,使用者款芯片的摄像头有网眼V2000。我使用的是网眼V2000的摄像头,和Z-Star
301p+现代7131R芯片的摄像头。后一种需要spca5xx的驱动。关于spca5xx的安装方法,网上有很多介绍,这里就不说了。

2. 摄像头的调试

安装好摄像头后,为了测试摄像头能否正常工作,可以用一下软件。比较著名的是xawtv,在网上搜以下可以下载到。安装好后,打开xawtv则可以调试摄像头。

3. Video4Linux 编程获取数据

现有的video4linux有两个版本,v4l和v4l2。本文主要是关于v4l的编程。利用v4l API获取视频图像一般有以下几步:

a> 打开设备

b> 设置设备的属性,比如图像的亮度,对比度等等

c> 设定传输格式和传输方式

d> 开始传输数据,一般是一个循环,用以连续的传输数据

e> 关闭设备

下面具体介绍v4l编程的过程。首先指出,在video4linux编程时要包含头文件,其中包含了video4linux的数据结构和函数定义。

1)v4l的数据结构

在video4linux API中定义了如下数据结构,详细的数据结构定义可以参考v4l API的文档,这里就编程中经常使用的数据结构作出说明。

首先我们定义一个描述设备的数据结构,它包含了v4l中定义的所有数据结构:
typedef struct
_v4ldevice
{int fd;//设备号
struct video_capability capability;
struct
video_channel channel[10];
struct video_picture picture;
struct video_clip
clip;
struct video_window window;
struct video_capture capture;
struct
video_buffer buffer;
struct video_mmap mmap;
struct video_mbuf
mbuf;
struct video_unit unit;
unsigned char
*map;//mmap方式获取数据时,数据的首地址
pthread_mutex_t mutex;
int frame;
int
framestat[2];
int overlay;
}v4ldevice;
下面解释上面这个数据结构中包含的数据结构,这些结构的定义都在中。
* struct
video_capability
name[32] Canonical name for this interface
type Type of
interface
channels Number of radio/tv channels if appropriate
audios
Number of audio devices if appropriate
maxwidth Maximum capture width in
pixels
maxheight Maximum capture height in pixels
minwidth Minimum capture
width in pixels
minheight Minimum capture height in pixels

这一个数据结构是包含了摄像头的属性,name是摄像头的名字,maxwidth maxheight是摄像头所能获取的最大图像大小,用像素作单位。

在程序中,通过ioctl函数的VIDIOCGCAP控制命令读写设备通道已获取这个结构,有关ioctl的使用,比较复杂,这里就不说了。下面列出获取这一数据结构的代码:
int v4lgetcapability(v4ldevice *vd)
{
if(ioctl(vd->fd,
VIDIOCGCAP, &(vd->capability)) < 0)
{
v4lperror("v4lopen:VIDIOCGCAP");
return -1;
}
return 0;
}
*
struct video_picture
brightness Picture brightness
hue Picture hue (colour
only)
colour Picture colour (colour only)
contrast Picture
contrast
whiteness The whiteness (greyscale only)
depth The capture depth
(may need to match the frame buffer depth)
palette Reports the palette that
should be used for this image

这个数据结构主要定义了图像的属性,诸如亮度,对比度,等等。这一结构的获取通过ioctl发出VIDIOCGPICT控制命令获取。
* struct video_mbuf
size The number of bytes to
map
frames The number of frames
offsets The offset of each frame

这个数据结构在用mmap方式获取数据时很重要:

size表示图像的大小,如果是640*480的彩色图像,size=640*480*3

frames表示帧数

offsets表示每一帧在内存中的偏移地址,通过这个值可以得到数据在图像中的地址。

得到这个结构的数据可以用ioctl的VIDIOCGMBUF命令。源码如下:
int v4lgetmbuf(v4ldevice
*vd)
{
if(ioctl(vd->fd, VIDIOCGMBUF, &(vd->mbuf))<0)
{
v4lperror("v4lgetmbuf:VIDIOCGMBUF");
return -1;
}
return
0;
}

而数据的地址可以有以下方式计算:
unsigned char
*v4lgetaddress(v4ldevice *vd)
{
return (vd->map +
vd->mbuf.offsets[vd->frame]);
}

2)获取影像mmap方式。

在video4Linux下获取影像有两种方式:overlay和mmap。由于我的摄像头不支持overlay方式,所以这里只谈mmap方式。

mmap方式是通过内存映射的方式获取数据,系统调用ioctl的VIDIOCMCAPTURE后,将图像映射到内存中,然后可以通过前面的v4lgetmbuf(vd)函数和v4lgetaddress(vd)函数获得数据的首地址,这是李可以选择是将它显示出来还是放到别的什么地方。

下面给出获取连续影像的最简单的方法(为了简化,将一些可去掉的属性操作都去掉了):
char*
devicename="/dev/video0";
char* buffer;
v4ldevice device;
int width =
640;
int height = 480;
int frame =
0;
v4lopen("/dev/video0",&device);//打开设备
v4lgrabinit(&device,width,height);//初始化设备,定义获取的影像的大小
v4lmmap(&device);//内存映射
v4lgrabstart(&device,frame);//开始获取影像
while(1){
v4lsync(&device,frame);//等待传完一帧
frame
= (frame+1)%2;//下一帧的frame
v4lcapture(&device,frame);//获取下一帧
buffer =
(char*)v4lgetaddress(&device);//得到这一帧的地址
//buffer给出了图像的首地址,你可以选择将图像显示或保存......
//图像的大小为
width*height*3
..........................
}
转载仅供参考,版权属于原作者。祝你愉快,满意请采纳哦

㈨ linux下v4l2拍照测试用例 得到什么文件

看编写程序的人设置什么格式
V4L2的编程下有设置格式的参数,一般来说都是jpg,反正都是现在你看到的主流图像格式

㈩ linux3.2支持v4l2编程吗

extern int ioctl (int __fd, unsigned long int __request, …) __THROW;
__fd:设备的ID,例如刚才用open函数打开视频通道后返回的cameraFd;
__request:具体的命令标志符。
在进行V4L2开发中,一般会用到以下的命令标志符:
VIDIOC_REQBUFS:分配内存
VIDIOC_QUERYBUF:把VIDIOC_REQBUFS中分配的数据缓存转换成物理地址
VIDIOC_QUERYCAP:查询驱动功能
VIDIOC_ENUM_FMT:获取当前驱动支持的视频格式
VIDIOC_S_FMT:设置当前驱动的频捕获格式
VIDIOC_G_FMT:读取当前驱动的频捕获格式
VIDIOC_TRY_FMT:验证当前驱动的显示格式

阅读全文

与v4l2用什么编程相关的资料

热点内容
南城免费的进出口数据平台哪个好 浏览:950
周星驰电影下载文件 浏览:600
qq头像挂件绝版代码 浏览:604
带点黄色的都市小说 浏览:725
java配置文件参数 浏览:257
买足球鞋用什么网站 浏览:107
粤语电影迅雷下载 浏览:786
怎么导入文件夹进u盘 浏览:732
stm8s103源程序 浏览:441
我能复制天赋叶天小说免费阅读 浏览:49
经典南洋建国类小说 浏览:650
遗愿清单app 浏览:419
温州ug数控编程培训哪个学校好 浏览:98
360收藏的网站不见了如何找回 浏览:457
电影39天完整版 浏览:902
星空卫视播放的日本恐怖片 浏览:494
手机重置后wlan怎么添加网络名称 浏览:608
谷歌商店下载旧版本 浏览:392
我老公的家庭教育师韩剧演员表 浏览:161
来一个电影网站都懂 浏览:715

友情链接