पर वीडियो फ्रेम इसमें कुछ समय बिताने के बाद, यह पूछना बेहतर हो सकता है। मदद के लिए धन्यवाद, दोस्तों!एंड्रॉइड 3.x/Google टीवी/एसडीके पर वीडियो प्रोसेसिंग: सतह फ्रेम/ओपनजीएल/जीएलएसएल
प्रश्न
- कैसे, SurfaceTexture को MediaPlayer या VideoView से एक वीडियो फ्रेम या एक ओपन बनावट प्रस्तुत करना आदेश GLSL के माध्यम से बनावट/टुकड़ा रंग बदलने के लिए में? (हम कल्पना GLES/GLSL वीडियो प्रोसेसिंग दिनचर्या के लिए इसकी आवश्यकता है।)
प्रसंग
क) गूगल टीवी (LG G2 2012 डिवाइस) है एसडीके-केवल समर्थन के साथ एक Android 3.2 डिवाइस (कोई NDK)
बी) कैमरे से सतह के प्रदर्शन में प्रस्तुत करना आसान है, लेकिन एंड्रॉइड 3.x में सरफेसटेक्चर में वीडियो कैसे प्रस्तुत करना है? कैमरा समाधान के लिए, नीचे देखें।
सी) मैं पहले से ही एक जीएलवी व्यू/जीएल रेन्डरर में वीडियो फ्रेम प्रस्तुत कर रहा हूं, लेकिन मैं इसे जीएलएसएल के माध्यम से बदलने के लिए एक फ्रेम नहीं पकड़ रहा हूं। ऐसा लगता है कि काम नहीं करना है। लेकिन मैं वीडियो प्रसंस्करण के लिए वीडियो डेटा के साथ सुलभ GLES/GLSL बनावट की जरूरत है:
MainActivity वर्ग:
public void onCreate(Bundle state) {
super.onCreate(state);
m_View = new GLSimpleView(this);
setContentView(m_View);
m_Holder = m_View.getHolder();
m_Holder.addCallback(this);
m_Holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
GLSimpleView वर्ग:
public GLSimpleView(Context context) {
super(context);
m_Renderer = new GLTextureRenderer(context);
this.setRenderer(m_Renderer);
}
GLTextureRender वर्ग:
int[] textures = new int[1];
GLES20.glGenTextures(1, textures, 0);
m_SurfaceTexture = textures[0];
GLES20.glBindTexture(GL_TEXTURE_EXTERNAL_OES, mTextureID);
GLES20.glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST);
GLES20.glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
GLES20.glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE);
GLES20.glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE);
m_Surface = new SurfaceTexture(m_SurfaceTexture);
m_Surface.setOnFrameAvailableListener(this);
// THIS ONE DOESN'T WORK WITH ANDROID 3.x!
// HOW TO BIND m_Surface TO m_MediaPlayer?
//Surface surface = new Surface(m_Surface);
//m_MediaPlayer.setSurface(surface);
//surface.release();
इसके अलावा इसकी तुलना करें:
कैमरे के लिएSurfaceTexture (मैं MediaPlayer या VideoView लिए यह एक जरूरत है!): Using SurfaceTexture in Android
वीडियो GLView (GLSL के माध्यम से कोई बनावट पहुँच!) करने के लिए: Playing video in a GLSurfaceView instead of SurfaceView
Android 4.x एसडीके VideoSurfaceTexture नमूना (संगत नहीं 3.2!): http://source-android.frandroid.com/cts/tests/src/android/media/cts/VideoSurfaceView.java
Android MediaPlayer (एंड्रॉयड में setSurface() का कोई समर्थन 3.x!): http://developer.android.com/reference/android/media/MediaPlayer.html
इसलिए मुख्य प्रश्न अभी भी है: एंड्रॉइड 3.x के साथ एक वीडियो फ्रेम को कैसे एक्सेस और हेरफेर करना है? शायद एक अलग समाधान? क्या मुझे बहुत समय बिताने के बाद कुछ याद आ रहा है? गौर करें कि Google टीवी पर कोई एनडीके समर्थन नहीं है, अगर हम वीडियो डेटा में हेरफेर करने का प्रयास करते हैं तो हम बहुत सीमित हैं।
क्या आपने देखा है: http://stackoverflow.com/questions/8620560/video-processing-in-android? मैं भी उत्सुक हूं यदि आपने अपनी परियोजना के लिए अब बहिष्कृत रेंडरस्क्रिप्ट ग्राफिक्स एपीआई को देखा है। –