2011-01-04 13 views
6

Sto scrivendo un'applicazione di streaming per MP3 (CBR). È tutto passante, il che significa che non devo decodificare/codificare, ho solo bisogno di passare i dati mentre vedo che viene attraverso. Voglio essere in grado di contare i fotogrammi MP3 mentre passano (e altre cose come i calcoli del throughput).Come analizzare i dati MP3 per estrarre i frame numerati?

Secondo la MP3 frame header specifiche, la parola di sincronizzazione sembra essere undici (11) bit di 1s, tuttavia I notice (naturalmente) che il carico utile telaio che devo tranquillamente assumere essere binario e quindi non è dispari del tutto per vedere undici (11) 1s in sequenza.

Le mie domande:

  1. C'è un'Unix | Linux | Perl utilità parser MP3 (dd in stile) che può tirare frame numerati da un file MP3/pipa?
  2. Come si delinea un blocco di intestazione MP3 da qualsiasi altro dato di carico utile binario? e infine:
  3. È un Bitrate costante (CBR) MP3 definito dai byte del carico utile oppure i byte di intestazione sono inclusi nel numero aggregato di byte/bit per ogni data timeslice specificato?

Grazie,

+0

dd-style? Intendi qualcosa che è fonte di confusione da usare, funziona in unità scomode piuttosto che in byte, e quando si usano blocchi di byte * dopo tutto *, diventa naturalmente lento ... (Penso che tu voglia 'dd_rescue' in futuro per copiare i dati.) – user562374

+0

Beh, dd style significa che potrei o nominare/numerare una cornice per l'estrazione in una pipe & | file o che potrei specificare gli intervalli di fotogrammi nel modo in cui dd fa saltare | seek | count. dd ha i suoi problemi senza dubbio, ma il supporto dd_rescue cerca? – Xailor

+0

Che lingua stai usando? – Brad

risposta

4

mi prendo una pugnalata al # 2.

E 'la mia comprensione che il modo comune per sincronizzare il flusso MP3 (e quindi permettere il vostro conteggio dei fotogrammi) è quello di fare questo:

  • Cerca una parola di sincronizzazione
  • Quando la sincronizzazione parola trovata, valida il resto dell'intestazione
  • Se l'intestazione del frame è valida, allora dovresti conoscere la posizione dell'intestazione successiva
  • Se premi 3 o 4 intestazioni di fila e sono valide, allora è molto probabile che tu li abbia trovati.

Ho visto una pagina di recente con la documentazione su questo, ma non riesco a trovarlo al momento. Se lo trovo di nuovo, lo posterò.

+0

Si è parlato di questo poco tempo fa riguardo le regex dei bit di Erlang, ma non è banale imbattersi nel pattern di intestazione del frame MP3. Qualsiasi riferimento sarebbe grandioso :) – Xailor

+0

Ho deciso di non far bollire l'oceano e di mantenere tutti i file rigorosi-CBR e bastone con 'dd'. 'bs = $ [144 * $ bitrate/$ samplerate]' sembra funzionare bene. – Xailor