1. 程式人生 > >TextureView/SurfaceView/GLSurfaceView/VideoView渲染視訊(點播播放器)

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