2011-01-04 4 views
6

J'écris une application de streaming pour MP3 (CBR). C'est tout le passthru, ce qui signifie que je n'ai pas besoin de décoder/encoder, j'ai juste besoin de transmettre les données telles que je les vois arriver. Je veux être en mesure de compter les images MP3 comme elles passent (et d'autres choses comme les calculs de débit).Comment analyser les données MP3 pour extraire des images numérotées?

Selon la spécification, le mot de synchronisation semble être onze (11) bits de 1s, cependant je remarque (naturellement) que la charge utile du cadre que je dois supposer sans risque d'être binaire et MP3 frame header il est donc pas étrange du tout de voir onze (11) 1 dans l'ordre.

Mes questions:

  1. Est-il un Unix | Linux | Perl utilitaire analyseur MP3 (dd de -style) qui peut tirer des trames numérotées à partir d'un fichier MP3/pipe?
  2. Comment peut-on délimiter un bloc d'en-tête MP3 à partir de toute autre donnée de charge utile binaire? et enfin:
  3. Un fichier MP3 à débit constant (CBR) est-il défini par des octets de charge utile ou les octets d'en-tête sont-ils inclus dans le nombre total d'octets/bits pour chaque tranche de temps donnée?

Merci,

+0

dd-style? Vous voulez dire quelque chose qui est confus à utiliser, fonctionne dans des unités gênantes plutôt que des octets, et lorsque vous utilisez des morceaux d'octets *, devient naturellement lent ... (Je pense que vous voulez 'dd_rescue' dans le futur pour copier des données.) – user562374

+0

Eh bien, le style dd signifie que je pourrais soit nommer/numéroter une image pour l'extraction d'un tuyau & | fichier ou que je pourrais spécifier des plages de cadres de la façon dont dd fait sauter | seek | count. dd a ses propres problèmes sans aucun doute, mais le support de dd_rescue cherche-t-il? – Xailor

+0

Quelle langue utilisez-vous? – Brad

Répondre

4

Je vais prendre un coup de poignard à # 2.

Je crois comprendre que la façon courante de synchroniser le flux MP3 (et donc permettre votre comptage des cadres) est de le faire:

  • Rechercher un mot de synchronisation
  • Lorsque la synchronisation mot est trouvé, validez le reste de l'en-tête
  • Si l'en-tête de cadre est valide, alors vous devez connaître la position de l'en-tête suivant
  • Si vous cliquez sur 3 ou 4 en-têtes d'affilée, et qu'ils sont valides, alors les chances sont très élevées que vous les avez trouvées.

J'ai récemment vu une page avec une documentation à ce sujet, mais je ne la trouve pas pour le moment. Si je le retrouve, je le posterai.

+0

Il y a peu de temps, nous avons parlé des regexps bit à bit d'Erlang, mais il est non trivial de les faire correspondre à bit dans les modèles d'en-tête de trame MP3. Toute référence serait géniale :) – Xailor

+0

J'ai décidé de ne pas faire bouillir l'océan et de garder tous les fichiers strictement CBR et de s'en tenir à 'dd'. 'bs = $ [144 * $ bitrate/$ samplerate]' semble fonctionner. – Xailor

Questions connexes