Unity 解析视频流数据
首先在AndroidStudio中将数据转换为yuv图片数据,然后传到Unity,Unity解析Yuv图片数据并显示
MediaCodec mCodec = MediaCodec.createDecoderByType("video/avc"); final MediaFormat mediaformat = MediaFormat.createVideoFormat("video/avc", VIDEO_WIDTH, VIDEO_HEIGHT); mediaformat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Flexible); mCodec.configure(mediaformat, null,null, 0);
初始化MediaCodec,然后启动一个线程获取数据,保证数据是一帧的完整数据
然后调用queueInputBuffer,把数据传给MediaCodec。
MediaCodec.BufferInfo info = new MediaCodec.BufferInfo(); long timeoutUs = 1000; int outIndex = mCodec.dequeueOutputBuffer(info, timeoutUs);if (outIndex >= 0) {Image image = mCodec.getOutputImage(outIndex);ByteBuffer buffer = image.getPlanes()[0].getBuffer();ByteBuffer buffer1 = image.getPlanes()[1].getBuffer();byte[] arr = new byte[buffer.remaining()];byte[] arr1 = new byte[buffer1.remaining()];buffer.get(arr);buffer1.get(arr1);image.close();mCodec.releaseOutputBuffer(outIndex, 0);_callBack.JavaObjectCallBack(new _byteArrydata(arr, arr1)); }
获取MediaCodec输出数据,获取输出Image,Image有3个plane,存放了Yuv的数据,根据不同格式解析不一样。
我这里第二个和第三个plane数据是相同的,只是有一个错位,就是uv数据交叉储存的。所有直需要传给Unity2个数据
Texture2D texture_image = new Texture2D(1920, 1080, TextureFormat.Alpha8, false);
Texture2D texture_imageuv = new Texture2D(1920 / 2, 1080 / 2, TextureFormat.RGBA4444, false);
Unity获取到数据,初始化两个Texture2D,Y的图片的尺寸就是屏幕尺寸,uv的是它的1/4.
Y的数据是一个byte储存一个像素,uv数据是两个byte储存一个像素。
然后通过LoadRawTextureData加载数据,然后把图片赋值给材质球。
需要在shader中解析两张图片,获取到yuv分别的值,然后在转成rgb,显示
half2 uv = i.uv;
uv.y = 1 - uv.y;
fixed4 color1 = tex2D(_MainTex, uv);
fixed4 color2 = tex2D(_MainTexUV, uv);
float y = 1.1643 * (color1.a - 0.0625);
float u = (color2.r * 15 * 16 + color2.g * 15) / 255 - 0.5;
float v = (color2.b * 15 * 16 + color2.a * 15) / 255 - 0.5;
float r = y + 1.403 * v;
float g = y - 0.344 * u - 0.714 * v;
float b = y + 1.770 * u;
return float4(b, g, r, 1);
因为没去理解具体的计算,所以我只是在网上找了一个计算公式,但是最后结果通过rgb显示不对,所以我改成了bgr。uv要改一下,因为图片是反的。
Unity 解析视频流数据相关推荐
- unity解析json 数据
1.使用JsonUtility解析 JsonUtility是unity自带的解析json的工具. 1.1具体使用创建一个解释数据的对象类 需要注意的是需要将每一个方法序列化,使用[System.Ser ...
- Unity解析OpenDRIVE地图数据,并生成路网模型
文章目录 一.引言 二.OpenDrive概述 三.OpenDrive重要节点介绍 1.建模用到的主要节点及属性 2.geometry节点 3.lane的width节点 四.根据解析得到的数据创建道路 ...
- 【Unity】解析Excel数据,并自动创建对应的C#类
升级版传送门: [Unity]升级版·Excel数据解析,自动创建对应C#类,自动创建ScriptableObject生成类,自动序列化Asset文件_萧然CS的博客-CSDN博客Excel注释操作: ...
- Android Camera设置setPreviewCallback实现onPreviewFrame接口实时截取每一帧视频流数据
1 概述 通过Android Camera拍摄预览中设置setPreviewCallback实现onPreviewFrame接口,实时截取每一帧视频流数据 2 知识点 ① Android Camera ...
- 深入分析jquery解析json数据
我们先以解析上例中的comments对象的JSON数据为例,然后再小结jQuery中解析JSON数据的方法. JSON数据如下,是一个嵌套JSON: {"comments":[{& ...
- pandas使用read_csv函数读取文件并解析日期数据列(parse dates)、pandas使用read_csv函数读取文件并将缺失值转化为空字符串
pandas使用read_csv函数读取文件并解析日期数据列(parse dates).pandas使用read_csv函数读取文件并将缺失值转化为空字符串 目录
- java构造和解析json_Java构造和解析Json数据的两种方法详解一
在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...
- JQuery解析JSON数据
<script src="http://cdn.static.runoob.com/libs/jquery/1.8.3/jquery.js"></script&g ...
- Gson解析JSON数据中动态未知字段key的方法
转载自:https://blog.csdn.net/jdsjlzx/article/details/76785239 有时在解析json数据中的字段key是动态可变的时候,由于Gson是使用静态注解的 ...
最新文章
- Oracle 小知识点
- 什么是android刷机包,什么是安卓RAM?安卓RAM和安卓ROM有什么区别?
- 可遇不可求的BUG之采用MYSQL odbc 3.51访问数据库返回值缺失
- Linux环境变量的修改(永久,暂时)
- 【Python之路Day12】网络篇之Python操作RabbitMQ
- 面向手绘图形,涵盖多个主题,CVPR 2022 SketchDL Workshop开始征稿!
- ios--小结系列六
- 10份数据中台资料分享(附下载)
- 一款用来下载pdf word zip img各种文件的js插件
- Android 外网远程连接真机进行开发调试
- 如何找到WIN10自带桌面背景图,看这里就够了,系统自带背景图怎么找到存放在哪里
- edge里bing必应搜索不了解决办法
- 动词记忆(1):ate,ify,ish后缀常用词
- js 实现简单todo效果
- Mac打包dmg文件(更换背景图)
- VS Code下搭建开发51单片机的环境(基于Embedded IDE)
- 十大管理之采购管理知识点
- Bandwagon centos 6 32位配置SVN,apache,mysql和php
- 2019年宁波顶岗实习
- 旅游景区游玩管理系统