TextureView/SurfaceView/GLSurfaceView/VideoView渲染视频(点播播放器)
Posted 邓文(desaco)
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TextureView/SurfaceView/GLSurfaceView/VideoView渲染视频(点播播放器)相关的知识,希望对你有一定的参考价值。
OpenGL实现视频的剪裁、旋转、水印、滤镜?? 将 ffmpeg 库移植到 android 平台?
在播放网络上的视频流时,Android原生的MediaPlayer支持两种协议,HTTP和RTSP,这两种协议最大的不同是,RTSP协议支持实时流媒体的播放,而HTTP协议不支持。因为VideoView的底层实现是MediaPlayer,因此VideoView也支持以上两种协议。 但是Android原生MediaPalyer支持的协议(不支持RTMP、MMS等)和封装格式实在太有限了.
除了使用MediaPlayer + SurfaceView播放视频的方式,我们还可以使用VideoView来直接播放视频。SurfaceView播放视频时,如果不进行设置,视频宽高总是等于定义的SurfaceView布局宽高,所以视频可能会被拉伸变形。而使用VideoView时,视频宽度等于VideoView布局宽,但是高是自适应的,自动调整宽高比到视频原始比例,所以不会有拉伸。
> MediaPlayer+SurfaceView点播视频
Android MediaPlayer+SurfaceView播放视频(附Demo)- http://blog.csdn.net/junzia/article/details/52704129
Android移动开发-使用MediaPlayer和SurfaceView播放视频的实现- https://download.csdn.net/download/fukaimei/10002446
Android--SurfaceView播放视频- http://www.cnblogs.com/plokmju/p/android_SurfaceView.html
Android SurfaceView播放视频有声音无图像问题- http://blog.csdn.net/aminfo/article/details/7588475
从头学Android之多媒体--使用MediaPlayer和SurfaceView播放视频- http://blog.csdn.net/worker90/article/details/7108358
Android之SurfaceView实现视频播放- http://www.cnblogs.com/devinzhang/archive/2012/02/03/2337576.html
Android SurfaceView使用dirty rect刷新- http://blog.csdn.net/jjwwmlp456/article/details/50364424
Android中 Rect类- http://blog.csdn.net/u010142437/article/details/38585637
Android开发:SurfaceView上新建线程绘制旋转图片 及 刷新特定区域(脏矩形)- http://blog.csdn.net/yanzi1225627/article/details/8581200
基于Surface的视频编解码与OpenGL ES渲染- http://blog.csdn.net/gh_home/article/details/52399959 https://github.com/google/grafika
Android图形系统之Surface、SurfaceView、SurfaceHolder及SurfaceHolder.Callback之间的联系- http://blog.csdn.net/conowen/article/details/7821409
openGL ES进阶教程(四)用openGL ES+MediaPlayer 渲染播放视频+滤镜效果- http://blog.csdn.net/king1425/article/details/72773331
> TextureView+MediaPlayer点播视频 ,SurfaceTexture.OnFrameAvailableListener
TextureView+SurfaceTexture+OpenGL ES来播放视频(一)- https://www.jianshu.com/p/d3d3186eefcb
SurfaceTexture进行视频分屏的文字,GLSurfaceView和SurfaceTexture,使用opengl绘制
TextureView+SurfaceTexture+OpenGL ES来播放视频(一)- http://blog.csdn.net/Ray_Chou/article/details/48416467
> openGL+GLSurfaceView+MediaPlayer点播视频/拍照、预览图片和视频、滤镜等,GLSurfaceView.Renderer。
创建一个纹理时,视频的每一帧都可以看成图片,也就是要不断的更新纹理.
主要的原因是,MediaPlayer的输出往往不是RGB格式(一般是YUV),而GLSurfaceView需要RGB格式才能正常显示,另外,获取每一帧的数据并没有那么方便。
GLSurfaceView是OpenGL中的一个类,也是可以预览Camera的,而且在预览Camera上有其独到之处。独到之处在哪?当使用Surfaceview无能为力时就只有使用GLSurfaceView了,它能够真正做到让Camera的数据和显示分离,所以搞明白了这个,像Camera只开预览不显示这都是小菜,妥妥的。Android4.0的自带Camera源码是用SurfaceView预览的,但到了4.2就换成了GLSurfaceView来预览。如今到了4.4又用了自家的TextureView,所以从中可以窥探出新增TextureView的用意。
-- 推荐:通过Opengl ES去绘制视频的demo- https://github.com/ChouRay/PlayVideo-OpenGL
Android上使用OpenGLES2.0显示YUV数据- https://blog.csdn.net/android_technology/article/details/52143291
Android上使用OpenGLES2.0显示YUV数据- https://blog.csdn.net/ueryueryuery/article/details/17608185
OpenGL预览摄像头-https://download.csdn.net/download/a296777513/9786330
Android OpenGL渲染双视频- https://github.com/296777513/AndroidOpenGL
GLSurfaceView控件通过MediaPlayer播放普通视频- https://download.csdn.net/download/fowuchubuzai/10140354?locationNum=3&fps=1
Android OpenGL使用GLSurfaceView预览视频- http://blog.csdn.net/a296777513/article/details/63685658
视频学习笔记:Android OpenGL渲染YUV420P图像- http://blog.csdn.net/lidec/article/details/73732369
Android上使用OpenGLES2.0显示YUV数据- http://blog.csdn.net/ueryueryuery/article/details/17608185
github.com/xiaoyanger0825/NiceVideoPlayer github.com/lipangit/JieCaoVideoPlayer
Android使用OpengGL Es2.0技术(GLSurfaceView含缩放功能)yuv视频流展示总结- http://blog.csdn.net/android_technology/article/details/52143291
Camera_V3.0.0[使用GLsurfaceView预览Camera 拍照demo]- https://download.csdn.net/download/rzjhsbyj110/8361481
PlayCamera_V2.0.0[TextureView预览Camera 拍照完整demo]- https://download.csdn.net/download/yanzi1225627/7540903
使用GLsurfaceView预览Camera 拍照demo- http://download.csdn.net/detail/yanzi1225627/7547263
Android camera实时预览 实时处理,人脸识别示例- http://www.jb51.net/article/103783.htm http://www.apkbus.com/thread-589022-1-1.html
Android人脸识别Demo竖屏YUV方向调整和图片保存(分享)- http://www.jb51.net/article/131299.htm
使用GLSurfaceView预览Camera 基础拍照demo;GLSurfaceView做Camera预览
OpenGL预览摄像头- https://download.csdn.net/download/a296777513/9786330
GLSurfaceView预览图像,一些滤镜处理和OpenGLES进阶Demo- https://github.com/lb377463323/GraphicsTestBed
渲染多个视频流数据,微信视频聊天- https://github.com/296777513/AndroidOpenGL
通过在C++层实现YUV-RGB转换,通过OpenGL绘制,通过片段着色器运行Shader脚本实现图像处理,虽然将滤镜的一些处理交给GPU来执行,极大的减少了速度,但YUV-RGB过程却拖了后腿。GLSL(GL Shading Language)的着色器代码分成2个部分:Vertex Shader(顶点着色器)和Fragment(片断着色器),有时还会有Geometry Shader(几何着色器)。负责运行顶点着色的是顶点着色器。它可以得到当前OpenGL 中的状态,GLSL内置变量进行传递。GLSL其使用C语言作为基础高阶着色语言,避免了使用汇编语言或硬件规格语言的复杂性。
GPUImage for Android- https://github.com/CyberAgent/android-gpuimage
GL的Program/Shader把用户传过来的YUV数据,转换成RGB数据后,通过Renderer贴在GLSurfaceView上。
利用ffmpeg解码视频帧,然后通过 shader 进行处理,再通过ffmpeg编码为视频
opengGL+ffmpeg,FFmpeg解码、OpenGL视频显示;RTSP取流+FFmpeg解码+OpenGL显示
1、https://github.com/htwahzs/Rtsp-Android-Client(RTSP取流)
2、http://blog.csdn.net/shikh/article/details/45345313(用FFmpeg解码)
3、http://blog.csdn.net/ueryueryuery/article/details/17608185(解码后的YUV数据显示)
1.android本身也不能直接显示YUV图像,YUV转成RGB还是必要的;
2.YUV手动转RGB会占用大量的CPU资源,如果以这样的形式播放视频,手机会很热,所以我们尽量让GPU来做这件事;
GLSurfaceView.getHolder().getSurface();.用openGL实现过贴图.
Rect rect = mGLSurfaceView.getHolder().getSurfaceFrame();//获得当前SurfaceView上的帧.
通过Surface就可以获取raw buffer其中的内容。原生缓冲区(raw buffer)存储着当前窗口的像素数据。
-- 视频播放暂停时,OpenGL ES重绘SurfaceView Android
Android Camera使用OpenGL ES 2.0和GLSurfaceView对预览进行实时处理(黑白滤镜)- http://blog.csdn.net/lb377463323/article/details/77071054
OpenGL ES总结(四)OpenGL 渲染视频画面- http://blog.csdn.net/hejjunlin/article/details/62976457
解决android opengl es绘制物体屏幕横竖屏切换物体压扁形变以及矩阵相关知识- http://blog.csdn.net/pangrui201/article/details/75452155
> VideoView
Android VideoView播放本地视频短暂黑屏的解决方法- https://blog.csdn.net/goodlixueyong/article/details/53590573
android 启动页VideoView 播放本地视频短暂黑屏解决- https://blog.csdn.net/dhl_1986/article/details/79063923
Android VideoView 播放黑屏- https://www.jianshu.com/p/d5a63a0af370
以上是关于TextureView/SurfaceView/GLSurfaceView/VideoView渲染视频(点播播放器)的主要内容,如果未能解决你的问题,请参考以下文章