當前位置:首頁 » 操作系統 » ok採集源碼

ok採集源碼

發布時間: 2025-06-17 23:41:09

❶ windows下的攝像頭採集代碼,只需要打開設備和將採集到的圖片保存為數據那部分

VC-攝像頭控制SDK源碼
#include <windows.h>
#include <stdio.h>
#include <vfw.h>
#pragma comment(lib,"vfw32.lib")

HWND ghWndCap ; //捕獲窗的句柄
CAPDRIVERCAPS gCapDriverCaps ; //視頻驅動器的能力
CAPSTATUS gCapStatus ; //捕獲窗的狀態
char szCaptureFile[] = "MYCAP.AVI";
char gachBuffer[20];

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

LRESULT CALLBACK StatusCallbackProc(HWND hWnd,int nID,LPSTR lpStatusText)
{
if(!ghWndCap)return FALSE;//獲得捕獲窗的狀態
capGetStatus(ghWndCap,&gCapStatus,sizeof(CAPSTATUS));//更新捕獲窗的大小
SetWindowPos(ghWndCap,NULL,0,0,gCapStatus.uiImageWidth,gCapStatus.uiImageHeight,SWP_NOZORDER|SWP_NOMOVE);
if(nID==0){//清除舊的狀態信息
SetWindowText(ghWndCap,(LPSTR)"hello");
return (LRESULT)TRUE;
}//顯示狀態ID和狀態文本
wsprintf(gachBuffer,"Status# %d: %s",nID,lpStatusText);
SetWindowText(ghWndCap,(LPSTR)gachBuffer);
return (LRESULT)TRUE;
}
LRESULT CALLBACK ErrorCallbackProc(HWND hWnd,int nErrID,LPSTR lpErrorText)
{
if(!ghWndCap)return FALSE;
if(nErrID==0)return TRUE;//清除舊的錯誤
wsprintf(gachBuffer,"Error# %d",nErrID);//顯示錯誤標識和文本
MessageBox(hWnd, lpErrorText, gachBuffer,MB_OK | MB_ICONEXCLAMATION);
return (LRESULT) TRUE;
}

LRESULT CALLBACK FrameCallbackProc(HWND hWnd,LPVIDEOHDR lpVHdr)
{
FILE *fp;
fp=fopen("caram.dat","w");
if(!ghWndCap)return FALSE;//假設fp為一打開的.dat文件指針
fwrite(lpVHdr->lpData,1,lpVHdr->dwBufferLength,fp);
return (LRESULT)TRUE;
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
static TCHAR szAppName[]=TEXT("HelloWin");
HWND hwnd;
MSG msg;
WNDCLASS wndclass;
wndclass.style=CS_HREDRAW|CS_VREDRAW;
wndclass.lpfnWndProc=WndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName=NULL;
wndclass.lpszClassName=szAppName;
if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("This program requires WindowsNT!"),szAppName,MB_ICONERROR);
return 0;
}
hwnd=CreateWindow(szAppName,TEXT("The Hello Program"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch(message)
{
case WM_CREATE:
{
ghWndCap=capCreateCaptureWindow((LPSTR)"Capture Window",WS_CHILD|WS_VISIBLE,0,0,300,240,(HWND)hwnd,(int)0);
capSetCallbackOnError(ghWndCap,(FARPROC)ErrorCallbackProc);
capSetCallbackOnStatus(ghWndCap,(FARPROC)StatusCallbackProc);
capSetCallbackOnFrame(ghWndCap,(FARPROC)FrameCallbackProc);
capDriverConnect(ghWndCap,0); // 將捕獲窗同驅動器連接
//獲得驅動器的能力,相關的信息放在結構變數gCapDriverCaps中
capDriverGetCaps(ghWndCap,&gCapDriverCaps,sizeof(CAPDRIVERCAPS));
capPreviewRate(ghWndCap, 66); // 設置Preview模式的顯示速率
capPreview(ghWndCap, TRUE); //啟動Preview模式
if(gCapDriverCaps.fHasOverlay) //檢查驅動器是否有疊加能力
capOverlay(ghWndCap,TRUE); //啟動Overlay模式
if(gCapDriverCaps.fHasDlgVideoSource)capDlgVideoSource(ghWndCap); //Video source 對話框
if(gCapDriverCaps.fHasDlgVideoFormat)capDlgVideoFormat(ghWndCap); // Video format 對話框
if(gCapDriverCaps.fHasDlgVideoDisplay)capDlgVideoDisplay(ghWndCap); // Video display 對話框
capFileSetCaptureFile( ghWndCap, szCaptureFile); //指定捕獲文件名
capFileAlloc(ghWndCap, (1024L * 1024L * 5)); //為捕獲文件分配存儲空間
capCaptureSequence(ghWndCap); //開始捕獲視頻序列
capGrabFrame(ghWndCap); //捕獲單幀圖像

}

return 0;
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
GetClientRect(hwnd,&rect);
DrawText(hdc,TEXT("Hello,Windows98!"),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
EndPaint(hwnd,&ps);
return 0;
case WM_DESTROY:
{
capSetCallbackOnStatus(ghWndCap,NULL);
capSetCallbackOnError(ghWndCap,NULL);
capSetCallbackOnFrame(ghWndCap,NULL);
capCaptureAbort(ghWndCap);//停止捕獲
capDriverDisconnect(ghWndCap); //將捕獲窗同驅動器斷開
PostQuitMessage(0);
}
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}

❷ 萬能採集網站php源碼

php獲取網頁源碼內容有哪些辦法

可以參考以下幾種方法:

方法一:file_get_contents獲取

spanstyle="white-space:pre"?/span$url="";

spanstyle="white-space:pre"?/span$fh=file_get_contents

('');spanstyle="white-space:pre"?/spanecho$fh;

方法二:使用fopen獲取網頁源代碼

spanstyle="white-space:pre"?/span$url="";

spanstyle="white-space:pre"?/span$handle=fopen($url,"rb");

spanstyle="white-space:pre"?/span$contents="";

spanstyle="white-space:pre"?/spanwhile(!feof($handle)){

spanstyle="white-space:pre"??/span$contents.=fread($handle,8192);

spanstyle="white-space:pre"?/span}

spanstyle="white-space:pre"?/spanfclose($handle);

spanstyle="white-space:pre"?/spanecho$contents;//輸出獲取到得內容。

方法三:使用CURL獲取網頁源代碼

$url="";

$UserAgent='Mozilla/4.0(compatible;MSIE7.0;WindowsNT6.0;SLCC1;.NETCLR2.0.50727;.NETCLR3.0.04506;.NETCLR3.5.21022;.NETCLR1.0.3705;.NETCLR1.1.4322)'

$curl=curl_init();?//創建一個新的CURL資源

curl_setopt($curl,CURLOPT_URL,$url);?//設置URL和相應的選項

curl_setopt($curl,CURLOPT_HEADER,0);?//0表示不輸出Header,1表示輸出

curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);?//設定是否顯示頭信息,1顯示,0不顯示。//如果成功只將結果返回,不自動輸出任何內容。如果失敗返回FALSE

curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);

curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,false);

curl_setopt($curl,CURLOPT_ENCODING,'');?//設置編碼格式,為空表示支持所有格式的編碼

//header中「Accept-Encoding:」部分的內容,支持的編碼格式為:"identity","deflate","gzip"。

curl_setopt($curl,CURLOPT_USERAGENT,$UserAgent);

curl_setopt($curl,CURLOPT_FOLLOWLOCATION,1);

//設置這個選項為一個非零值(象「Location:「)的頭,伺服器會把它當做HTTP頭的一部分發送(注意這是遞歸的,PHP將發送形如「Location:「的頭)。

$data=curl_exec($curl);

echo$data;

//echocurl_errno($curl);//返回0時表示程序執行成功

curl_close($curl);?//關閉cURL資源,並釋放系統資源

拓展資料

PHP(外文名:PHP:HypertextPreprocessor,中文名:「超文本預處理器」)是一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特點,利於學習,使用廣泛,主要適用於Web開發領域。PHP獨特的語法混合了C、Java、Perl以及PHP自創的語法。它可以比CGI或者Perl更快速地執行動態網頁。

用PHP做出的動態頁面與其他的編程語言相比,PHP是將程序嵌入到HTML(標准通用標記語言下的一個應用)文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;PHP還可以執行編譯後代碼,編譯可以達到加密和優化代碼運行,使代碼運行更快。

❸ WebRTC 源碼分析 (一) Android 相機採集

本文深入解析了WebRTC在Android平台上的相機採集機制。首先,WebRTC Android環境已整合了原生API(Camera和Camera2)的相機採集,無需額外實現。盡管如此,我們可以通過封裝抽象介面(CameraCapturer)實現CameraX,但本文將重點放在從Java到JNI的調用過程解析上。


為了清晰展示整個流程,我們首先藉助一個時序圖進行概述。圖中詳細展示了涉及的關鍵文件,幫助追蹤源碼。


WebRTC的視頻採集介面定義為VideoCapturer,內部封裝了初始化(SurfaceTexture渲染幫助類與相機採集回調)、開始/結束/釋放等生命周期API,主要實現包括Camera1Capturer和Camera2Capturer。接下來,我們逐步解析WebRTC如何利用Camera1和Camera2進行創建與使用。


2.1 Camera 1


若選擇使用Camera1進行startCapture,流程將涉及Camera1Session的創建,最終執行Camera.open並進行基礎設置,如幀率、採集格式和預覽。實例化Camera1Session時,設置SurfaceTexture的緩沖大小(即解析度)並啟動捕獲過程。在startCapturing的實現中,調用相機的預覽函數,並通過監聽TextureFrames實現幀回調。接收到數據後,調用events.onFrameCaptured函數,後續處理在JNI層進行。


2.2 Camera2


Camera2 API於Android API-22引入,旨在支持復雜相機場景,其API相較於Camera1更復雜。使用Camera2進行startCapture時,流程類似於Camera1,主要涉及找到採集格式(如fps范圍、解析度和顏色格式)、打開攝像頭等步驟。成功打開攝像頭後,執行onOpened函數進行預覽設置,包括SurfaceTexture接收數據和調用camera.createCaptureSession與狀態回調。至此,Camera1和Camera2的處理流程趨同。


3、相機數據native處理


事件回調events.onFrameCaptured調用CameraCapturer#onFrameCaptured函數,並最終傳遞給VideoSource#onFrameCaptured,數據通過NativeAndroidVideoTrackSource_jni處理,封裝為Native端的AndroidVideoTrackSource類,調用內部的OnFrameCaptured函數。經過處理後,數據通過JNI回調至Java端。


4、相機數據預覽


在Java端,通過WebSocket連接成功並進入視頻通話房間時,調用PeerConnectionClient#createPeerConnection函數,傳遞本地和遠端的VideoSink。在createVideoTrack實現中,創建SurfaceTextureHelper對象,初始化與開始採集,最終回調給Java端的VideoSink進行數據處理。至此,數據從採集到預覽的整個流程完整結合。


5、實戰Demo


本文提供了一個從WebRTC源碼中抽離的相機採集代碼示例,供有興趣的開發者參考和學習。


總結,本文詳細解析了WebRTC Android平台上的相機採集機制,從Java到JNI的調用過程,以及數據的預覽與處理流程。對於希望深入理解WebRTC源碼的開發者,建議進行實際代碼調試。未來,將提供如何在MACOS下搭建WebRTC調試環境的教程。


熱點內容
自己配置電腦哪些可以買二手 發布:2025-06-18 02:19:37 瀏覽:606
接收存儲過程返回值 發布:2025-06-18 02:19:24 瀏覽:725
c語言編程設計 發布:2025-06-18 02:14:56 瀏覽:342
編程畫圖顏色 發布:2025-06-18 01:59:09 瀏覽:4
根據ip就近分配伺服器 發布:2025-06-18 01:52:32 瀏覽:221
優米伺服器工具是什麼 發布:2025-06-18 01:50:18 瀏覽:143
大學生解壓拓展多少錢一個人 發布:2025-06-18 01:38:48 瀏覽:569
python去小數點後兩位 發布:2025-06-18 01:37:09 瀏覽:133
布吉島伺服器IP地址 發布:2025-06-18 01:32:30 瀏覽:318
php程序的調用 發布:2025-06-18 01:31:47 瀏覽:707