VideoView getDrawingCache est de retour en noir
Donc je suis en train de faire une capture d'écran d'une VideoView. J'ai pensé que le plus simple serait:
videoView.setDrawingCacheEnabled(true);
Puis quand j'ai besoin de prendre une capture d'écran:
Bitmap screenshot = videoView.getDrawingCache();
Mais pour une raison quelconque, le bitmap-je obtenir dos est noir à chaque fois. Quelqu'un avait du succès avec cette? J'ai aussi essayé:
Bitmap bitmap = Bitmap.createBitmap(videoView.getWidth(), videoView.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
videoView.draw(canvas);
Mais encore une fois, cela me renvoie une image noire. Je peux voir que la VideoView est à peine documenté dans l'Android javadoc. Toute aide?
Cela me rappelle l'époque où je l'ai utilisé pour essayer et prendre des captures d'écran de vidéos dans WMP avec Impression de l'écran et de la peinture. Je crois que c'est une question sur laquelle la surface d'affichage est juste une couche transparente sur la fenêtre, et ne peut donc pas être snapshotted comme vous tentez de le faire.
OriginalL'auteur Brayden | 2011-03-11
Vous devez vous connecter pour publier un commentaire.
De la documentation pour Vue#setDrawingCacheEnabled:
Il est possible que le VideoView fonctionne avec l'accélération matérielle et de l'est en contournant le mécanisme de mise en cache. Une bonne source de plongée pourrait faire la lumière.
Modifier - ce post semble clarifier certaines choses:
(VideoView est un enfant de SurfaceView)
Vous devez probablement penser à SurfaceView matériel de magie. Votre code apparemment ne sera pas en mesure de toucher les bits comme ils se déplacent à l'écran.
Oui je me suis rendu compte que. Donc, fondamentalement. Je ne peux pas prendre une capture d'écran d'un VideoView?
Je ne pense pas que vous le pouvez, malheureusement.
SurfaceView est un "trou" à l'intérieur de la fenêtre, il ne peut donc pas être mis en cache à l'intérieur d'une image bitmap. Nous sommes conscients de cette limite et nous aimerions obtenir quelque chose de mieux, mais il n'y a rien de prévu pour l'instant.
OriginalL'auteur Matthew Willis
Depuis API 10, vous pouvez utiliser MediaMetadataRetriever pour récupérer une image à un moment donné (dans micro secondes). Voici un exemple de code:
merci, j'ai été capable de le faire avec une vidéo stockée localement sur le téléphone. Toutefois, lorsque la vidéo est diffusée dans le VideoView, je n'arrive pas à capturer l'image de la vidéo. Savez-vous comment?
vous avez besoin d'obtenir l'uri de la vidéo diffusée en continu
Salut @Arbi . J'ai placé un échantillon "test.com/myVideo.mp4" dans le paramètre uri, mais il n'est pas couronnée de succès. Il semble que la fonction videoFrame() ci-dessus ne fonctionne que si la vidéo est téléchargée sur l'appareil
Vous n'êtes pas fournir le protocole (je me demande si vous avez été en mesure de jouer la vidéo). Essayez avec quelque chose comme
new URL("you_full_url").toExternalForm()
pour être sûr que vous donnez une url correcte sinon, vous allez voir une exception.OriginalL'auteur bachr