Question

J'essaie de contourner le problème suivant dans Opentures Android.

La spécification OpenSles dit ce qui suit:

http://www.khronos.org/registry/sles/ Spécifications / opensl_es_specification_1.0.1.pdf - 8.12

Lorsque le lecteur est dans l'état SL_PlayState_Playing, lequel est contrôlée par l'interface SLJOULITF [voir la section 8.32], ajout Les tampons commenceront implicitement à lire. Dans le cas de la famine dû Pour les tampons insuffisants dans la file d'attente, le jeu de données audio s'arrête. Le joueur reste dans l'état SL_PlayState_Playing. En file d'attente de Des tampons supplémentaires, le jeu de données audio reprend. Noter que La famine des tampons en file d'attente provoque des lacunes audibles dans les données audio flux. Dans le cas où le joueur n'est pas dans l'état de jeu, L'ajout de tampons ne démarre pas la lecture audio.

hélas une fois que nous arrivons à Android:

http://mobileeearls.com/labs/ Native-Android-API / NDK / DOCS / OPENSES / INDEX.HTML - Décodez audio à PCM

En fonction de la mise en œuvre de la plate-forme, le décodage peut nécessiter ressources qui ne peuvent pas être laissées au ralenti. Par conséquent, il n'est pas recommandé de affamer le décodeur en omettant de fournir un nombre suffisant de vide Tampons PCM, par ex. En revenant de la file d'attente tampon simple Android rappel sans enroquer un autre tampon vide. Le résultat de La famine de décodeur n'est pas spécifiée; La mise en œuvre peut choisir de soit laissez tomber les données PCM décodées, mettez en pause le processus de décodage, ou dans Les cas graves terminent le décodeur.

Ce comportement non spécifique a complètement cessé de progresser sur mon projet et je suis perdu comme la meilleure façon de travailler autour de lui. Décodage Le fichier entier sur PCM en mémoire ou sur disque n'est pas une option, j'ai vraiment besoin que cela soit une solution de streaming. Toute aide sur ceci serait massivement appréciée

Était-ce utile?

La solution

Il semble qu'il ne semble pas y avoir un moyen de contourner cette question.D'autres projets semblent utiliser des API de niveau inférieur (telles que la libstagefright) pour faire leur décodage.Cette méthode vous permet d'obtenir sur les données

[modifier] Il n'y a pas de chemin autour du problème de famine.Android n'adhère pas à la spécification.Fondamentalement, vous devez faire tamponner dans la mémoire et vous assurer que vous utilisez une pause et de reprendre pour décoder lorsque vous devez contrôler le flux des données.

Il s'agit d'une discussion sur le sujet dans le groupe Google NDK

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top