unity 中播放视频

Unity视频播放有很多种实现方式,可根据要求来选择适当的实现,这里总结一下:
1. MovieTexture
Unity标准接口,支持的播放视频格式有.mov、.mpg、.mpeg、.mp4、.avi和.asf。仅支持PC端的本地视频播放。
1. 在游戏对象中播放,就好比在游戏世界中创建一个Plane面对象,摄像机直直的照射在这个面上
在新建的一个plane平面,将其纹理绑定为电影纹理即可
//设置当前对象的主纹理为电影纹理
renderer.material.mainTexture = movTexture;
//设置电影纹理播放模式为循环
movTexture.loop = true;
并可通过
movTexture.Play();
movTexture.Pause();
movTexture.Stop();
来进行播放控制。
此时可以通过直接缩放plane平面来达到缩放视频的目的
至于MovieTexture的赋值,在5.0x版本上是无法通过将视频拖入Project视频来自动造成纹理的。

2. 在GUI层面播放。它其实和贴图非常相像,因为播放视频用到的MovieTexture属于贴图Texture的子类。
//绘制电影纹理
GUI.DrawTexture(newRect(0,0, Screen.width,Screen.height),movTexture,ScaleMode.StretchToFill);
播放视频的大小是屏幕的宽高,如果想动态的修改视频的宽或高直接修改new Rect()视频显示区域即可
2. Handheld.PlayFullScreenMovie
Unity标准的视频播放接口,支持的播放视频格式有.mov、.mpg、.mpeg、.mp4、.avi和.asf。支持PC/移动端播放,支持本地在线播放
url_movie = "http://dl.nbrom.cn/17051/c3e408229342723fbdf62d0bcf1d549c.mp4?fsname=Criminal_Minds_S01E01.mp4";
Handheld.PlayFullScreenMovie(url_movie, Color.black, FullScreenMovieControlMode.Full);
Handheld.PlayFullScreenMovie("test.mp4", Color.black, FullScreenMovieControlMode.CancelOnInput);
将视频文件放置在Assets/StreamingAssets/路径下
上面的方法在移动端是边下载边播放网络视频的,属于在线播放,不好的地方就是,再次观看还需要再次加载。可能在播放的时候判断是否已下载到本地如果在本地就可以播放本地,如果没有再从网上下载到本地
3. EasyMovieTexture
Unity移动端第三方视频播放插件,支持视频本地播放,支持RTSP。
1>. 初始化加载,该部分主要在Unity中将播放视频的地址(本地/URL)传送到Android,并完成MediaPlayer的初始化
2>. Android创建一个Surface,并将其与之前创建的MediaPlayer绑定
3>. 结合视频绘制载体计算图像拉伸比
4>. 根据视频宽高比创建VideoTexture并传到Android与
m_VideoTexture = new Texture2D(Call_GetVideoWidth(), Call_GetVideoHeight(), TextureFormat.RGB565, false);
Call_SetUnityTexture(m_VideoTexture.GetNativeTextureID());
5>. 设置视频窗口,完成TextureId与surface的绑定
SetWindowSize(GetVideoWidth(),GetVideoHeight(),m_iUnityTextureID ,m_bRockchip);
6>. 更新纹理
Call_UpdateVideoTexture();
m_SurfaceTexture.updateTexImage();
7>. 播放视频
使用MediaPlayer播放视频
4. MediaPlayer + SurfaceTexture
播放组件上层使用MediaPlayer来处理,在成功创建并设置好setDataSource后,需要创建GL_TEXTURE_EXTERNAL_OES格式的纹理ID来与MediaPlayer生成联系。
在这里我们需要使用SurfaceTexture的理由是,它能代替SurfaceHolder,使得当我们指定图像流的输出目标为照相机预览或视频解码时,我们在每一帧中得到的所有数据不需要直接用于显示在设备上,而是可以选择先输出到SurfaceTexture上,在上屏之前可能做一些自定义扩展。当调用updateTexImage()时,用来创建SurfaceTexture的纹理对象内容被更新为包含图像流中最近的图片。
SurfaceTexture对象可以在任何线程里创建。但updateTexImage()只能在包含纹理对象的OpenGL ES上下文所在的线程里创建。可以得到帧信息的回调可以在任何线程被调用。这一点要注意,上下文如果不一致,视频无法上屏。
这里还有个要求就是在创建纹理的时候,需要使用使用GL_TEXTURE_EXTERNAL_OES作为纹理目标,其是OpenGL ES扩展GL_OES_EGL_image_external定义的。这种纹理目标会对纹理的使用方式造成一些限制。每次纹理绑定的时候,都要绑定到GL_TEXTURE_EXTERNAL_OES,而不是GL_TEXTURE_2D。而且,任何需要从纹理中采样的OpenGL ES 2.0 shader都需要声明其对此扩展的使用,例如,使用指令”#extension GL_OES_EGL_image_external:require”。这些shader也必须使用samplerExternalOES采样方式来访问纹理。

原文地址:https://www.cnblogs.com/wang-jin-fu/p/8277840.html

时间: 2024-07-30 03:36:01

unity 中播放视频的相关文章

在Winform中播放视频等【DotNet,C#】

在项目中遇到过这样的问题,就是如何在Winform中播放视频.当时考察了几种方式,第一种是直接使用Windows Media Player组件,这种最简单:第二种是利用DirectX直接在窗体或者控件上绘图,这种比较复杂.于是采用的是第一种方法. 先从VS的工具箱里添加Windows Media Player组件,方式是打开工具箱,在最下面的空白处点击右键,选择项,然后在弹出的对话框里切换到Com组件标签项,找到“Windows Media Player”项并选中,确定后将在工具箱中看到多出一个

Html5之高级-4 HTML5视频处理(H5中播放视频、编程实现视频播放器)

一.在 HTML5 中播放视频 在 HTML5 中播放视频 - HTML5 中提到最多的是视频处理,视频也是互联网中的重要应用.在HTML5中,增加了一个元素,以便在HTML文档中插入和播放视频,这个元素就是video元素 - video元素提供了播放.暂停和音量控件来控制视频,也提供了width和height属性控制视频的尺寸.如设置的高度和宽度等. - 使用video元素至少要提供两种视频格式的文件: OGG和MP4 - OGG: 包含Theora 视频和 Vorbis 音频解码器 - MP

Unity中播放带有alpha通道格式为Mp4的视频

问题: Unity中实现播放透明的MP4视频时出现黑点 解决办法:    使用Unity自带的shader去除黑点 1:shader代码如下所示 Shader "Unlit/NewUnlitShader" { Properties { _Color("Color", Color) = (1,1,1,1) //_MainTex ("Albedo (RGB)", 2D) = "white" {} _AlphaVideo("

用flvplayer.swf在网页中播放视频(网页中flash视频播放的实现)

由于公司项目的需求,需要在展示一些信息的时候能够播放视频,拿到这个要求,我就从最简单的媒体播放标签<embed>开始,虽然这个标签确实可以播放事情,但是只能部分浏览器支持,个人感到很郁闷,要是所有浏览器都统一的话,这个问题就很好解决了.后面就追寻插件的解决方案,首先尝试了下media player,用这个插件视频时可以播放,但是只能在ie下播放,还有一切其他插件用起来比较麻烦,在这个就不细说了. 后来想像优酷等视频网站一样用flash来播放视频(这确实是一个比较合理的方案,flash用户超多)

webView中播放视频时自动旋转

在实际生活应用中,我们希望用户在点击视频时一打开的时候就自动全屏播放,达到更加绚丽的视觉体验效果: ****** Appdelegate.h ** 类中***** #import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDelegate> @property (strong, nonatomic) UIWindow *window; @property(nonatomic,assign)B

如何在Ubuntu QML应用中播放视频

在这篇文章中,我们将介绍如何在Ubuntu QML应用中播放一个视频.为了实现方便,我们可以事先用手机录下一个视频,并置于我们已经创建好的项目中. 首先,我们利用Ubuntu SDK来创建一个"QML app with Simple UI (qmake)"的项目.我们修改我们的Main.qml文件如下: import QtQuick 2.0 import Ubuntu.Components 1.1 import QtMultimedia 5.0 /*! \brief MainView

轮播图中播放视频 兼容处理

{"isShowVideo":"1","videolist":[ {"desc":"000","url":"images/video.mp4","img":"images/image1.png"}, {"desc":"00","url":"",&qu

1.QT中播放视频,录音程序的编写

 1  通过process的方式播放视频 T22VideoPlayer.pro HEADERS += \ MyWidget.h SOURCES += \ MyWidget.cpp QT += gui widgets MyWidget.h #ifndef MYWIDGET_H #define MYWIDGET_H   #include <QWidget> #include <QProcess> #include <QSlider>   class MyWidget :

android SurfaceView中播放视频 按视频的原始比例播放

OnPreparedListener mediaPlayerOnPreparedListener = new OnPreparedListener() { @Override public void onPrepared(MediaPlayer arg0) { // 首先取得video的宽和高 int vWidth = mediaPlayer.getVideoWidth(); int vHeight = mediaPlayer.getVideoHeight(); // 该LinearLayout