Android HLS Streaming - les Différentes Versions d'Android Charger Emplacement Différent dans le Flux.
Je me rends compte qu'il y a quelques problèmes en termes de niveau de soutien de la HLS dans Android. Je suis en train d'écrire un petit videoplayer démo (pour travailler sur autant d'appareils que possible); de préférence, sans l'aide d'un tiers de la bibliothèque, qui peut diffuser de la vidéo HLS.
NOTE: je suis en train de tester sur JellyBean 4.2.2, mais ont accès à d'autres versions
J'ai réussi à utiliser le lecteur multimédia de la classe, de sorte que mon application est en mesure de commencer la lecture d'un flux (par exemple, Apple test vidéo BipBopAll), mais il semble être le chargement de la mauvaise section du cours d'eau, comme la vidéo semble commencer à 29 minutes (et il se termine après environ trente secondes).
Le code que j'ai utilisé est assez basique:
private void playTrack()
{
player = new MediaPlayer();
try
{
player.setDisplay(holder);
player.setDataSource("http://devimages.apple.com/iphone/samples/bipbop
/bipbopall.m3u8");
player.prepare();
}
catch (...)
{
}
player.start();
}
Mise à jour: j'ai testé le même code sur ICS 4.0.4, et elle fonctionne correctement. Les essais en 3.0.1, charge le flux à 15 minutes, puis s'exécute correctement à partir de là.
Ce que je peux faire pour s'assurer que le flux commence au début, et joue correctement sur plusieurs versions d'Android?
Ou, est-il une meilleure mise en œuvre que je devrais utiliser?
Vous devez vous connecter pour publier un commentaire.
Après enquête, j'ai trouvé les informations suivantes qui peut espérer aider les autres à obtenir HLS en streaming sur Android travail.
Encodage
- L'encodage de la vidéo, et de la segmentation de configuration peuvent avoir un grand impact sur les versions d'Android que la vidéo prend en charge. J'ai fini par la création d'une vidéo à l'aide du Frein à main, avec les paramètres suivants:
Segmentation - à l'Aide de l'Apple MediaFileSegmenter, j'ai trouvé l'ajout de la "non-floating-point-durée" et "-z aucune" drapeaux m'a permis de créer une vidéo qui travaillaient dans Android 3.0->4.2
Pain d'épice - je n'ai pu obtenir Android 2.3 travailler avec HLS hors de la boîte, mais je n'ai trouver que l'utilisation de la Vitamio bibliothèque assez bien travaillé (voir cette question pour plus d'info)
#EXTINF:
lignes avec des valeurs entières semble avoir fixé.Certaines versions d'Android semblent interpréter le HLS à http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8 comme live HLS plutôt que de la VOD HLS, et ainsi media player démarre à proximité du "live" stade, proche du contenu de fin, autour de 29 minutes dans le contenu.
Et voici pourquoi: avant la 4.3, la dernière ligne dans un HLS fichier de liste de lecture n'a pas été analysée, à moins qu'il termina par un '\n'.
Voir l'historique des modifications sur ce fichier: http://androidxref.com/4.3_r2.1/history/frameworks/av/media/libstagefright/httplive/M3UParser.cpp , sur 12/31/12, il y a du changement qui a résolu le problème. La question est allé sur 4.4.
Donc, d'une façon de résoudre le problème sur les versions plus anciennes est pour ajouter un saut de ligne après la dernière ligne de la liste de lecture sur le serveur, ou de mettre en œuvre un proxy HTTP dans votre application qui ajoute que le saut de ligne, ce qui peut ne pas être trivial...
Avez-vous essayer de donner au Joueur un début de paramètre dans l'URL?
Comme ceci:
"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8?start=0"