Capture cap;
private void OpenVideo(){
cap = new Capture("rtmp://202.69.69.180:443/webcast/bshdlive-pc");
cap.SetCaptureProperty(CvEnum.CapProp.Fps,0);
cap.ImageGrabbed += Cap_ImageGrabbed;
cap.Start();
}
private void Cap_ImageGrabbed(Sender sender,EventArgs e){
Mat mat = new Mat();
cap.Retrieve (mat,0);
VideoPictureBox.Image = mat.Bitmap;
}
但是,它不进入这个ImageGrabbed 是为什么?我在另一个项目中也是这么写的,但是可以使用,现在我不清楚到底为啥不行。emgu需要的环境我都做了配置了
我的vs神经病了吧,我写完了博问,再起就好了
您好,请问您知道用Emgu.CV3.1之后窗口没有视频出来是什么原因吗
我用的就是3.1啊,代码就是上面贴的那一点点
@小草上飞飞: 我也是就这一点点代码视频就是接不进来,我不晓得是啥情况
你先使用 其他播放器确定你的rtsp链接是ok的
@Iirs_C#: 看看你的链接能播放不能
@小草上飞飞: 可以的,我用vlc可以放出来视频,但是用C#就是接不进来,这几行代码换了块一个小时了就是不出视频
@Iirs_C#: 你看下进这个 代理了吗
private void Cap_ImageGrabbed(Sender sender,EventArgs e){
Mat mat = new Mat();
cap.Retrieve (mat,0);
VideoPictureBox.Image = mat.Bitmap;
}
这个方法里打断点,看有断点进来了没有
@Iirs_C#: 没有的话,看
private void OpenVideo(){
cap = new Capture("rtmp://202.69.69.180:443/webcast/bshdlive-pc");
cap.SetCaptureProperty(CvEnum.CapProp.Fps,0);
cap.ImageGrabbed += Cap_ImageGrabbed;
cap.Start();
}
这个方法执行完了没有。
没有的话,重启vs,重启电脑,重新生成
@小草上飞飞: 我这里进不去这个事件,
@Iirs_C#: 我当时就是这样,没进入那个事件代理
@小草上飞飞: 要重启电脑吗?我试试是
@Iirs_C#:
private void Cap_ImageGrabbed(Sender sender,EventArgs e){
Mat mat = new Mat();
cap.Retrieve (mat,0);
VideoPictureBox.Image = mat.Bitmap;
}
换成这个试一试。
VideoPictureBox.Image = mat.ToBitmap();
我发这个博问就是它不进那个代理,但是我回头又起了一下,就没有啥问题了
@Iirs_C#: 我当时重启了vs,重启了电脑,重新生成了项目以及整个解决方案,emmm
@小草上飞飞: 我重启了vs 还是不行 ,我感觉是这里事件invok出来的是空的 currentDevice.ImageGrabbed += CurrentDevice_ImageGrabbed;为什么你们都可以我不行呢
@Iirs_C#: 我发现Emgu不是很稳定,容易崩溃,
VideoPictureBox.Image = mat.Bitmap;
会有内存非法访问
VideoPictureBox.Image = mat.ToBitmap();
会提示Capture
被占用还是咋的,你可以测试下在你的机子上有没有问题,我机子没问题,但是在我同事机器上各种问题
我下班了,我把我测试可用的项目打包给你,你看看在你那里能行不
@Iirs_C#:
链接:https://pan.baidu.com/s/1VuWnVBhXjj981sgFHpd4ng
提取码:1111
复制这段内容后打开百度网盘手机App,操作更方便哦
只有一天事件,38M
@小草上飞飞: 好的 谢谢呀
@小草上飞飞: 我感觉你在事件最后里面加上Dispose()方法把帧释放掉比较好,不然可能会太占内存
@Iirs_C#: 你加上试试就知道了
@Iirs_C#: 要是可以的话,给我一份代码,看看你怎么处理高占用的问题,好像中间多一步转换会降低占用
private void Cap_ImageGrabbed(Sender sender,EventArgs e){
Mat mat = new Mat();
cap.Retrieve (mat,0);
/// 在这里将mat转换为Image
//<bgr,byte>img...
VideoPictureBox.Image = mat.Bitmap;//这里用image.tobitmap或者。bitmap
}
@小草上飞飞: 我是这样写的,就加了一句释放的。
private void CurrentDevice_ImageGrabbed(object sender, EventArgs e)
{
try
{
Mat frame = new Mat();
currentDevice.Retrieve(frame, 0);
imageBox2.Image = frame;
frame.Dispose();
}
catch (Exception ex)
{
}
}
你的项目我也接不到代码,好奇怪,emgu.cv需要什么环境配置吗
@小草上飞飞: 你的项目换成我的rtsp也接不到视频进来,好奇怪
@Iirs_C#: 这个我还没有遇到过。但是你说vlc是可用的,emmm