2016-01-04 6 views
0

Я бы хотел использовать PCM вместо ALAC для отправки аудио в совместимый с AirPlay. устройство. Устройство, в котором я использую все, имеет как минимум cn = 0 и et = 0 в своих возможностях mDNS TXT, поэтому я предполагаю, что могу использовать raw PCM/L16 и незашифрованный.Протокол AirPlay - как использовать raw PCM вместо ALAC

Но единственный документ я нашел до сих пор только упомянуть ALAC в ANNOUNCE сообщении RTSP

ANNOUNCE RTSP: // fe80 :: 217: f2ff: fe0f: e0f6/3413821438 RTSP/1,0

CSeq: 3

Content-Type: применение/SDP

Content-Length: 348

User-Agent: Itunes/10,6 (Macintosh; Intel Mac OS X 10.7.3) AppleWeb Kit/535.18.5

Клиент-Instance: 56B29BB6CB904862

v = 0

о = Itunes 3413821438 0 В IP4 fe80 :: 217: f2ff: fe0f: e0f6

s = Itunes

с = IN IP4 fe80 :: 5a55: САФФ: fe1a: E187

т = 0 0

м = аудио 0 RTP/AVP 96

а = rtpmap: 96 AppleLossless

а = fmtp: 96 352 0 16 40 10 14 2 255 0 0 44100

я не могу найти то, что должно быть указано для m = и различных параметров a = (rtmap и fmtp) при использовании PCM/L16. Я знаю, что тип пакета RTP должен быть 0x0a, но это происходит позже. Изменение rtmap: 96 до rtmap: 10 не работает, и я не знаю, что должно быть установлено в любом случае для fmtp

Спасибо

ответ

0

Вы можете отправить несжатого PCM в пакетах ALAC

это как JustePort сделать это

private static byte [] EncodeALAC(byte [] buffer) 
{ 
    // Frame size is set as 4096 samples, stereo 
    BitBuffer bitbuf = new BitBuffer((4096 * 2 * 2) + 3); 

    bitbuf.WriteBits(1, 3); // channels -- 0 mono, 1 stereo 
    bitbuf.WriteBits(0, 4); // unknown 
    bitbuf.WriteBits(0, 12); // unknown 
    bitbuf.WriteBits(0, 1); // 'has size' flag 
    bitbuf.WriteBits(0, 2); // unknown 
    bitbuf.WriteBits(1, 1); // 'no compression' flag 

    for(int i = 0; i < buffer.Length; i += 2) 
    { 
     // endian swap 16 bit samples 
     bitbuf.WriteBits(buffer[i+1], 8); 
     bitbuf.WriteBits(buffer[i], 8); 
    } 

    return bitbuf.Buffer; 
} 
+0

Спасибо очень за ответ, это то, что я использую в настоящее время, но я прыгал, в соответствии с этим руководством https://nto.github.io/AirPlay.html и https: //git.zx2c4.com/Airtunes2/about/, что я мог бы отправлять кадры pcm без необходимости их инкапсулировать в A LAC и, особенно, без уродливой манипуляции на уровне бит, требуемой не-байтовой несогласованностью ALAC, которая вызывает много потерянных CPU на более скромных платформах –