Известно ,что udp пакет состоит из заголовка и данных
Известно))
как устроен udp пакет мы подробно разобрали в другой теме... про радиоуправление))
//unsigned char UDP[]={ // 60
//Destination MAC: // 0...5
//0xff,0xff,0xff,0xff,0xff,0xff,
//Source MAC: // 6...11
//0x00,0x08,0xdc,0x01,0x02,0x03,
//Type:
//0x08,0x00, // 12,13- Type: IP (0x0800)
/////////////////////////////////////////////// Protocol IP: 20 bytes
//0x45, // 14- Version: 4, Header length: 20 bytes
//0x00, // 15- Differentiated Services Field...
//(Total Length = Protocol IP(20) + Protocol UDP(8) + Data(18) = 46)
//0x00,0x2e, // 16,17- Total Length: 46
//0x00,0x00, // 18,19- Identification: 0
//0x00,0x00, // 20,21- Fragment offset: Don't fragment: 0
//0x40, // 22- Time to live: 64
//0x11, // 23- Protocol: UDP (17)
//0x00,0x00, // 24,25- Header checksum IP: // начальное =0
//192,168,0,3, // 26...29- Source IP:
//192,168,0,101, // 30...33- Destination IP:
/////////////////////////////////////////////// Protocol UDP
//0x00,0x50, // 34,35- Source port: 80
//0x00,0x50, // 36,37- Destination port: 80
//(Length = Protocol UDP(8) + Data(18) = 26)
//0x00,0x1a, // 38,39- Length: 26
//0x00,0x00, // 40,41- checksum UDP: // начальное =0
/////////////////////////// 42...59- Padding(18 bytes):
//0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//0x00, 0x00
//};
Добавлено after 3 minutes 10 seconds:Мне нужно передать 4 бита дополнительной информацаии.
я передаю дополнительно 48 байта в заголовке каждого пакета...
точно так же как Skype передаёт 24 бита (это не точно) в заголовке каждого пакета... (на анализаторе это хорошо видно).
Добавлено after 8 minutes 27 seconds:Как вашем плейере обработать этот момент.
тупо из буфера плеера...
static byte[] mic_byte_wavt = new byte[1420];//1420wavt(микрофон)
переписываем байты в буфер передатчика...
static byte[] TX_byte_wavt = new byte[1472];//1472 Ethernet
вот так...
//16v+32p+1420date+4crc=1472byte//UDP: MAX=1472.
xxTX_wavt = 0;
for (xTX_wavt=48; xTX_wavt<1468; xTX_wavt++) {
TX_int_wavt[xTX_wavt] = mic_byte_wavt[xxTX_wavt]; //byte 0...127|-127...0 > int 0...255
if (TX_int_wavt[xTX_wavt] < 0){TX_int_wavt[xTX_wavt] += 256;}
xxTX_wavt++;
};
затем в начало буфера передатчика добавляем заголовок... считаем... шифруем... и т.д.))
//16v+32p+1420date+4crc=1472byte//UDP: MAX=1472.
...
потом всё это отправляем по сети... Ethernet... Wi-Fi... не важно))
...
DatagramPacket dp_wav = new DatagramPacket(TX_byte_wavt, TX_len_wavt, InetAddress.getByName(TX_IP_wavt),TX_port_wavt);
socket_wav.send(dp_wav); // UDP: MIN=18; MAX=1472.
...
всё))
в приёмнике процесс обратный...
принимаем пакет...
...
DatagramPacket reply_wav = new DatagramPacket(RX_byte_wavr, RX_byte_wavr.length);
socket_wav.receive(reply_wav); // UDP: MIN=18; MAX=1472.
...
извлекаем заголовок... считаем... расшифруем... и т.д.))
...
потом тупо из буфера приёмника...
static int [] RX_int_wavr = new int[1472]; //1472 Ethernet
переписываем байты в буфер плеера...
static byte[] din_byte_wavr = new byte[1420];//1420wavr(динамик)
вот так...
//16v+32p+1420date+4crc=1472byte//UDP: MAX=1472.
xxRX_wavr = 0;
for (xRX_wavr=48; xRX_wavr<1468; xRX_wavr++) {
din_byte_wavr[xxRX_wavr] = (byte) RX_int_wavr[xRX_wavr];//int > din(динамик)
xxRX_wavr++; //1420
};
потом передаём плееру...
RX_line.write(din_byte_wavr, 0, din_byte_wavr.length);//1420wav(динамик)
плеер играет...))
...
всё))
Добавлено after 52 minutes 53 seconds:к слову... в android есть ещё одна интересная библиотека... Android Player.
у Android Player есть встроенный кодер/декодер MP3 ! ))
с его помощью мы можем записывать/читать наш звук в формате MP3.
можем переводить наш WAV > MP3 и наоборот MP3 > WAV.
будем иметь ввиду)) потом поиграемся))
а можем даже сделать интернет радио... из android))
1-открываем простой плеер на ПК...
2-берём IP адрес и номер порта...
- IP.jpg
- (66.93 KiB) Скачиваний: 19
3-закидываем IP адрес и номер порта в плеер на ПК... плеер подключается к серверу...
4-при подключении к серверу плеер передаёт обычный GET запрос...
GET / HTTP/1.0
Accept: */*
User-Agent: WINAMP
Icy-MetaData:1
Host: 205.164.62.15:10032
5-сервер передаёт плееру обычный HTTP ответ...
HTTP/1.0 200 OK
icy-br: 192
icy-pub: 1
icy-description: 1.FM - Radio Gaia
icy-url:
http://1.fmInstance-id: ab50168940339c8583715106639d847f
Cache-Control: no-cache
Server: AIS Streaming Server 8.6.5
icy-genre: Chill
Expires: Mon, 26 Jul 1997 05:00:00 GMT
icy-metaint: 8192
Pragma: no-cache
icy-name: 1.FM - Radio Gaia
Connection: close
Content-Type: audio/mpeg
6-и сразу же сервер передаёт плееру MP3 поток...
ff fb b2 64 e7 88 c5 ce 68 d3 53 6f 64 50 77 ca...
Добавлено after 2 minutes 7 seconds:играет музыка))
7-подробней...
вначале идёт заголовок (ff)... тип файла(fb)... битрейт... и т.д.
ff fb b2 64 e7 88 c5 ce 68 d3 53 6f 64 50 77 ca...
потом сам MP3 поток...
Всё ! ))
аналогично можно сделать на android...
но сначала надо доделать наш мессенджер))
в принципе он уже работает)) осталось решить вопрос с IP сервера...
мой провайдер решил больше не выдавать статических IP... вместо этого выдаёт динамические IP... из своего списка))
типа решил экономить на IP ))
как мне теперь найти свой IP...