【音视频安卓开发 (六)】Android GLSurfaceView播放视频

 GLSurfaceView渲染RGB的数据,利用双缓冲空间机制。取出缓冲地址,将要渲染的数据copy到缓冲地址.

获取Surface

 

Java部分:

SurfaceView控件设置到界面中显示

SurfaceView定义一个类来实现

package com.example.hello;import android.content.Context;
import android.opengl.GLSurfaceView;
import android.util.AttributeSet;
import android.view.SurfaceHolder;import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;public class Xpaly extends GLSurfaceView implements Runnable, SurfaceHolder.Callback {public Xpaly(Context context , AttributeSet attrs) {super(context);}@Overridepublic void run() {Open("/sdcard/Pictures/Rc.mp4",getHolder().getSurface());}@Overridepublic void surfaceCreated(SurfaceHolder var1){}@Overridepublic void surfaceChanged(SurfaceHolder var1, int var2, int var3, int var4){new Thread(this).start();}@Overridepublic void surfaceDestroyed(SurfaceHolder var1){}public native void Open(String url_,Object surface);}

实现SurfaceView Callback

 

 

需要android的库和头文件

#include <android/native_window.h>
#include <android/native_window_jni.h>

 

 

C++ 部分

    //显示窗口初始化ANativeWindow *nwin = ANativeWindow_fromSurface(env,surface);int outWidth=vc->width;int outHeight=vc->height;//设置native window的buffer大小,可自动拉伸ANativeWindow_setBuffersGeometry(nwin,outWidth,outHeight,WINDOW_FORMAT_RGBA_8888);ANativeWindow_Buffer wbuf;//锁定窗口,取出空间ANativeWindow_lock(nwin,&wbuf,0);//取缓冲区地址uint8_t *dst = (uint8_t*)wbuf.bits;//数据拷贝到缓冲区中memcpy(dst,rgb,outWidth*outHeight*4);//解锁窗口空间ANativeWindow_unlockAndPost(nwin);

 

 

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/336292.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是openstack_您在OpenStack Summit 2016上错过了什么

什么是openstack今年&#xff0c;我第一次参加了4月25日至29日在德克萨斯州奥斯汀举行的OpenStack峰会。 今天结束了&#xff0c;我要回家了&#xff0c;我想回顾一下&#xff0c;从我的角度分享你错过的事情。 作为以应用程序开发人员为重点的技术传播者&#xff0c;转移到包…

python链表实现栈_使用python实现数组、链表、队列、栈

引言 什么是数据结构&#xff1f; 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。 简单来说&#xff0c;数据结构就是设计数据以何种方式组织并存储在计算机中。 比如&#xff1a;列表&#xff0c;集合和字典等都是数据结构 N.W…

笛卡尔乘积c语言代码,c# – 高效笛卡尔乘积算法

有人可以向我证明比目前使用的笛卡儿乘积算法更有效(假设有一个)。我已经看了周围的SO和谷歌&#xff0c;但看不到任何明显的东西&#xff0c;所以我可能会缺少一些东西。foreach (int i in is) {foreach (int j in js) {//Pair i and j}}这是我在代码中做的非常简化的版本。两…

【音视频安卓开发 (七)】安卓视频播放窗口去掉标题栏、全屏、横屏

java中的MainActivity初始化部分设置这些操作 //去掉标题栏supportRequestWindowFeature( Window.FEATURE_NO_TITLE);//全屏&#xff0c;隐藏状态getWindow().setFlags( WindowManager.LayoutParams.FLAG_FULLSCREEN ,WindowManager.LayoutParams.FLAG_FULLSCREEN);//屏幕为横屏…

drools6.5_Drools 6.4.0.Final提供

drools6.5最新和最出色的Drools 6.4.0.Final版本现已可供下载。 这是我们先前构建的增量版本&#xff0c;对核心引擎和Web工作台进行了一些改进。 您可以在此处找到更多详细信息&#xff0c;下载和文档&#xff1a; Drools网站 资料下载 文献资料 发行说明 请阅读下面的…

python 统计组合用什么库_Python机器学习需要用到的库

www.oldboyedu.com 老男孩 IT 教育&#xff0c;只培养技术精英 Python 机器学习需要用到的库 Python 是一种面向对象的解释型计算机程序设计语言&#xff0c;具有丰富和强大的 库&#xff0c;再加上其简单、易学、速度快、开源免费、可移植性、可扩展性以及面向对 象的特点&…

c语言编程数学黑洞,一个数学黑洞——6174

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼/*问题描述&#xff1a;从0-9中任意选取4个不完全相同的数比如&#xff0c;不能是5 5 5 5&#xff0c;可以是1 2 2 2用这4个数排列出最大的数&#xff0c;2221&#xff0c;最小的数1222最大减最小&#xff1a;2221-12220999用0 9 9…

【音视频安卓开发 (八)】OpenSLES播放音频步骤和接口讲解

OpenSLES是安卓内部的音频播放和录音 初始化引擎 创建输出设备 配置PCM格式信息 初始化播放器 播放和缓冲队列 本文开源项目下载

kata_FizzBu​​zz Kata与Java流

kata在柔道练习仅几周之后&#xff0c;我的儿子感到无聊。 他抱怨说自己没有学任何东西&#xff0c;因为他一遍又一遍地做着同样的事情。 混淆学习和做新事物的不仅是幼儿。 例如&#xff0c;有多少软件开发人员通过执行kata或参加dojos来进行刻意练习的麻烦&#xff1f; 重复…

python中if语句的实例_对python中if语句的真假判断实例详解

说明 在python中&#xff0c;if作为条件语句&#xff0c;当if后面的条件参数为真时&#xff0c;则执行后面的语句块&#xff0c;反之跳过&#xff0c;为了深入理解if语句&#xff0c;我们需要知道if语句的真假判断方式。 示例 在python交互器中&#xff0c;经过测试发现以下条件…

ds18b20c语言显示小数位,DS18B20多点测温(读序列,匹配序列,51单片机C程序,1602显示)...

DS18B20多点测温(读序列&#xff0c;匹配序列&#xff0c;51 C程序&#xff0c;1602显示)程序一&#xff1a;单个读序列号。程序二&#xff0c;匹配并且读两个DS18B20&#xff0c;当然&#xff0c;读多个与读两个基本原理一样&#xff0c;只要加上其序列号等即可。本程序所有显…

【WebRTC---入门篇】(五)Web服务器原理与Nodejs搭建

Web服务器工作原理 Nodejs工作原理 首先自己开发的APPLICATION(自己开发的JS程序)输出给V8引擎,解析后的二进制文件调用NODE API,然后调用LIBUV事件处理库(插入到事件队列,在队列中不断循环处理事件)。 JavaScript解析 V8引擎先收到JS程序,解析生成JS语法树,通过解析器…

代理模式和动态代理模式_代理模式介绍

代理模式和动态代理模式代表&#xff1a;被选中或当选为他人投票或代理的人– Merriam-Webster 。 委托模式&#xff1a;在软件工程中&#xff0c;委托模式是面向对象编程中的一种设计模式&#xff0c;其中&#xff0c;一个对象而不是执行其陈述的任务之一&#xff0c;而是将该…

【WebRTC---入门篇】(六)JavaScript基础

变量与类型 var与let的区别&#xff0c;var局部变量&#xff1b;let全局变量 函数

javaio流层次结构_流的多层次分组

javaio流层次结构1.简介 使用Java 8流&#xff0c;可以很容易地根据不同的标准对对象集合进行分组。 在这篇文章中&#xff0c;我们将看到如何从简单的单级分组到更复杂的&#xff0c;涉及多个级分组的分组。 我们将使用两个类来表示我们要分组的对象&#xff1a;人和宠物。 …

【开源项目----Android OPenGLES渲染YUV视频文件】

【开源项目----Android OPenGLES渲染YUV视频文件】 OpenGLES对YUV渲染相关文章参考

大型程序是如何开发的_大型小程序如何研发提效

作者:王梦君微信公众号:滴滴顺风车技术出处:https://mp.weixin.qq.com/s/M1VArJ_ORY-eXSKzD6ysQw导读&#xff1a;自2016年小程序诞生以来&#xff0c;小程序以其“用完即走”的设计理念&#xff0c;以及简单易上手的开发模式&#xff0c;吸引了大批的小程序使用者以及开发者&a…

c 语言栈,C语言栈

C语言实现简单的栈结构今天看到一个问题是要交换两个变量的值并且不能使用中间变量&#xff0c;首先想到的方法就是用数学的方法&#xff1a;int a 10,b 12;a a b; // 求和b a - b; // 和减去b得到的是a的值a a - b; // 和减去a(此时的b是最初a的值)得到b 的值这种方法很…

【WebRTC---入门篇】(七)MediaStream

MediaStream方法 MediaStream.addTrack( ) 功能&#xff1a;向流媒体中加入不同的轨 MediaStream.removeTrack( ) 功能&#xff1a;从流媒体中移除不同的轨 MediaStream.getVideoTracks( ) 功能&#xff1a;从流媒体中取出所有的视频轨 MediaStream.getAudioTracks( …

jvm 宕机 打印jvm_通过入侵JVM打印阵列

jvm 宕机 打印jvm总览 Java中最常见的陷阱之一就是知道如何打印数组。 如果有关如何打印阵列的答案获得了超过1000票赞成票&#xff0c;那么您必须怀疑是否有更简单的方法。 几乎所有其他流行语言都具有这种更简单的方法&#xff0c;所以我不清楚为什么Java仍会这样做。 与其他…