首先在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 解析视频流数据相关推荐

  1. unity解析json 数据

    1.使用JsonUtility解析 JsonUtility是unity自带的解析json的工具. 1.1具体使用创建一个解释数据的对象类 需要注意的是需要将每一个方法序列化,使用[System.Ser ...

  2. Unity解析OpenDRIVE地图数据,并生成路网模型

    文章目录 一.引言 二.OpenDrive概述 三.OpenDrive重要节点介绍 1.建模用到的主要节点及属性 2.geometry节点 3.lane的width节点 四.根据解析得到的数据创建道路 ...

  3. 【Unity】解析Excel数据,并自动创建对应的C#类

    升级版传送门: [Unity]升级版·Excel数据解析,自动创建对应C#类,自动创建ScriptableObject生成类,自动序列化Asset文件_萧然CS的博客-CSDN博客Excel注释操作: ...

  4. Android Camera设置setPreviewCallback实现onPreviewFrame接口实时截取每一帧视频流数据

    1 概述 通过Android Camera拍摄预览中设置setPreviewCallback实现onPreviewFrame接口,实时截取每一帧视频流数据 2 知识点 ① Android Camera ...

  5. 深入分析jquery解析json数据

    我们先以解析上例中的comments对象的JSON数据为例,然后再小结jQuery中解析JSON数据的方法. JSON数据如下,是一个嵌套JSON: {"comments":[{& ...

  6. pandas使用read_csv函数读取文件并解析日期数据列(parse dates)、pandas使用read_csv函数读取文件并将缺失值转化为空字符串

    pandas使用read_csv函数读取文件并解析日期数据列(parse dates).pandas使用read_csv函数读取文件并将缺失值转化为空字符串 目录

  7. java构造和解析json_Java构造和解析Json数据的两种方法详解一

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...

  8. JQuery解析JSON数据

    <script src="http://cdn.static.runoob.com/libs/jquery/1.8.3/jquery.js"></script&g ...

  9. Gson解析JSON数据中动态未知字段key的方法

    转载自:https://blog.csdn.net/jdsjlzx/article/details/76785239 有时在解析json数据中的字段key是动态可变的时候,由于Gson是使用静态注解的 ...

最新文章

  1. Oracle 小知识点
  2. 什么是android刷机包,什么是安卓RAM?安卓RAM和安卓ROM有什么区别?
  3. 可遇不可求的BUG之采用MYSQL odbc 3.51访问数据库返回值缺失
  4. Linux环境变量的修改(永久,暂时)
  5. 【Python之路Day12】网络篇之Python操作RabbitMQ
  6. 面向手绘图形,涵盖多个主题,CVPR 2022 SketchDL Workshop开始征稿!
  7. ios--小结系列六
  8. 10份数据中台资料分享(附下载)
  9. 一款用来下载pdf word zip img各种文件的js插件
  10. Android 外网远程连接真机进行开发调试
  11. 如何找到WIN10自带桌面背景图,看这里就够了,系统自带背景图怎么找到存放在哪里
  12. edge里bing必应搜索不了解决办法
  13. 动词记忆(1):ate,ify,ish后缀常用词
  14. js 实现简单todo效果
  15. Mac打包dmg文件(更换背景图)
  16. VS Code下搭建开发51单片机的环境(基于Embedded IDE)
  17. 十大管理之采购管理知识点
  18. Bandwagon centos 6 32位配置SVN,apache,mysql和php
  19. 2019年宁波顶岗实习
  20. 旅游景区游玩管理系统

热门文章

  1. 中科院谭铁牛爱徒研发出《碟中谍5》中的步态识别技术,不看脸50米内在人群中认出你
  2. Unity3D之SQLite的使用
  3. XStream分析(2)
  4. 标准分幅地图-选择比例尺
  5. IdeaUI快捷键注释不在行首
  6. 未来广播电视新技术的发展和应用
  7. 《JavaScript DOM 编程艺术》读书笔记
  8. 计算机工作原理采用科学家,课件:揭秘计算机工作原理.ppt
  9. 专访|单月 GMV 破千万,5800 万用户,樊登读书视频生态解读
  10. Python将多张2D TIFF图片转为一个3D TIFF文件