導航:首頁 > 編程知識 > 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用什麼編程相關的資料

熱點內容
蘋果ios描述文件下載 瀏覽:237
哪個網站賣動物 瀏覽:72
投標文件如何導入excel 瀏覽:775
計算器編程序怎麼學 瀏覽:500
如何知道櫥窗賣出的商品是哪個app的 瀏覽:56
大眾寶來點火線圈數據流通道號是多少 瀏覽:981
手機後台網路怎麼關閉 瀏覽:537
大數據安徽 瀏覽:563
iphone鎖屏密碼能破解嗎 瀏覽:964
電信運營商大數據徵信 瀏覽:699
怎麼u盤里的文件打不開 瀏覽:97
如何發word文件怎麼打開 瀏覽:176
惠普還原系統win10教程 瀏覽:167
iphone6ssunspider 瀏覽:796
java獲取攝像頭 瀏覽:959
怎麼用網線傳文件 瀏覽:24
電導增量法matlab程序 瀏覽:366
手機文件管理在那裡 瀏覽:205
如何取消卸載app的續費 瀏覽:316
數控編程哪個最容易 瀏覽:170

友情鏈接