2015-02-27 1 views
1

Je veux développer une application, qui aura 2 boutons et SurfaceView (En fait, une classe étend SurfaceView implémente SurfaceHolder.Callback).Android MediaCodec encoder et décoder en utilisant le format vp8

Lorsque l'utilisateur clique sur button1 - avec ScreenCapture, je vais obtenir une image et en utilisant mediacodec, je vais faire VP8 le codage et la sortie d'économie en ByteBuffer (je ne suis pas enregistrer dans un emplacement de fichier)

Lorsque l'utilisateur. cliquez sur le bouton 2 - Je dois le montrer sur SurfaceView avec cette sortie de bytebuffer qui est capturée.

j'ai essayé comme

décodeur MediaCodec = MediaCodec.createDecoderByType ("video/x-vnd.on2.vp8"); decoder.dequeueOutputBuffer (mBufferInfo, DEFAULT_TIMEOUT_US);

.....

mais pas en mesure de mettre à jour le surfaceview. Comment puis-je mettre à jour la vue de surface en utilisant des données de bytebuffer?

+1

Avez-vous été capable de faire fonctionner ceci avec AVC? Il peut être utile de tout faire fonctionner avec .mp4 pour s'assurer que tous les problèmes que vous rencontrez ne sont pas spécifiques à VP8. – fadden

+0

Non .. Je sens que je fais une erreur dans MediaProjection.createVirtualDisplay (..); avec cette API, je suis capable de capturer l'écran. mMediaProjection.createVirtualDisplay ("SCREEN_CAPTURE", Largeur, hauteur, densité, 0, surface, nouveau VirtualDisplay.Callback() {}, gestionnaire); La surface contient des données d'écran capturées. est-ce correct? – user2318724

Répondre

0

J'ai eu la réponse ... mMediaCOdec.releaseOutputBuffer (index, true) ... - ici j'ai rendu le rendu faux. Si la valeur de rendu est définie sur true, je peux dessiner ou définir l'image capturée. Avec releaseOutputBuffer (index int, long renderTimestampNs) - nous pouvons rendre l'image. Mais pris en charge au niveau API 21 uniquement. Merci ..