using Net.Media;
using System;
using System.IO;
using System.Runtime.InteropServices;
using UnityEngine;public class Test : MonoBehaviour
{//视频宽public int width = 1024;//视频高public int height = 768;public Texture2D texture;public Material mat;IntPtr libvlc_instance_t;IntPtr libvlc_media_player_t;IntPtr handle;private VideoLockCB _videoLockCB;private VideoUnlockCB _videoUnlockCB;private VideoDisplayCB _videoDisplayCB;private int _pixelBytes = 4;private int _pitch;private IntPtr _buff = IntPtr.Zero;bool ready = false;string snapShotpath;// Use this for initializationvoid Start(){Loom.Initialize();snapShotpath = "file:///" + Application.streamingAssetsPath;_videoLockCB += VideoLockCallBack;_videoUnlockCB += VideoUnlockCallBack;_videoDisplayCB += VideoDiplayCallBack;handle = new IntPtr(1);libvlc_instance_t = MediaPlayer.Create_Media_Instance();libvlc_media_player_t = MediaPlayer.Create_MediaPlayer(libvlc_instance_t, handle);//湖南卫视直播地址string videoPath = "rtmp://58.200.131.2:1935/livetv/hunantv";//本地视频地址//string videoPath = "file:///" + Application.streamingAssetsPath + "/test.mp4";bool state = MediaPlayer.SetLocation(libvlc_instance_t, libvlc_media_player_t, videoPath);Debug.Log("state:" + state);width = MediaPlayer.GetMediaWidth(libvlc_media_player_t);Debug.Log("width: " + width);height = MediaPlayer.GetMediaHeight(libvlc_media_player_t);Debug.Log("height: " + height);//网络地址不晓得怎么拿到视频宽高if(width==0&&height==0){width = 1024;height = 576;}_pitch = width * _pixelBytes;_buff = Marshal.AllocHGlobal(_pitch * height);texture = new Texture2D(width, height, TextureFormat.RGBA32, false);mat.mainTexture = texture;MediaPlayer.SetCallbacks(libvlc_media_player_t, _videoLockCB, _videoUnlockCB, _videoDisplayCB, IntPtr.Zero);MediaPlayer.SetFormart(libvlc_media_player_t, "ARGB", width, height, _pitch);ready = MediaPlayer.MediaPlayer_Play(libvlc_media_player_t);Debug.Log("ready:" + ready);Debug.Log(MediaPlayer.MediaPlayer_IsPlaying(libvlc_media_player_t));}// Update is called once per framevoid Update(){}private void FixedUpdate(){}private void OnGUI(){if (GUI.Button(new Rect(0, 0, 100, 100), "Take")){Debug.Log("snapShotpath:" + snapShotpath);Debug.Log("@snapShotpath:" + @snapShotpath);//vlc截图未解决 用Unity保存帧图,画面是上下反转左右反转的//Debug.Log(MediaPlayer.TakeSnapShot(libvlc_media_player_t, snapShotpath, "testa.jpg", width, height));byte[] bs = texture.EncodeToJPG();File.WriteAllBytes(Application.streamingAssetsPath + "/test.jpg", bs);}}private IntPtr VideoLockCallBack(IntPtr opaque, IntPtr planes){Lock(); Marshal.WriteIntPtr(planes, 0, _buff);Loom.QueueOnMainThread(() =>{texture.LoadRawTextureData(_buff, _buff.ToInt32());texture.Apply();});return IntPtr.Zero;}private void VideoDiplayCallBack(IntPtr opaque, IntPtr picture){ }private void VideoUnlockCallBack(IntPtr opaque, IntPtr picture, IntPtr planes){ Unlock();}bool obj = false;private void Lock(){obj = true;}private void Unlock(){obj = false;}private bool Islock(){return obj;}private void OnDestroy(){}private void OnApplicationFocus(bool focus){}private void OnApplicationQuit(){try{if (MediaPlayer.MediaPlayer_IsPlaying(libvlc_media_player_t)){MediaPlayer.MediaPlayer_Stop(libvlc_media_player_t);}MediaPlayer.Release_MediaPlayer(libvlc_media_player_t);MediaPlayer.Release_Media_Instance(libvlc_instance_t); }catch (Exception e){Debug.Log(e.Message);}}
}

工程地址https://gitee.com/awnuxcvbn/UnityVLC

基于VLC的Unity视频播放器(二)相关推荐

  1. 基于VLC的本地视频播放器

    这两天利用Vlc.DotNet.Forms做了一个WinForm版本的本地视频文件播放器,可以实现文件播放.暂停.进度条拖拽.截图功能,在这里做一个简单的记录. 使用工具:VS2019 , VLC 3 ...

  2. QT应用编程:基于VLC开发音视频播放器(句柄方式)

    一.环境介绍 操作系统: win10 64位 QT版本:  QT5.12.6 编译器:  MinGW 32 VLC版本: 3.0.12 功能说明:  下面的播放器例子支持基本播放器的功能. 1.  支 ...

  3. QT应用编程:基于VLC开发音视频播放器(回调方式)

    一.环境介绍 操作系统: win10 64位 QT版本:  QT5.12.6 编译器:  MinGW 32 VLC版本: 3.0.12 完整项目代码下载地址:  https://download.cs ...

  4. 关于Unity视频播放器插件 AVPro Video(二)3D物体上视频播放

    1.官网下载该插件或者我分享的链接: 链接:https://pan.baidu.com/s/1boGeJ8r 密码:mvbf 2.新建项目创建主要控制物体 3.创建对于视频播放在3D物体身上的材质 4 ...

  5. 基于Django框架的视频播放器设计

    基于Django框架的视频播放器设计 前言 一.简介 二.详细实现步骤 1.路由配置 2.后台代码设计(对云盘接口的访问) 3.后台代码设计(流式视频传输) 4.前端功能设计(视频播放列表) 5.前端 ...

  6. 【基于QMediaPlayer的简易视频播放器】— 3、结合QSlider实现播放进度控制和音量控制

    基于QMediaPlayer的简易视频播放器 1.创建基本布局 2.QMediaPlayer的基本使用 3.结合QSlider实现播放进度控制和音量控制 4.重载QSlider鼠标响应事件,实现单击跳 ...

  7. 《基于 FFmpeg + SDL 的视频播放器的制作》课程的视频

    这两天开始带广播电视工程大二的暑假小学期的课程设计了.本次小学期课程内容为<基于 FFmpeg + SDL 的视频播放器的制作>,其中主要讲述了视音频开发的入门知识.由于感觉本课程的内容不 ...

  8. 基于 FFmpeg SDL 的视频播放器的制作 课程的视频

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 这两天开 ...

  9. 基于 FFmpeg 的跨平台视频播放器简明教程(四):像素格式与格式转换

    系列文章目录 基于 FFmpeg 的跨平台视频播放器简明教程(一):FFMPEG + Conan 环境集成 基于 FFmpeg 的跨平台视频播放器简明教程(二):基础知识和解封装(demux) 基于 ...

最新文章

  1. visual studio 2008 快捷键
  2. The Excel Connection Manager is not supported in the 64-bit version of SSIS, as no OLE DB provider i
  3. python数据结构基础知识点二分查找
  4. vs2012中VC连接mysql
  5. java seconds_Java LocalTime minusSeconds()用法及代码示例
  6. Linux简单命令集——head
  7. 快速修剪技巧_20个相见恨晚的CAD画图神技巧,让你效率飞升!
  8. mysql读写分离java配置方法_springboot配置数据库读写分离
  9. 想交换机高级篇的朋友们,你们有福啦
  10. 将windows项目移植到linux上
  11. linux ssh升级回退,Linux-SSH升级及回退方案
  12. tftp: timeout
  13. python微信所有代码_只需7行Python代码玩转微信自动聊天
  14. 金蝶K3 webservice接口
  15. VirtualBox虚拟机安装MSDOS和MINIX2.0.0双系统
  16. arm开发板无法使用dns解析问题
  17. 小米 2015 北京 研发面试
  18. qcloud-ocr
  19. 请求通道在等待 00:00:58.9616639 以后答复时超时。增加传递给请求调用的超时值,或者增加绑定上的 SendTimeout 值。分配给此操作的时间可能是更长超时的一部分。...
  20. unity光照烘焙怎么弄

热门文章

  1. [附源码]计算机毕业设计基于springboot在线影院系统
  2. shell脚本编程基础(一)
  3. c语言实验--字符编码,费诺编码的C语言实现实验论文.doc
  4. mysql 虚拟数据库_虚拟mysqli数据库
  5. 读写U盘(FAT32)引导扇区
  6. 白话介绍kubernetes为什么不支持docker了
  7. MQTT QOS等级订阅和发布的关系
  8. 模拟实现strstr函数,通俗易懂!!!
  9. 带传动计算机辅助测试系统,基于VisualBasic的V型带传动计算机辅助设计
  10. wait()和sleep()的区别