【音视频安卓开发 (六)】Android GLSurfaceView播放视频
生活随笔
收集整理的這篇文章主要介紹了
【音视频安卓开发 (六)】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);?
?
?
?
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的【音视频安卓开发 (六)】Android GLSurfaceView播放视频的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【WebRTC---入门篇】(四)Web
- 下一篇: 【开源项目----Android OPe