C# 使用VLC编写的播放器,使用libvlc_video_set_callbacks进入回调后报错

参考http://www.cnblogs.com/smartsensor/p/4343769.html 中的回调功能,想将视频的每一帧图片截取下来,代码如下
private const int _width = 1920;
private const int _height = 1080;
private const int _pixelBytes = 4;
private const int _pitch = _width * _pixelBytes;
private IntPtr _buff = IntPtr.Zero;

    private VideoLockCB _videoLockCB;
    private VideoUnlockCB _videoUnlockCB;
    private VideoDisplayCB _videoDisplayCB;
    private void button3_Click(object sender, EventArgs e)
    {

        if (_videoLockCB == null)
            _videoLockCB = new VideoLockCB(VideoLockCallBack);
        if (_videoUnlockCB == null)
            _videoUnlockCB = new VideoUnlockCB(VideoUnlockCallBack);
        if (_videoDisplayCB == null)
            _videoDisplayCB = new VideoDisplayCB(VideoDiplayCallBack);


        string pluginPath = System.Environment.CurrentDirectory + "\\plugins\\";
        string plugin_arg = "--plugin-path=" + pluginPath;
        string[] arguments = { "-I", "dummy", "--ignore-config", "--no-video-title", plugin_arg };
        IntPtr vlcInstance = libvlc_new(arguments);//




        IntPtr mediaInstance = libvlc_media_new_path(vlcInstance, "C:\\Users\\Administrator\\Videos\\Vive Cinema\\test.mp4");
        IntPtr mediaPlayerInstance = libvlc_media_player_new_from_media(mediaInstance);

// IntPtr render_wnd = this.panel1.Handle;//
// libvlc_media_player_set_hwnd(mediaPlayerInstance, (Int64)render_wnd);

        libvlc_media_release(mediaInstance);

        libvlc_video_set_format(mediaPlayerInstance, "RV32", _width, _height, _pitch);//RGBA 颜色不对,YUYV显示错误,I420程序跳出
        libvlc_video_set_callbacks(mediaPlayerInstance, _videoLockCB, _videoUnlockCB, _videoDisplayCB, IntPtr.Zero);

        libvlc_media_player_play(mediaPlayerInstance);

        /*Thread.Sleep(200);
        int length = libvlc_media_player_get_length(mediaPlayerInstance);
        int width = libvlc_video_get_width(mediaPlayerInstance);
        int height = libvlc_video_get_height(mediaPlayerInstance);

        Console.WriteLine("" + length + "," + width + "," + height);
         * */
    }

    [DllImport("libvlc.dll", EntryPoint = "libvlc_media_player_new_from_media", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
    public static extern IntPtr libvlc_media_player_new_from_media(IntPtr mediaInstance);
    [DllImport("libvlc.dll", EntryPoint = "libvlc_video_set_callbacks", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
    public static extern void libvlc_video_set_callbacks(IntPtr mediaPlayInstance, VideoLockCB lockCB, VideoUnlockCB unlockCB, VideoDisplayCB displayCB, IntPtr opaque);
    [DllImport("libvlc.dll", EntryPoint = "libvlc_video_set_format", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
    public static extern void libvlc_video_set_format(IntPtr mediaPlayerInstance, IntPtr chroma, UInt32 width, UInt32 height, UInt32 pitch);
    public delegate IntPtr VideoLockCB(IntPtr opaque, IntPtr planes);
    //解锁一个图片缓冲区
    public delegate void VideoUnlockCB(IntPtr opaque, IntPtr picture, IntPtr planes);
    //显示图片
    public delegate void VideoDisplayCB(IntPtr opaque, IntPtr picture);
    // 锁定一个图片缓冲区时先锁定,然后初始化这个缓冲区。
    private IntPtr VideoLockCallBack(IntPtr opaque, IntPtr planes)
    {
        Lock();
        _buff = Marshal.AllocHGlobal(_pitch * _height);
        Marshal.WriteIntPtr(planes, _buff);//初始化
        return IntPtr.Zero;
    }

   private void VideoDiplayCallBack(IntPtr opaque, IntPtr picture)
    {

    }

    //解锁图片缓冲区
    private void VideoUnlockCallBack(IntPtr opaque, IntPtr picture, IntPtr planes)
    {
        Marshal.FreeHGlobal(_buff);//释放缓冲区
        Unlock();
    }


    bool obj = false;
    private void Lock()
    {
        obj = true;
    }
    private void Unlock()
    {
        obj = false;
    }
    private bool Islock()
    {
        return obj;
    }

运行的时候,点击按钮后,会在VideoLockCallBack返回后报错,直接就不能运行了,帮忙看一下是什么原因,VLC版本位2.2.4

2个回答

String转IntPtr

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
vlc 使用libvlc_video_set_callbacks 回调函数获取视频中帧的图片报错
[code=c]rn#include rn#include "vlc/vlc.h"rn//#include rn//#include rn#include rn#include rn#include rn//#includern//#includernrnQMutex g_mutex;rn//bool g_isInit = false;rnint IMG_WIDTH = 640;rnint IMG_HEIGHT = 480;rnchar out_buffer[640 * 480 * 4];rnint frameNum = 0;rnrnstatic void *lock(void *data, void **p_pixels)rnrn tryrn rn g_mutex.lock();rn *p_pixels = out_buffer; /*tell VLC to put decoded data to this buffer*/rn return 0; /* picture identifier, not needed here */rn rn catch (const std::exception&)rn rnrn rnrnrn/*##get the argb picture AND save to file*/rnstatic void unlock(void *data, void *id, void *const *p_pixels)rnrn tryrn rn QImage image((unsigned char*)out_buffer, 640, 480, QImage::Format_ARGB32);rn std::ostringstream oss;rn oss << "d:/img"rn << frameNumrn << ".jpg";rn frameNum++;rn image.save(oss.str().c_str());rn g_mutex.unlock();rn rn catch (const std::exception&)rn rnrn rnrnrnstatic void display(void *data, void *id)rnrn /* do not display the video */rn (void)data;rnrnrnint main(int argc, char* argv[])rn rn libvlc_instance_t * inst;rn libvlc_media_player_t *mp;rn libvlc_media_t *m;rn rn libvlc_time_t length;rn int width;rn int height;rn int wait_time=5000;rn //libvlc_time_t length;rnrn /* Load the VLC engine */rn inst = libvlc_new (0, NULL);rn rn //Create a new itemrn m = libvlc_media_new_path(inst, "shipin.mp4");rn rnrnrn /* Create a media player playing environement */rn mp = libvlc_media_player_new_from_media (m);rnrn rn /* No need to keep the media now */rn libvlc_media_release (m);rn rn rn //取图片rn libvlc_video_set_callbacks(mp, lock, unlock, display, 0);rn libvlc_video_set_format(mp, "RGBA", IMG_WIDTH, IMG_HEIGHT, IMG_WIDTH * 4);rnrnrn // play the media_playerrn libvlc_media_player_play (mp);rnrnrnrn //wait until the tracks are createdrn _sleep (wait_time);rn length = libvlc_media_player_get_length(mp);rn width = libvlc_video_get_width(mp);rn height = libvlc_video_get_height(mp);rn printf("Stream Duration: %ds\n",length/1000);rn printf("Resolution: %d x %d\n",width,height);rn rn //Let it play rn _sleep (length-wait_time); rn rn // Stop playingrn libvlc_media_player_stop (mp);rn rn // Free the media_playerrn libvlc_media_player_release (mp);rn rn libvlc_release (inst);rn rn return 0;rn rnrn[/code]rnrn[img=https://img-bbs.csdn.net/upload/201710/26/1509000658_722184.png][/img]
C#编写的基于VLC的播放器
首先看一下最终的程序效果 实现的功能: 1:打开播放的音视频文件((1)菜单栏“文件”->“打开”,(2)工具栏(下面)“打开”(3)播放器右键->打开) 2:暂停,继续播放,停止音视频文件 3:进度条和右下角文本框显示播放进度 4:拖动进度条对视频定位播放 5:工具栏(下面)“快进”,“快退”均为5s 6:音量调节 7:菜单栏“文件”下可记录最近播放的三个文件 8:在有
VLC ------iOS中使用播放器
MobileVLCKit/MobileVLCKit.h 我在http://www.videolan.org/vlc/download-ios.html 上下载的为何总是缺少MobileVLCKit/MobileVLCKit.h 。终端集成 不太会有哪位高人详解一番 或者有直接使用的第三方库?在这谢谢了、、[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/3.gif][/img]
VLC播放器开发C#
C#语言开发,平台为VS2010,下载者可以从我的资源里下载plugins(不需要积分的)放在bin\debug目录下就可以运行了。
使用Directshow编写播放器
这个播放器的例子是陆其明的《Directshow开发指南》上的例子。自己整理了一下,免费分享
vlc源码精简后的播放器
vlc源码精简后的播放器,可支持大部分类型的视频格式,支持拖动/快进/后退/暂停播放,可以播放本地文件或者网络视频.只需要传递视频地址即可快速播放,简单易用,并且可以很快的提到自己的项目中,只需修改一个activity即可
VC++下使用vlc做播放器控件
刚进公司,老板就给了个巨大的任务,要我们用vlc播放器在VC++下做个播放器控件,在windows平台下做的,主要是那种监控类的播放控件,可以嵌入其他的地方
基于VLC的C#播放器源码
基于VLC的C#播放器源码
调用VLC实现的C#播放器
上次上传了一个vlc编译和接口的程序 大家抱怨分数要求高 今天把完整实现代码发给大家 一样5分 希望大家谅解
c#调用vlc 实现播放器
c#调用vlc 实现播放器,可以播放本地视频,也可以播放网络链接。参考数位大佬的代码集结而成。运行环境为vs2012+.net4.0
c#基于VLC的视频音频播放器
c#使用VLC开源库实现视频音频播放、可以选择文件夹导入播放列表播放、工程也包含调用axVLCPlugin2控件实现视频的播放,VLC资源版本3.0.2
C# 基于vlc的简单播放器
用vs2013做的winform小播放器,基于vlc的简单播放器,播放器的基本功能都有,学习还可以,仅供参考
vlc播放器源代码c#版
vlc播放器源代码c#版,可直接编译调用,实现基本的播放,暂停等功能。
C# Winform VLC如何使用
刚刚知道有VLC,所以想知道他的怎么引用工作的。如何实现全屏。还有c# winform 调用media player 可不可以实现画面全屏
C#版的VLC简单播放器
基于VLC的C#播放器源码 实现的功能: 1:打开播放的音视频文件((1)菜单栏“文件”->“打开”,(2)工具栏(下面)“打开”(3)播放器右键->打开) 2:暂停,继续播放,停止音视频文件 3:进度条和右下角文本框显示播放进度 4:拖动进度条对视频定位播放 5:工具栏(下面)“快进”,“快退”均为5s 6:音量调节 7:菜单栏“文件”下可记录最近播放的三个文件 8
【VLC播放器】android VLC播放器源码
【VLC播放器】android VLC播放器源码,不可用于商业用途,如有版权问题,请联系删除!
vlc播放器
介绍 vlc是一个跨平台的播放器,支持播放流媒体。 在Linux系统中,该播放器默认不支持以root用来启动。 安装 Ubuntu系列的系统:apt-get install vlc 启动 vlc suren.avi查看原文:http://surenpi.com/2015/10/10/vlc%e6%92%ad%e6%94%be%e5%99%a8/
VLC 播放器
vlc播放器示例 c#源码 适合初学者
vlc 播放器
ffmpeg convert video formats phpcms online version exec functionProcedures php... package jmfsample; import java.io.*; import javax.media.*; import javax..
使用HttpUtil.sendOkHttpRequest后无法回调。。
在按着《第一行代码》这本书里面最后开发天气的那个app里面,在使用到用rnHttpUtil.sendOkHttpRequest向服务器发送请求并将相应的数据回调到onResponse(),rn但是我在调试之后发现每次都是在rnHttpUtil.sendOkHttpRequest(address, new Callback() 之后就直接跳到最后了,跳过了rnonRespons()和onFailure(),想请问一下有可能是什么情况导致的,谢谢了~~rnrnrnrnrnrnprivate void queryFromServer(String address,final String type)rn showProgressDialog();rn HttpUtil.sendOkHttpRequest(address, new Callback() rn @Overridern public void onResponse(Call call, Response response) throws IOException rn String responseText = response.body().string();rn boolean result =false;rn if("province".equals(type))rn result = Utility.handleProvinceResponse(responseText);rn else if ("City".equals(type))rn result = Utility.handleCityResponse(responseText,selectedProvince.getId());rn else if ("county".equals(type))rn result = Utility.handleCountyResponse(responseText,selectedCity.getId());rn rn if(result)rn getActivity().runOnUiThread(new Runnable() rn @Overridern public void run() rn closeProgressDialog();rn if("province".equals(type))rn queryProvinces();rn else if ("city".equals(type))rn queryCities();rn else if ("County".equals(type))rn queryCounties();rn rn rn );rn rn rn rn public class HttpUtil rn public static void sendOkHttpRequest(String address,okhttp3.Callback callback)rn OkHttpClient client = new OkHttpClient();rn Request request = new Request.Builder().url(address).build();rn client.newCall(request).enqueue(callback);rn rnrnrn```rn rn```rnrn
VLC -- 使用VLC串流播放视频
VLC -- VLC串流播放视频方式 打开VLC后,在"媒体"菜单选择"流"选项,并添加一个即将要串流的视频文件: 然后点击串流按钮,进入如下页面: 该页面显示了一些基本信息,继续进行下一步: 在此页面,我们可以设置需要的串流协议,并设置要串流到的目的地址:在文件下拉菜单中,可以选择诸如HTTP/RTSP/UDP等支持的协议;点解"添加"项,
使用FMOD编写图形界面播放器
使用FMOD编写图形界面播放器,实现播放进度条,音量控制,循环播放及基本的音频播放控制按钮.
使用VB编写的MP3播放器
使用VB编写的MP3播放器,具有播放MP3 文件功能,可以调节音量
java + vlc播放器实现简单视频播放报错
vlc 下载地址:  http://download.videolan.org/pub/videolan/vlc/3.0.4/win64/ 修改缓存时间: String options[] = {&quot;--subsdec-encoding=GB18030&quot;, &quot;video-filter=motionblur&quot;, &quot;network-caching=100&quot;, &quot;no-plugins-cache&quot;,...
VLC和Qt结合编写流媒体rtsp播放器
VLC播放器是一款功能强大且小巧的播放器,它支持多种多样的音视频格式,比如MPEG1,2以及mp3等等。并且通过Qt和VLC的结合能让每个开发者写出自己的视频流媒体播放器。     Qt与VLC结合编写流媒体播放器主要有两种办法:       一. 通过VLC-Qt库     VLC-Qt库是基于libVlc的,后者是VLC 媒体的接口,开发者通过其可以开发出基于VLCMedia
C# 编写的播放器 简单播放器
简单的播放器 用C#编写的 播放各种格式的音频视频文件 自己写的按钮 多媒体
使用OpenDialog后的报错
只要是在使用了OpenDialog之后后,退出程序就会报错“Access violation at address 32665A01 in module 'CC3260MT.DLL'. Read of address F8FB3F38”rn如果用OpenDialog打开的对话框中,选择了文件,退出程序的时候就会报错;但是在打开的对话框中,没有选择任何文件就推出对话框,则退出程序正常。rn整个程序中只有一个地方用到OpenDialog,如下:rn[code=C/C++]void __fastcall TFormMain::BitBtnN_D7_D_OpenCheck(TObject *Sender)rnrn OpenDialog1->Title = "´ò¿ªxlsÎļþ";rn OpenDialog1->Execute();rnrn//---------------------------------------------------------------------------rnrnvoid __fastcall TFormMain::BitBtnN_D7_OpenMouseUp(TObject *Sender,rn TMouseButton Button, TShiftState Shift, int X, int Y)rnrn EditN_D7->Text = OpenDialog1->FileName;rn[/code]rn请问有谁知道这是什么原因造成的?谢谢!
VLC播放器和directshow类型播放器
我用VLC引出了一段已分流但未解码的视频流到一个0000文件中,然后用directshow播放器引出了同样的视频流到3.txt文件中,但是这两个文件我一比较竟然有些地方不一样,并且很有规律。。 有大神知道为什么吗?? 跪求原因。。。
回调的使用
应用场景 函数调用分直接调用和回调,那什么情况下会想要用回调呢? 工作线程中正在上传一个文件,而UI 线程想要将上传的进度实时显示到进度条中。这个时候我们希望工作线程每更新一次progressValue,UI线程便可以获取到progressValue并更新到进度条中。回调便可以实现这样的功能。(通过工作线程发消息给UI 线程也可以实现同样的功能) 回调的使用 回调其实就是函数指针,那么这句话到底是...
C#使用System.Data.SQLite.dll 报错
SQLite版本:从官网下载的32位bundle(.NET Framework 4.0)rn[img=https://img-bbs.csdn.net/upload/201410/28/1414430067_144940.jpg][/img]rn在本机上,数据库的连接等操作没有报任何错误,但是拿到XP上一运行,就出现上面的错误.rnrn相关的DLL我也一起复制到运行目录下了,也还是不行.rnrn本以为只有XP才会出现这个问题,结果今天拿到一台装了WIN7的系统下运行,也出现了和图上一样的错误!!!rnrn求大神解答!!!
提供c#编写的播放器
用C# 编写的播放器,包括四个屏幕,可以分别播放不同的电影,但不能显示声音
C#编写的播放器
音乐 视频播放器 功能多多 趣味多多 来吧
C#编写的播放器+XML
vs2005编写的一款媒体多功能播放器 方便实用
C#编写的播放器MediaPlay
C#编写的播放器MediaPlay,初学者可以看看
C#编写的MP3播放器
基于C#编写的一款MP3播放器,希望能给大家一个参考
C#编写MP3播放器
。NET+C#WINDOWS应用程序---MP3播放器
求c#编写播放器
不用使用Windows Media Player控件,这个不太好用,请问还有比较好用点的控件介绍一下给我行不!
c# 编写的播放器 功能强大
具有播放任意文件的播放器功能,画面清晰,对c# 初学者很有帮助
简易播放器C#编写的
用C#自己编写的一个播放器,用Microsoft.DirectX.AudioVideoPlayback.dll写的
C#编写的播放器源代码
以前练习编程的时候写的源代码,有兴趣的同学可以看看
相关热词 c# 线程结束时执行 c# kb mb 图片 c# 替换第几位字符 c#项目决定成败 c# 与matlab c# xml缩进 c#传感器基础 c#操作wps c# md5使用方法 c# 引用父窗口的组件