Android 4.2 avec 4 MediaPlayers = “impossible de lire cette vidéo”
Chaque fois que je suis en train de charger au moins 4 mediaPlayers, l'un d'eux, au risque de corrompre la vidéo, il essaie de charger et de déclencher un système d'exploitation Android message "impossible de lire cette vidéo"
Autres informations:
Pour 3 mediaPlayers tout fonctionne bien.
Sur d'autres versions d'Android, différente de la version 4.2, le même code avec le même 4 des œuvres vidéo.
La 4 la vidéo peuvent être lus de façon indépendante sur l'appareil. Il n'y a pas de problème du format.
Après le démarrage du programme et l'obtention de la "impossible de lire cette vidéo" le message, la vidéo peut plus être joué dans n'importe quelle autre application, à moins que je réinitialiser l'appareil.
J'ai essayé cette fois avec VideoViews ou indépendant MediaPlayers affiché sur surfaceViews.
Je répliqué l'erreur sur la plus les appareils fonctionnant sous Android 4.2.
Sur android 4.1.2 et autres android 4 versions je ne me souviens pas le code a bien fonctionné.
- avez-vous obtenir le succès, de jouer 4 vidéos en un seul écran parce que quand je suis en train de jouer 4 vidéos dans un même écran en 4 videoview il me montre le message de "la Vidéo ne peut pas être joué",s'il vous Plaît aider moi
Vous devez vous connecter pour publier un commentaire.
Sur Android, l'idée est que tout ce qui a trait aux médias codecs est caché par le développeur qui doit être constante et unique de l'API :
MediaPlayer
.Lorsque vous jouez à un média, ne serait-il être un cours d'eau ou quelque chose situé sur le périphérique externe, le faible niveau des codecs/analyseurs sont instancié à chaque fois que l'application aura besoin de leur aide.
Cependant, il arrive que pour des raisons particulières liées au matériel de décodage, certains codecs, ne peut pas être instanciée qu'une seule fois. Comme une question de fait, chaque application doit être en libérant les ressources (codecs cas par exemple) quand ils n'en ont pas besoin non plus par l'appel de
MediaPlayer.release()
dans un état valide.En fait, ce que je dis est illustré dans le la documentation de
libération
sur le site des Développeurs Android :Donc, soit vous ne faites pas appel
release
lorsque vous avez terminé la lecture, ou une autre application est la tenue d'une référence sur ce type de ressources.EDIT :
Si vous avez besoin d'être rendu plusieurs vidéos sur le même
Activity
, vous avez deux choix. Comme je l'ai dit dans ma réponse, ce que vous vouliez à l'origine n'est pas possible en raison du faible niveau des questions, ce n'est pas sur iOS, par la manière.Ce que vous pouvez essayer à faire est :
Si les médias vous jouez sont pas en temps réel du contenu diffusé en continu, vous pouvez envelopper les 4 vidéos en un seul, à l'aide de l'un des largement disponibles gratuit les éditeurs vidéo. Puis afficher la vidéo en plein écran dans votre Activité, il va ressembler vous avez 4
Views
.Si elles sont en temps réel/non contenu enregistré, garder le première vidéo comme est. Je suppose que chaque vidéo est encodée en utilisant le même codec/conteneur. Ce que vous pouvez essayer est de transcoder les 3 autres vidéos de telle sorte qu'ils utilisent un codec et un format différent. Assurez-vous que vous êtes le transcodage d'un codec/conteneur qui est pris en charge par Android. Cette pourrait potentiellement la force d'Android à utiliser les différents décodeurs en même temps. Je pense que c'est exagéré par rapport au résultat que vous attendez.
Enfin, vous pouvez utiliser un autre backend pour le décodage comme
MediaPlayer
+FFMPEG
ou tout simplementFFMPEG
. Mais encore une fois, même si ça marche ce sera, je pense, un énorme overkill.Pour résumer cela, vous devez faire des compromis pour que cela fonctionne.
4
MediaPlayers en même temps. Même si vous êtes en cours d'exécution des Activités complètement différentes, des Services ou des Applications, vous devez être instanciating le MediaPlayeron-demand
, et la relâcher dès que la lecture est terminée ou quelle que soit la raison qui pourrait entraîner la lecture pour l'arrêter. Et puis, à nouveau, reinstanciate il lorsque la lecture est nécessaire.Activity
?