Browse Source

MT#56008 support different Opus "applications"

Also change the default Opus application to "VoIP"

Change-Id: Ied52380989f0abf4ee54246cf657edc4ca50232f
pull/1579/head
Richard Fuchs 3 years ago
parent
commit
52dd8320a5
2 changed files with 130 additions and 14 deletions
  1. +14
    -2
      lib/codeclib.c
  2. +116
    -12
      t/auto-daemon-tests.pl

+ 14
- 2
lib/codeclib.c View File

@ -1857,12 +1857,24 @@ struct libopus_encoder_options {
int vbr_constraint;
int fec;
int pl;
int application;
};
static void libopus_set_enc_opts(str *key, str *val, void *p) {
struct libopus_encoder_options *opts = p;
if (!str_cmp(key, "complexity") || !str_cmp(key, "compression_level"))
opts->complexity = str_to_i(val, -1);
else if (!str_cmp(key, "application")) {
if (!str_cmp(val, "VOIP") || !str_cmp(val, "VoIP") || !str_cmp(val, "voip"))
opts->application = OPUS_APPLICATION_VOIP;
else if (!str_cmp(val, "audio"))
opts->application = OPUS_APPLICATION_AUDIO;
else if (!str_cmp(val, "low-delay") || !str_cmp(val, "low delay") || !str_cmp(val, "lowdelay"))
opts->application = OPUS_APPLICATION_RESTRICTED_LOWDELAY;
else
ilog(LOG_WARN | LOG_FLAG_LIMIT, "Unknown Opus application: '" STR_FORMAT "'",
STR_FMT(val));
}
else if (!str_cmp(key, "vbr")) {
// aligned with ffmpeg vbr=0/1/2 option
opts->vbr = str_to_i(val, -1);
@ -1902,12 +1914,12 @@ static const char *libopus_encoder_init(encoder_t *enc, const str *extra_opts) {
return "invalid clock rate";
}
struct libopus_encoder_options opts = { .vbr = 1, .complexity = 10, };
struct libopus_encoder_options opts = { .vbr = 1, .complexity = 10, .application = OPUS_APPLICATION_VOIP };
codeclib_key_value_parse(extra_opts, true, libopus_set_enc_opts, &opts);
int err;
enc->u.opus = opus_encoder_create(enc->requested_format.clockrate, enc->requested_format.channels,
OPUS_APPLICATION_AUDIO, &err);
opts.application, &err);
if (!enc->u.opus) {
ilog(LOG_ERR, "Error from libopus: %s", opus_strerror(err));
return "failed to alloc codec context";


+ 116
- 12
t/auto-daemon-tests.pl View File

@ -1231,6 +1231,57 @@ a=sendrecv
a=rtcp:PORT
SDP
snd($sock_a, $port_b, rtp(8, 1000, 3000, 0x1234, $pcma_1));
($ssrc) = rcv($sock_b, $port_a, rtpm(96, 1000, 3000, -1, "\x0c\x87\xfc\xe4\x56\x3b\x03\xec\x1f\xa8\xa2\x3f\xda\xc0\xca\x15\xec\x3e\xd6\x05\x1d\xc1\xf3\x38\x93\x63\xe5\x28\x64\xbf\x21\x34\x71\x69\xd6\xe3\x22\x5a\x2c\x7c\xbc\x8b\x59\x6e\x40"));
snd($sock_a, $port_b, rtp(8, 1001, 3160, 0x1234, $pcma_1));
rcv($sock_b, $port_a, rtpm(96, 1001, 3960, $ssrc, "\x0c\x88\x00\xde\x27\xd1\x44\xf8\x72\xc6\x43\x79\x7e\xd4\xa4\xfe\x15\xd8\x09\x2f\x9b\x25\xef\x75\x7c\x5e\x8e\xd0\x4a\x6f\x3a\xb6\x7b\x93\x6a\x95\xd6\x9b\x8b\x1b\xcb\x69\x40"));
($sock_a, $sock_b) = new_call([qw(198.51.100.16 6032)], [qw(198.51.100.16 6034)]);
($port_a) = offer('opus encoder control, application audio',
{ codec => { transcode => ['opus/48000/2////application=audio'] } }, <<SDP);
v=0
o=- 1545997027 1 IN IP4 172.17.0.2
s=tester
c=IN IP4 198.51.100.16
t=0 0
m=audio 6032 RTP/AVP 8
----------------------------------
v=0
o=- 1545997027 1 IN IP4 172.17.0.2
s=tester
c=IN IP4 203.0.113.1
t=0 0
m=audio PORT RTP/AVP 8 96
a=rtpmap:8 PCMA/8000
a=rtpmap:96 opus/48000/2
a=sendrecv
a=rtcp:PORT
SDP
($port_b) = answer('opus encoder control, application audio',
{ }, <<SDP);
v=0
o=- 1545997027 1 IN IP4 172.17.0.2
s=tester
c=IN IP4 198.51.100.16
t=0 0
m=audio 6034 RTP/AVP 96
a=rtpmap:96 opus/48000/2
----------------------------------
v=0
o=- 1545997027 1 IN IP4 172.17.0.2
s=tester
c=IN IP4 203.0.113.1
t=0 0
m=audio PORT RTP/AVP 8
a=rtpmap:8 PCMA/8000
a=sendrecv
a=rtcp:PORT
SDP
snd($sock_a, $port_b, rtp(8, 1000, 3000, 0x1234, $pcma_1));
($ssrc) = rcv($sock_b, $port_a, rtpm(96, 1000, 3000, -1, "\x9c\xb5\x45\xde\xb5\x38\xab\x45\x5d\x2d\x35\x87\x19\x3c\x65\xfc\x2a\x06\xd8\xe0\x22\x68\x33\xe8\xaa\x2b\xef\x61\x4e\x2c\x59\xd2\x43\x47\xd4\x2b\xc6\x09\x7b\x1b\xd0\xd2\x84\x60\xa1\xec\x94\x98\x35\x90\x3b\x41\x1b\xc2\xa2\x2c\xbc\xe4\x4e\xc6\x56\x2d\xa1\x86\x7c\xda\x28\xff\x80\x22\x15\xdb\x91\x6c\x72\x40\x28\x3d\xdb\xa5\x00\xb5\xdb\xf4\x2b\x1b\xdd\x5a\x27\xa2\x8c\xcc\xdf\x7e\xdd\x6a\xe0\xe5\x7a\xb2\xcc\x7b\x77\x95\x13\x54\xb5\x60\xdf\xdc\xd7\xcd\x32\x31\xb4\x5f\x31\xd2\x74\x41\xdf\x6f\x52\x2c\x80\x6d\xb6\xde\xdd\xad\x81\xb6\xcb\xad"));
snd($sock_a, $port_b, rtp(8, 1001, 3160, 0x1234, $pcma_1));
@ -1283,9 +1334,9 @@ a=rtcp:PORT
SDP
snd($sock_a, $port_b, rtp(8, 1000, 3000, 0x1234, $pcma_1));
($ssrc) = rcv($sock_b, $port_a, rtpm(96, 1000, 3000, -1, "\x08\x83\xf8\xa5\xd0\x1c\xfe\x12\x46\x19\xf1\x1c\x8b\xa3\x46\x3f\xe2\x95\xaf\xbc\x1d\x74\x9c\xa4\x2d\x9f\x00\x8b\x94\x31\xda\x52\x5a\x8f\x45\x70\x19\xa2"));
($ssrc) = rcv($sock_b, $port_a, rtpm(96, 1000, 3000, -1, "\x08\x83\xf8\xa5\xd0\x1c\xfe\x12\x46\x1a\x15\x34\xc5\x95\xdf\xb7\xe6\xff\x07\xf0\xc0\x9f\x92\x0e\xf8\xe3\x62\x66\x7b\xab\x44\xf6\x64\xc2\x2e\xe6\xc5\x0c\xc1"));
snd($sock_a, $port_b, rtp(8, 1001, 3160, 0x1234, $pcma_1));
rcv($sock_b, $port_a, rtpm(96, 1001, 3960, $ssrc, "\x08\xb7\x46\xf0\xe6\xab\xd0\x63\xd8\x86\x62\x55\x90\x2b\xe5\x51\xe3\xac\x70\x2a\x95\x8c\x3e\xe5\x46"));
rcv($sock_b, $port_a, rtpm(96, 1001, 3960, $ssrc, "\x08\xb7\x45\x22\x77\xf9\xb6\x22\xb1\x05\x02\xad\x97\x23\xa1\x2a\xdd\xe1\xa0\xea\x89\x8a\x9e\x5b\x9a\x43\x2c\x7f\x07\xeb\xdc\x90\xe3\xd4"));
@ -1335,9 +1386,9 @@ a=rtcp:PORT
SDP
snd($sock_a, $port_b, rtp(8, 1000, 3000, 0x1234, $pcma_1));
($ssrc) = rcv($sock_b, $port_a, rtpm(96, 1000, 3000, -1, "\x9c\x7b\x19\x8d\xf7\x3c\x6e\x75\xaa\x82\x29\x26\x03\x17\xc3\x58\xb0\xc6\x75\xdb\x04\x80\x15\x29\x0c\x75\xf9\x9e\xc2\x64\xd9\xa0\x60\x57\x34\x87\x48\xe3\xe0\x80\xda\xcf\x7e\x5c\x08\x66\xdd\xc0\x8a\xf3\x39\x88\xbd\xef\xe4\xf0\x70\x4a\xfe\xe9\x67\x1a\xae\x9a\xa1\xa9\x8e\xa1\x25\x39\x93\x08\xef\x82\x18\x08\xb4\x24\x2d\xaf\x97\x35\x4b\xa4\x2a\xae\x5a\x4f\xe3\xfb\xd3\xa6\x65\x59\x38\x4e\x70\xf0\x75\x7c\x08\xd1\x1d\x3a\x16\x21\x07\x9b\xd8\xa5\x3d\x22\x81\xe5\xb7\x0e\xaa\x39\x68\xad\xdd\x78\x7a\xed\x5e\x89\x75\xfd\x6f\x69\x3f\x03\xc2\xbd\x26\x6a\xaf"));
($ssrc) = rcv($sock_b, $port_a, rtpm(96, 1000, 3000, -1, "\x0c\x87\xfc\xe0\xa1\x53\x64\xfa\xe4\xd0\x64\xb2\x52\xd5\xdc\x53\x69\xf5\x5c\x43\x4d\x33\xf3\x37\x61\xd7\x88\x59\x91\xf1\xff\x75\x62\x38\xb6\xea\x3a\xb9\x1e\x21\x6b\x75\x60"));
snd($sock_a, $port_b, rtp(8, 1001, 3160, 0x1234, $pcma_1));
rcv($sock_b, $port_a, rtpm(96, 1001, 3960, $ssrc, "\x9c\x65\xd7\x89\x49\x43\x59\x41\x1c\x37\xf0\x8a\x86\x0f\xbc\x21\x1c\xc5\x36\xa6\xf7\x86\xb3\xe3\x8d\x2d\x1d\x93\x65\x15\x22\xb3\x0b\xd2\xee\x36\xa7\x04\x18\x2c\x72\x16\x7d\x8a\xa7\x02\x2d\xee\xd9\xf7\x14\x40\x78\x60\x54\x33\x1b\x7b\xbb\x09\xcc\x08\xea\x61\x9f\x2e\x92\x86\x6e\x61\x04\x0d\x1f\x24\xb3\x9e\x15\xd8\x9d\x73\xcb\x85\x8f\x9e\x63\x22\xf6\x62\xfe\xed\x50\xff\xc0\x5a\xd8\x9f"));
rcv($sock_b, $port_a, rtpm(96, 1001, 3960, $ssrc, "\x0c\x88\x00\xc9\xbf\x49\xbd\xf8\xd1\xc5\xee\xd0\x60\xe8\x4a\xf3\xcf\xae\xf6\xc0\x93\xc7\x52\x31\x0a\x14\xbd\xda\x59\xf5\xac\xf1\x1b\x26\xe0\x56\xcd\x69\xa8\x9d\xd3\x1f\xb0\x40"));
($sock_a, $sock_b) = new_call([qw(198.51.100.16 6012)], [qw(198.51.100.16 6014)]);
@ -1385,9 +1436,9 @@ a=rtcp:PORT
SDP
snd($sock_a, $port_b, rtp(8, 1000, 3000, 0x1234, $pcma_1));
($ssrc) = rcv($sock_b, $port_a, rtpm(96, 1000, 3000, -1, "\x08\x83\x9c\x5e\xdd\x07\x1e\x3c\xdf\xb6\xd6\x1e\xac\x5f\xb8\x27\x26\xc6\xf3\xa3\xef\xab\x0c\x2b\xce\x35\x08\xe8\x52\x55\xb9\x73\xf2\xeb\xc2"));
($ssrc) = rcv($sock_b, $port_a, rtpm(96, 1000, 3000, -1, "\x08\x83\x9c\x5e\xdd\x07\x1e\x3c\xdf\xb8\xc7\x57\x10\xa5\xd1\xef\x21\x4d\x01\x4b\x82\x9d\x51\x05\x6c\x63\x55\x70\xe7\xe7\x8b\x21\xfe\x99\x2c"));
snd($sock_a, $port_b, rtp(8, 1001, 3160, 0x1234, $pcma_1));
rcv($sock_b, $port_a, rtpm(96, 1001, 3960, $ssrc, "\x08\xb6\x61\x7f\x42\xc4\x86\x2d\x41\xf4\x0c\x90\xf5\xa4\x82\x27\xee\x44\x85\xe1\x7b\x3a\x8f"));
rcv($sock_b, $port_a, rtpm(96, 1001, 3960, $ssrc, "\x08\xb6\x61\x7f\x50\x7f\x50\xd1\xf3\x37\x74\x49\x47\xcf\x9e\x00\x78\x67\xe4\x12\x51\xcc\x1f\x12\xab\x13\x41\xf2\x8c"));
@ -1435,6 +1486,58 @@ a=sendrecv
a=rtcp:PORT
SDP
snd($sock_b, $port_a, rtp(8, 1000, 3000, 0x1234, $pcma_1));
($ssrc) = rcv($sock_a, $port_b, rtpm(96, 1000, 3000, -1, "\x0c\x87\xfc\xe4\x56\x3b\x03\xec\x1f\xa8\xa2\x3f\xda\xc0\xca\x15\xec\x3e\xd6\x05\x1d\xc1\xf3\x38\x93\x63\xe5\x28\x64\xbf\x21\x34\x71\x69\xd6\xe3\x22\x5a\x2c\x7c\xbc\x8b\x59\x6e\x40"));
snd($sock_b, $port_a, rtp(8, 1001, 3160, 0x1234, $pcma_1));
rcv($sock_a, $port_b, rtpm(96, 1001, 3960, $ssrc, "\x0c\x88\x00\xde\x27\xd1\x44\xf8\x72\xc6\x43\x79\x7e\xd4\xa4\xfe\x15\xd8\x09\x2f\x9b\x25\xef\x75\x7c\x5e\x8e\xd0\x4a\x6f\x3a\xb6\x7b\x93\x6a\x95\xd6\x9b\x8b\x1b\xcb\x69\x40"));
($sock_a, $sock_b) = new_call([qw(198.51.100.16 6048)], [qw(198.51.100.16 6050)]);
($port_a) = offer('opus encoder control, reverse tc, application audio',
{ codec => { transcode => ['PCMA'], set => ['opus/48000/2////application=audio'] } }, <<SDP);
v=0
o=- 1545997027 1 IN IP4 172.17.0.2
s=tester
c=IN IP4 198.51.100.16
t=0 0
m=audio 6048 RTP/AVP 96
a=rtpmap:96 opus/48000/2
----------------------------------
v=0
o=- 1545997027 1 IN IP4 172.17.0.2
s=tester
c=IN IP4 203.0.113.1
t=0 0
m=audio PORT RTP/AVP 96 8
a=rtpmap:96 opus/48000/2
a=rtpmap:8 PCMA/8000
a=sendrecv
a=rtcp:PORT
SDP
($port_b) = answer('opus encoder control, reverse tc, application audio',
{ }, <<SDP);
v=0
o=- 1545997027 1 IN IP4 172.17.0.2
s=tester
c=IN IP4 198.51.100.16
t=0 0
m=audio 6050 RTP/AVP 8
----------------------------------
v=0
o=- 1545997027 1 IN IP4 172.17.0.2
s=tester
c=IN IP4 203.0.113.1
t=0 0
m=audio PORT RTP/AVP 96
a=rtpmap:96 opus/48000/2
a=sendrecv
a=rtcp:PORT
SDP
snd($sock_b, $port_a, rtp(8, 1000, 3000, 0x1234, $pcma_1));
($ssrc) = rcv($sock_a, $port_b, rtpm(96, 1000, 3000, -1, "\x9c\xb5\x45\xde\xb5\x38\xab\x45\x5d\x2d\x35\x87\x19\x3c\x65\xfc\x2a\x06\xd8\xe0\x22\x68\x33\xe8\xaa\x2b\xef\x61\x4e\x2c\x59\xd2\x43\x47\xd4\x2b\xc6\x09\x7b\x1b\xd0\xd2\x84\x60\xa1\xec\x94\x98\x35\x90\x3b\x41\x1b\xc2\xa2\x2c\xbc\xe4\x4e\xc6\x56\x2d\xa1\x86\x7c\xda\x28\xff\x80\x22\x15\xdb\x91\x6c\x72\x40\x28\x3d\xdb\xa5\x00\xb5\xdb\xf4\x2b\x1b\xdd\x5a\x27\xa2\x8c\xcc\xdf\x7e\xdd\x6a\xe0\xe5\x7a\xb2\xcc\x7b\x77\x95\x13\x54\xb5\x60\xdf\xdc\xd7\xcd\x32\x31\xb4\x5f\x31\xd2\x74\x41\xdf\x6f\x52\x2c\x80\x6d\xb6\xde\xdd\xad\x81\xb6\xcb\xad"));
snd($sock_b, $port_a, rtp(8, 1001, 3160, 0x1234, $pcma_1));
@ -1442,6 +1545,7 @@ rcv($sock_a, $port_b, rtpm(96, 1001, 3960, $ssrc, "\x9c\xaa\xb1\x2b\x6c\x51\xf2\
($sock_a, $sock_b) = new_call([qw(198.51.100.16 6020)], [qw(198.51.100.16 6022)]);
($port_a) = offer('opus encoder lower bitrate, reverse tc',
@ -1487,9 +1591,9 @@ a=rtcp:PORT
SDP
snd($sock_b, $port_a, rtp(8, 1000, 3000, 0x1234, $pcma_1));
($ssrc) = rcv($sock_a, $port_b, rtpm(96, 1000, 3000, -1, "\x08\x83\xf8\xa5\xd0\x1c\xfe\x12\x46\x19\xf1\x1c\x8b\xa3\x46\x3f\xe2\x95\xaf\xbc\x1d\x74\x9c\xa4\x2d\x9f\x00\x8b\x94\x31\xda\x52\x5a\x8f\x45\x70\x19\xa2"));
($ssrc) = rcv($sock_a, $port_b, rtpm(96, 1000, 3000, -1, "\x08\x83\xf8\xa5\xd0\x1c\xfe\x12\x46\x1a\x15\x34\xc5\x95\xdf\xb7\xe6\xff\x07\xf0\xc0\x9f\x92\x0e\xf8\xe3\x62\x66\x7b\xab\x44\xf6\x64\xc2\x2e\xe6\xc5\x0c\xc1"));
snd($sock_b, $port_a, rtp(8, 1001, 3160, 0x1234, $pcma_1));
rcv($sock_a, $port_b, rtpm(96, 1001, 3960, $ssrc, "\x08\xb7\x46\xf0\xe6\xab\xd0\x63\xd8\x86\x62\x55\x90\x2b\xe5\x51\xe3\xac\x70\x2a\x95\x8c\x3e\xe5\x46"));
rcv($sock_a, $port_b, rtpm(96, 1001, 3960, $ssrc, "\x08\xb7\x45\x22\x77\xf9\xb6\x22\xb1\x05\x02\xad\x97\x23\xa1\x2a\xdd\xe1\xa0\xea\x89\x8a\x9e\x5b\x9a\x43\x2c\x7f\x07\xeb\xdc\x90\xe3\xd4"));
@ -1538,9 +1642,9 @@ a=rtcp:PORT
SDP
snd($sock_b, $port_a, rtp(8, 1000, 3000, 0x1234, $pcma_1));
($ssrc) = rcv($sock_a, $port_b, rtpm(96, 1000, 3000, -1, "\x9c\x7b\x19\x8d\xf7\x3c\x6e\x75\xaa\x82\x29\x26\x03\x17\xc3\x58\xb0\xc6\x75\xdb\x04\x80\x15\x29\x0c\x75\xf9\x9e\xc2\x64\xd9\xa0\x60\x57\x34\x87\x48\xe3\xe0\x80\xda\xcf\x7e\x5c\x08\x66\xdd\xc0\x8a\xf3\x39\x88\xbd\xef\xe4\xf0\x70\x4a\xfe\xe9\x67\x1a\xae\x9a\xa1\xa9\x8e\xa1\x25\x39\x93\x08\xef\x82\x18\x08\xb4\x24\x2d\xaf\x97\x35\x4b\xa4\x2a\xae\x5a\x4f\xe3\xfb\xd3\xa6\x65\x59\x38\x4e\x70\xf0\x75\x7c\x08\xd1\x1d\x3a\x16\x21\x07\x9b\xd8\xa5\x3d\x22\x81\xe5\xb7\x0e\xaa\x39\x68\xad\xdd\x78\x7a\xed\x5e\x89\x75\xfd\x6f\x69\x3f\x03\xc2\xbd\x26\x6a\xaf"));
($ssrc) = rcv($sock_a, $port_b, rtpm(96, 1000, 3000, -1, "\x0c\x87\xfc\xe0\xa1\x53\x64\xfa\xe4\xd0\x64\xb2\x52\xd5\xdc\x53\x69\xf5\x5c\x43\x4d\x33\xf3\x37\x61\xd7\x88\x59\x91\xf1\xff\x75\x62\x38\xb6\xea\x3a\xb9\x1e\x21\x6b\x75\x60"));
snd($sock_b, $port_a, rtp(8, 1001, 3160, 0x1234, $pcma_1));
rcv($sock_a, $port_b, rtpm(96, 1001, 3960, $ssrc, "\x9c\x65\xd7\x89\x49\x43\x59\x41\x1c\x37\xf0\x8a\x86\x0f\xbc\x21\x1c\xc5\x36\xa6\xf7\x86\xb3\xe3\x8d\x2d\x1d\x93\x65\x15\x22\xb3\x0b\xd2\xee\x36\xa7\x04\x18\x2c\x72\x16\x7d\x8a\xa7\x02\x2d\xee\xd9\xf7\x14\x40\x78\x60\x54\x33\x1b\x7b\xbb\x09\xcc\x08\xea\x61\x9f\x2e\x92\x86\x6e\x61\x04\x0d\x1f\x24\xb3\x9e\x15\xd8\x9d\x73\xcb\x85\x8f\x9e\x63\x22\xf6\x62\xfe\xed\x50\xff\xc0\x5a\xd8\x9f"));
rcv($sock_a, $port_b, rtpm(96, 1001, 3960, $ssrc, "\x0c\x88\x00\xc9\xbf\x49\xbd\xf8\xd1\xc5\xee\xd0\x60\xe8\x4a\xf3\xcf\xae\xf6\xc0\x93\xc7\x52\x31\x0a\x14\xbd\xda\x59\xf5\xac\xf1\x1b\x26\xe0\x56\xcd\x69\xa8\x9d\xd3\x1f\xb0\x40"));
@ -1589,9 +1693,9 @@ a=rtcp:PORT
SDP
snd($sock_b, $port_a, rtp(8, 1000, 3000, 0x1234, $pcma_1));
($ssrc) = rcv($sock_a, $port_b, rtpm(96, 1000, 3000, -1, "\x08\x83\x9c\x5e\xdd\x07\x1e\x3c\xdf\xb6\xd6\x1e\xac\x5f\xb8\x27\x26\xc6\xf3\xa3\xef\xab\x0c\x2b\xce\x35\x08\xe8\x52\x55\xb9\x73\xf2\xeb\xc2"));
($ssrc) = rcv($sock_a, $port_b, rtpm(96, 1000, 3000, -1, "\x08\x83\x9c\x5e\xdd\x07\x1e\x3c\xdf\xb8\xc7\x57\x10\xa5\xd1\xef\x21\x4d\x01\x4b\x82\x9d\x51\x05\x6c\x63\x55\x70\xe7\xe7\x8b\x21\xfe\x99\x2c"));
snd($sock_b, $port_a, rtp(8, 1001, 3160, 0x1234, $pcma_1));
rcv($sock_a, $port_b, rtpm(96, 1001, 3960, $ssrc, "\x08\xb6\x61\x7f\x42\xc4\x86\x2d\x41\xf4\x0c\x90\xf5\xa4\x82\x27\xee\x44\x85\xe1\x7b\x3a\x8f"));
rcv($sock_a, $port_b, rtpm(96, 1001, 3960, $ssrc, "\x08\xb6\x61\x7f\x50\x7f\x50\xd1\xf3\x37\x74\x49\x47\xcf\x9e\x00\x78\x67\xe4\x12\x51\xcc\x1f\x12\xab\x13\x41\xf2\x8c"));
}


Loading…
Cancel
Save