用c#调用摄像头做录像功能
前段时间刚做了个监控系统,有不明白+qq
using System.Runtime.InteropServices;
using System.Drawing;
using System.Drawing.Imaging;
using System;
namespace CamTest2
{
/// <summary>
/// 一个控制摄像头的下载类
/// </summary>
public class Pick
{
private const int WM_USER = 0x;
private const int WS_CHILD = 0x;
private const int WS_VISIBLE = 0x;
private const int WM_CAP_START = WM_USER;
private const int WM_CAP_STOP = WM_CAP_START + ;
private const int WM_CAP_DRIVER_CONNECT = WM_CAP_START + ;
private const int WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + ;
private const int WM_CAP_SAVEDIB = WM_CAP_START + ;
private const int WM_CAP_GRAB_FRAME = WM_CAP_START + ;
private const int WM_CAP_SEQUENCE = WM_CAP_START + ;
private const int WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + ;
private const int WM_CAP_SEQUENCE_NOFILE = WM_CAP_START + ;
private const int WM_CAP_SET_OVERLAY = WM_CAP_START + ;
private const int WM_CAP_SET_PREVIEW = WM_CAP_START + ;
private const int WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START + 6;
private const int WM_CAP_SET_CALLBACK_ERROR = WM_CAP_START + 2;
private const int WM_CAP_SET_CALLBACK_STATUSA = WM_CAP_START + 3;
private const int WM_CAP_SET_CALLBACK_FRAME = WM_CAP_START + 5;
private const int WM_CAP_SET_SCALE = WM_CAP_START + ;
private const int WM_CAP_SET_PREVIEWRATE = WM_CAP_START + ;
private const int WM_CAP_DLG_VIDEOFORMAT = WM_CAP_START + ;
private const int WM_CAP_DLG_VIDEOSOURCE = WM_CAP_START + ;
private const int WM_CAP_DLG_VIDEODISPLAY = WM_CAP_START + ;
private const int WM_CAP_DLG_VIDEOCOMPRESSION = WM_CAP_START + ;
private IntPtr hWndC;
private bool bStat = false;
private IntPtr mControlPtr;
private int mWidth;
private int mHeight;
private int mLeft;
private int mTop;
/// <summary>
/// 初始化摄像头
/// </summary>
/// <param name="handle">控件的句柄</param>
/// <param name="left">开始显示的左边距</param>
/// <param name="top">开始显示的上边距</param>
/// <param name="width">要显示的宽度</param>
/// <param name="height">要显示的长度</param>
public Pick(IntPtr handle, int left, int top, int width, int height)
{
mControlPtr = handle;
mWidth = width;
mHeight = height;
mLeft = left;
mTop = top;
}
[DllImport("avicap.dll")]
private static extern IntPtr capCreateCaptureWindowA(byte[] lpszWindowName, int dwStyle, int x, int y, int nWidth, int nHeight, IntPtr hWndParent, int nID);
[DllImport("avicap.dll")]
private static extern int capGetVideoFormat(IntPtr hWnd, IntPtr psVideoFormat, int wSize);
[DllImport("User.dll")]
private static extern bool SendMessage(IntPtr hWnd, int wMsg, int wParam, long lParam);
public void capDlgVideoFormat()
{
Boolean capDlgVideoFormat = SendMessage(hWndC, WM_CAP_DLG_VIDEOFORMAT, 0, 0);
}
public void capDlgVideoSource()
{
Boolean capDlgVideoSource = SendMessage(hWndC, WM_CAP_DLG_VIDEOSOURCE, 0, 0);
}
public void capDlgVideoDisplay()
{
Boolean capDlgVideoDisplay = SendMessage(hWndC, WM_CAP_DLG_VIDEODISPLAY, 0, 0);
}
public void capDlgVideoCompression()
{
Boolean capDlgVideoCompression = SendMessage(hWndC, WM_CAP_DLG_VIDEOCOMPRESSION, 0, 0);
}
/// <summary>
/// 开始显示图像
/// </summary>
public void Start()
{
if (bStat)
return;
bStat = true;
byte[] lpszName = new byte[];
hWndC = capCreateCaptureWindowA(lpszName, WS_CHILD | WS_VISIBLE, mLeft, mTop, mWidth, mHeight, mControlPtr, 0);
if (hWndC.ToInt() != 0)
{
SendMessage(hWndC, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, 0);
SendMessage(hWndC, WM_CAP_SET_CALLBACK_ERROR, 0, 0);
SendMessage(hWndC, WM_CAP_SET_CALLBACK_STATUSA, 0, 0);
SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0);
SendMessage(hWndC, WM_CAP_SET_SCALE, 1, 0);
SendMessage(hWndC, WM_CAP_SET_PREVIEWRATE, , 0);
SendMessage(hWndC, WM_CAP_SET_OVERLAY, 1, 0);
SendMessage(hWndC, WM_CAP_SET_PREVIEW, 1, 0);
}
return;
}
/// <summary>
/// 停止显示
/// </summary>
public void Stop()
{
SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0);
bStat = false;
}
/// <summary>
/// 抓图
/// </summary>
/// <param name="path">要保存bmp文件的路径</param>
public void GrabImage(string path)
{
IntPtr hBmp = Marshal.StringToHGlobalAnsi(path);
SendMessage(hWndC, WM_CAP_SAVEDIB, 0, hBmp.ToInt());
}
/// <summary>
/// 录像
/// </summary>
/// <param name="path">要保存avi文件的路径</param>
public void Kinescope(string path)
{
IntPtr hBmp = Marshal.StringToHGlobalAnsi(path);
SendMessage(hWndC, WM_CAP_FILE_SET_CAPTURE_FILEA, 0, hBmp.ToInt());
SendMessage(hWndC, WM_CAP_SEQUENCE, 0, 0);
}
/// <summary>
/// 停止录像
/// </summary>
public void StopKinescope()
{
SendMessage(hWndC, WM_CAP_STOP, 0, 0);
}
/* public void cap()
{
CAPTUREPARMS s;
capCaptureGetSetup(m_caphwnd,&s,sizeof(CAPTUREPARMS));//取得采集参数
s.dwRequestMicroSecPerFrame = ;//采集一帧花费1/秒
s.fAbortLeftMouse = FALSE;//压下鼠标左键不终止采集
s.fAbortRightMouse = FALSE;//压下鼠标右键不终止采集
s.fCaptureAudio = TRUE;//c采集音频
s.fYield = TRUE;//使用一个独立的线程来采集视频,不使用View窗口线程
capCaptureSetSetup(m_caphwnd,源码&s,sizeof(CAPTUREPARMS));//设定采集参数
}*/
}
}
有谁知道怎样从.com/soft/.html
Project URL Snooper实施流媒体抓取的先后步骤比较重要,先打开此软件并启动探测,下载然后打开需要抓取流媒体的源码页面,再复制网址实施下载。下载理财平台app源码在“常规选项”选项卡下,源码从“网络侦测选项”下拉菜单中选择其唯一的下载选项即可完成配置,因为是源码实施的网络搜索,所以还得将“搜索的下载目录”下的勾选取消。之后返回“搜索”选项卡,源码单击“侦测网络”按钮,下载lvgl源码讲解接着打开待抓取流媒体页面,源码即可开始实时探测。下载稍等之后即可从下边的源码预览框中看到搜索结果。
2、维棠FLV视频下载软件 下载地址:/
维棠FLV视频下载软件主要针对播客网的FLV视频文件而开发,对于其他格式的视频文件的探测力度显得不够。采用了地址复制方式,并不支持在浏览过程中的实时监控探测;将待探测的播客地址复制到“视频地址”框,然后定义好下载路径,即可开始分析下载。其实跟网站解码一样。资金堆积源码
3、网络嗅探器(影音神探) 下载地址:/soft/.html
在使用之初,网络嗅探器(影音神探)需要事先设置,主要是定义本机网卡连接,以及定义待搜索流媒体文件的格式,这样有助于更快速的搜索到需要的文件。而通常情况下,用户计算机都只有一块网卡,软件会自动识别;惟一要做的就是尽量缩小探测范围,即设置待搜索的视频文件格式。设置完成后,社区免费源码返回探测界面单击“开始嗅探”按钮;然后再打开所要找地址的网站,软件就会在地址列表框显示找到的地址。对于视频文件类型,网络嗅探器(影音神探)会在搜索结果中用红色字体高亮显示。需要注意的是,一定要先启动软件的探测功能,然后再打开待寻找地址的网站,这样才能成功。对于寻找到的视频地址,网络嗅探器(影音神探)提供了复制地址,需使用相应的linux队列源码下载软件才能实现下载。
关于FLV格式的视频转换软件
1. Riva FLV Encoder 下载地址:.com/soft/.html
使用方法:1、将fiv档案拖曳到〔Input〕处;2、在〔Output Diectory〕处选择存档目录;3、在〔Destination vedio file〕处将〔.flv〕改成〔.wmv,AVI,MPEG等格式);4、点击〔Encode〕进行转换(转换过程中程序界面会变白,转换完成后即恢复正常)。
2. flv2avi 下载地址:/
类似于百度搜索栏的一个网站,只要你将你要探测的网址复制上去,就能提取出网页上存在的所有视频地址。
6.强行破解源代码
查看源代码,搜索“”
然后复制之后到“”之间的代码,用DecodeScripting_Pro工具打开,选择反编码,然后贴入上面的代码,点击反编码按钮,就显示了媒体地址,可以用下载工具复制url下载。
7.使用影音嗅探工具
project URL Snooper下载地址:.com/soft/.html
或影音神探,下载地址:.com/soft/.html
流媒体下载技巧
在有的网站的在线**是弹出一个页面,那镶了一个real的播放器,看不到下载的地址,有一个很笨但是很有效的方法可以看到rtsp地址,就是“断线“,虽然很简单,但是很有效,起码可以下载下来本地观看了!具体方法如下:
进入页面以后先暂停,win下运行winipcfg然后回车,会出现一个“ip配置”,然后按播放键,等到播放的的缓冲进度刚刚出来的时候就按“ip配置”对话框中的“全部释放”,这样就断线了,就会出现rtsp地址,原理很简单,就是让网页找到要播放的以后断线,软件会报搞出错,有了出错的地址就可以下载了!
Win下也可以释放IP的,用IPCONFIG。
如何破解在线**网站的**地址:
风月/)是一个速度很快的站点。办法:例如要看《训练日》文件的地址页面地址/
将你所需要下载视频的网址复制到搜索框内,然后就会产生下载链接
3、you-get
如果你对python熟悉,当然不熟悉的话,其实也可以使用这个方法下载,python里面的you-get包可以下载视频。下载命令是:
you-get你所要下载视频的网址
4、网页检查,按F进入网页源码查看,播放视频,按f5刷新,在网络-媒体,找到类型为视频的网址下载,打开中间的网址,保存视频即可。
5、m3u8下载
有的视频网站进行了视频切片,这就需要m3u下载器来下载,这个比较复杂,有兴趣的可以私信我。
2024-11-30 10:31
2024-11-30 09:31
2024-11-30 09:25
2024-11-30 08:58
2024-11-30 07:58