Question

Je suis en train d'écrire une application client Smooth Streaming. Du côté du serveur (IIS 7 avec des extensions Media Services), j'ai un tas de fichiers ISMV et ISMA codés à l'aide Expression Encoder Pro 4 avec le preset "H.264 IIS lisse streaming iPhone WiFi". En un mot, il utilise le codec vidéo "H.264 base", et le codec audio AAC-LC.

Du côté client est cependant où je vais avoir des problèmes, en particulier avec les morceaux audio. Alors que je suis en mesure de comprendre le flux vidéo H.264 (il est essentiellement une séquence d'unités NAL premières préfixés par leur longueur, sans l'unité NAL « start code » 0, 0, 0, 1), je reste havre de paix « t été en mesure de se fissurer ce qui est à l'intérieur du flux audio AAC LC, à savoir ce qui est dans le « MDAT »(Media Data Box) atome. Il est certainement pas un conteneur MP4, mais qu'est-ce donc?

Je collant en dessous de la première 128 (nombre choisi arbitrairement) octets d'un fragment AAC-LC (MDAT partie seulement) obtenue à partir du serveur, dans le cas où tout le monde peut le comprendre à partir de là.

unsigned char data[128] = {
 0x21, 0x09, 0x0A, 0xBF, 0xBF, 0xFF, 0xFF, 0xD5, 0xB1, 0x8D, 0xC4, 0xA1,
 0x18, 0x0D, 0x25, 0xC9, 0x2E, 0x49, 0x2E, 0x10, 0x88, 0x91, 0x10, 0x01,
 0x13, 0x23, 0x2C, 0x36, 0x25, 0x60, 0x6B, 0x94, 0x8C, 0x74, 0xD7, 0x4A,
 0x95, 0xD3, 0x03, 0x91, 0x5B, 0x76, 0xDE, 0x27, 0xC5, 0xB2, 0x4C, 0xCF,
 0xEB, 0x3E, 0xDD, 0xFF, 0x22, 0xAF, 0xC3, 0xF8, 0x60, 0x36, 0x49, 0xBC,
 0xAE, 0x4D, 0x10, 0x31, 0xC6, 0x28, 0x2A, 0xEB, 0xCA, 0x94, 0x51, 0xD8,
 0x61, 0x1B, 0xC6, 0x2A, 0x91, 0x71, 0xE4, 0x8C, 0xF8, 0x19, 0x2C, 0xDE,
 0x71, 0xBB, 0xE3, 0xBD, 0x36, 0xB4, 0x45, 0x37, 0x02, 0x61, 0x48, 0x8E,
 0x19, 0x80, 0xD5, 0x24, 0x97, 0x24, 0x92, 0x44, 0x08, 0x89, 0x12, 0x00,
 0xB3, 0xF8, 0x1E, 0xE2, 0xBD, 0xCD, 0x4E, 0xF7, 0xA9, 0xE2, 0x0E, 0xD8,
 0xEA, 0xFA, 0xCF, 0xDB, 0x4E, 0x69, 0x6F, 0xEE
};
Était-ce utile?

La solution

Après une longue recherche et cette astuce j'ai reçu sur IIS forums, j'ai pu comprendre. En gros, cela est un flux AAC brut, qui doit être enveloppé avec les en-têtes avant qu'il puisse être lu. Le format d'en-tête le plus simple et la plus courante semble être ADTS , qui consiste à ajouter un en-tête 7 octets en face de chaque échantillon .

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