Skip to content
This repository was archived by the owner on Sep 3, 2024. It is now read-only.

Repository files navigation

AudioSocket

--计划在原AudioSocket基础上,增加 DTMF 信号的传递功能,并不会实际产生和检测DTMF信息,需要在SOCKET另一端实现此功能。

###--希望能成功实现!

###--It is planned to add the transmission function of DTMF signals on the basis of the original AudioSocket. It will not actually generate and detect DTMF information. This function needs to be implemented at the other end of the network.

###--Hope it can be achieved successfully!

AudioSocket is a simple TCP-based protocol for sending and receiving realtime audio streams.

There exists a protocol definition (below), a Go library, and Asterisk application and channel interfaces.

NOTE: as of 2020-01-15, AudioSocket has been included in the upstream Asterisk system. While I am leaving the Asterisk patches here for use with previous versions, the Asterisk code in this repository should be considered obsolete. The Go code is up-to-date, maintained, and this is the primary source for it.

Protocol definition

The singular design goal of AudioSocket is to present the simplest possible audio streaming protocol, initially based on the constraints of Asterisk audio. Each packet contains a three-byte header and a variable payload. The header is composed of a one-byte type and a two-byte length indicator.

The minimum message length is three bytes: type and payload-length. Hangup indication, for instance, is 0x00 0x00 0x00.

Types

  • 0x00 - Terminate the connection (socket closure is also sufficient)
  • 0x01 - Payload will contain the UUID (16-byte binary representation) for the audio stream
  • 0x02 - Payload is Dtmf start & stop signal, total 6 bytes. 1 byte state: 1:start dtmf, 0:stop dtmf; 1 byte code , 1-9, *, #, A-D; 4 bytes int duration, little-endian (0 for dtmf begin)
  • 0x03 - Payload is AST_CONTROL_(ANSWER RING BUSY HANGUP ....see frame.h ) base control signal, 1 byte.
  • 0x10 - Payload is signed linear, 16-bit, 8kHz, mono PCM (little-endian)
  • 0xff - An error has occurred; payload is the (optional) application-specific error code. Asterisk-generated error codes are listed below.

Payload length

The payload length is a 16-bit unsigned integer (big endian) indicating how many bytes are in the payload.

Payload

The content of the payload is defined by the header: type and length.

Asterisk error codes

Error codes are application-specific. The error codes for Asterisk are single-byte, bit-packed error codes:

  • 0x01 - hangup of calling party
  • 0x02 - frame forwarding error
  • 0x04 - memory (allocation) error

Asterisk usage

There are two Asterisk implementations: a channel interface and a dialplan application interface. Each of these lends itself to simplify a different use-case, but they work in exactly the same way.

The following examples demonstrate an AudioSocket connection to a server at server.example.com running on TCP port 9092. The UUID (which is chosen arbitrarily) of the call is 40325ec2-5efd-4bd3-805f-53576e581d13.

Dialplan application:

exten = 100,1,Verbose("Call to AudioSocket via Dialplan Application")
same = n,Answer()
same = n,AudioSocket(40325ec2-5efd-4bd3-805f-53576e581d13,server.example.com:9092)
same = n,Hangup()

Channel interface:

exten = 101,1,Verbose("Call to AudioSocket via Channel interface")
same = n,Answer()
same = n,Dial(AudioSocket/server.example.com:9092/40325ec2-5efd-4bd3-805f-53576e581d13)
same = n,Hangup()

About

Simple bidirectional audio protocol

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - PKSHATechnology/audiosocket: Simple bidirectional audio protocol · GitHub
Skip to content
This repository was archived by the owner on Sep 3, 2024. It is now read-only.

Repository files navigation

AudioSocket

--计划在原AudioSocket基础上,增加 DTMF 信号的传递功能,并不会实际产生和检测DTMF信息,需要在SOCKET另一端实现此功能。

###--希望能成功实现!

###--It is planned to add the transmission function of DTMF signals on the basis of the original AudioSocket. It will not actually generate and detect DTMF information. This function needs to be implemented at the other end of the network.

###--Hope it can be achieved successfully!

AudioSocket is a simple TCP-based protocol for sending and receiving realtime audio streams.

There exists a protocol definition (below), a Go library, and Asterisk application and channel interfaces.

NOTE: as of 2020-01-15, AudioSocket has been included in the upstream Asterisk system. While I am leaving the Asterisk patches here for use with previous versions, the Asterisk code in this repository should be considered obsolete. The Go code is up-to-date, maintained, and this is the primary source for it.

Protocol definition

The singular design goal of AudioSocket is to present the simplest possible audio streaming protocol, initially based on the constraints of Asterisk audio. Each packet contains a three-byte header and a variable payload. The header is composed of a one-byte type and a two-byte length indicator.

The minimum message length is three bytes: type and payload-length. Hangup indication, for instance, is 0x00 0x00 0x00.

Types

  • 0x00 - Terminate the connection (socket closure is also sufficient)
  • 0x01 - Payload will contain the UUID (16-byte binary representation) for the audio stream
  • 0x02 - Payload is Dtmf start & stop signal, total 6 bytes. 1 byte state: 1:start dtmf, 0:stop dtmf; 1 byte code , 1-9, *, #, A-D; 4 bytes int duration, little-endian (0 for dtmf begin)
  • 0x03 - Payload is AST_CONTROL_(ANSWER RING BUSY HANGUP ....see frame.h ) base control signal, 1 byte.
  • 0x10 - Payload is signed linear, 16-bit, 8kHz, mono PCM (little-endian)
  • 0xff - An error has occurred; payload is the (optional) application-specific error code. Asterisk-generated error codes are listed below.

Payload length

The payload length is a 16-bit unsigned integer (big endian) indicating how many bytes are in the payload.

Payload

The content of the payload is defined by the header: type and length.

Asterisk error codes

Error codes are application-specific. The error codes for Asterisk are single-byte, bit-packed error codes:

  • 0x01 - hangup of calling party
  • 0x02 - frame forwarding error
  • 0x04 - memory (allocation) error

Asterisk usage

There are two Asterisk implementations: a channel interface and a dialplan application interface. Each of these lends itself to simplify a different use-case, but they work in exactly the same way.

The following examples demonstrate an AudioSocket connection to a server at server.example.com running on TCP port 9092. The UUID (which is chosen arbitrarily) of the call is 40325ec2-5efd-4bd3-805f-53576e581d13.

Dialplan application:

exten = 100,1,Verbose("Call to AudioSocket via Dialplan Application")
same = n,Answer()
same = n,AudioSocket(40325ec2-5efd-4bd3-805f-53576e581d13,server.example.com:9092)
same = n,Hangup()

Channel interface:

exten = 101,1,Verbose("Call to AudioSocket via Channel interface")
same = n,Answer()
same = n,Dial(AudioSocket/server.example.com:9092/40325ec2-5efd-4bd3-805f-53576e581d13)
same = n,Hangup()

About

Simple bidirectional audio protocol

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - PKSHATechnology/audiosocket: Simple bidirectional audio protocol · GitHub
Skip to content
This repository was archived by the owner on Sep 3, 2024. It is now read-only.

Repository files navigation

AudioSocket

--计划在原AudioSocket基础上,增加 DTMF 信号的传递功能,并不会实际产生和检测DTMF信息,需要在SOCKET另一端实现此功能。

###--希望能成功实现!

###--It is planned to add the transmission function of DTMF signals on the basis of the original AudioSocket. It will not actually generate and detect DTMF information. This function needs to be implemented at the other end of the network.

###--Hope it can be achieved successfully!

AudioSocket is a simple TCP-based protocol for sending and receiving realtime audio streams.

There exists a protocol definition (below), a Go library, and Asterisk application and channel interfaces.

NOTE: as of 2020-01-15, AudioSocket has been included in the upstream Asterisk system. While I am leaving the Asterisk patches here for use with previous versions, the Asterisk code in this repository should be considered obsolete. The Go code is up-to-date, maintained, and this is the primary source for it.

Protocol definition

The singular design goal of AudioSocket is to present the simplest possible audio streaming protocol, initially based on the constraints of Asterisk audio. Each packet contains a three-byte header and a variable payload. The header is composed of a one-byte type and a two-byte length indicator.

The minimum message length is three bytes: type and payload-length. Hangup indication, for instance, is 0x00 0x00 0x00.

Types

  • 0x00 - Terminate the connection (socket closure is also sufficient)
  • 0x01 - Payload will contain the UUID (16-byte binary representation) for the audio stream
  • 0x02 - Payload is Dtmf start & stop signal, total 6 bytes. 1 byte state: 1:start dtmf, 0:stop dtmf; 1 byte code , 1-9, *, #, A-D; 4 bytes int duration, little-endian (0 for dtmf begin)
  • 0x03 - Payload is AST_CONTROL_(ANSWER RING BUSY HANGUP ....see frame.h ) base control signal, 1 byte.
  • 0x10 - Payload is signed linear, 16-bit, 8kHz, mono PCM (little-endian)
  • 0xff - An error has occurred; payload is the (optional) application-specific error code. Asterisk-generated error codes are listed below.

Payload length

The payload length is a 16-bit unsigned integer (big endian) indicating how many bytes are in the payload.

Payload

The content of the payload is defined by the header: type and length.

Asterisk error codes

Error codes are application-specific. The error codes for Asterisk are single-byte, bit-packed error codes:

  • 0x01 - hangup of calling party
  • 0x02 - frame forwarding error
  • 0x04 - memory (allocation) error

Asterisk usage

There are two Asterisk implementations: a channel interface and a dialplan application interface. Each of these lends itself to simplify a different use-case, but they work in exactly the same way.

The following examples demonstrate an AudioSocket connection to a server at server.example.com running on TCP port 9092. The UUID (which is chosen arbitrarily) of the call is 40325ec2-5efd-4bd3-805f-53576e581d13.

Dialplan application:

exten = 100,1,Verbose("Call to AudioSocket via Dialplan Application")
same = n,Answer()
same = n,AudioSocket(40325ec2-5efd-4bd3-805f-53576e581d13,server.example.com:9092)
same = n,Hangup()

Channel interface:

exten = 101,1,Verbose("Call to AudioSocket via Channel interface")
same = n,Answer()
same = n,Dial(AudioSocket/server.example.com:9092/40325ec2-5efd-4bd3-805f-53576e581d13)
same = n,Hangup()

About

Simple bidirectional audio protocol

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - PKSHATechnology/audiosocket: Simple bidirectional audio protocol · GitHub
Skip to content
This repository was archived by the owner on Sep 3, 2024. It is now read-only.

Repository files navigation

AudioSocket

--计划在原AudioSocket基础上,增加 DTMF 信号的传递功能,并不会实际产生和检测DTMF信息,需要在SOCKET另一端实现此功能。

###--希望能成功实现!

###--It is planned to add the transmission function of DTMF signals on the basis of the original AudioSocket. It will not actually generate and detect DTMF information. This function needs to be implemented at the other end of the network.

###--Hope it can be achieved successfully!

AudioSocket is a simple TCP-based protocol for sending and receiving realtime audio streams.

There exists a protocol definition (below), a Go library, and Asterisk application and channel interfaces.

NOTE: as of 2020-01-15, AudioSocket has been included in the upstream Asterisk system. While I am leaving the Asterisk patches here for use with previous versions, the Asterisk code in this repository should be considered obsolete. The Go code is up-to-date, maintained, and this is the primary source for it.

Protocol definition

The singular design goal of AudioSocket is to present the simplest possible audio streaming protocol, initially based on the constraints of Asterisk audio. Each packet contains a three-byte header and a variable payload. The header is composed of a one-byte type and a two-byte length indicator.

The minimum message length is three bytes: type and payload-length. Hangup indication, for instance, is 0x00 0x00 0x00.

Types

  • 0x00 - Terminate the connection (socket closure is also sufficient)
  • 0x01 - Payload will contain the UUID (16-byte binary representation) for the audio stream
  • 0x02 - Payload is Dtmf start & stop signal, total 6 bytes. 1 byte state: 1:start dtmf, 0:stop dtmf; 1 byte code , 1-9, *, #, A-D; 4 bytes int duration, little-endian (0 for dtmf begin)
  • 0x03 - Payload is AST_CONTROL_(ANSWER RING BUSY HANGUP ....see frame.h ) base control signal, 1 byte.
  • 0x10 - Payload is signed linear, 16-bit, 8kHz, mono PCM (little-endian)
  • 0xff - An error has occurred; payload is the (optional) application-specific error code. Asterisk-generated error codes are listed below.

Payload length

The payload length is a 16-bit unsigned integer (big endian) indicating how many bytes are in the payload.

Payload

The content of the payload is defined by the header: type and length.

Asterisk error codes

Error codes are application-specific. The error codes for Asterisk are single-byte, bit-packed error codes:

  • 0x01 - hangup of calling party
  • 0x02 - frame forwarding error
  • 0x04 - memory (allocation) error

Asterisk usage

There are two Asterisk implementations: a channel interface and a dialplan application interface. Each of these lends itself to simplify a different use-case, but they work in exactly the same way.

The following examples demonstrate an AudioSocket connection to a server at server.example.com running on TCP port 9092. The UUID (which is chosen arbitrarily) of the call is 40325ec2-5efd-4bd3-805f-53576e581d13.

Dialplan application:

exten = 100,1,Verbose("Call to AudioSocket via Dialplan Application")
same = n,Answer()
same = n,AudioSocket(40325ec2-5efd-4bd3-805f-53576e581d13,server.example.com:9092)
same = n,Hangup()

Channel interface:

exten = 101,1,Verbose("Call to AudioSocket via Channel interface")
same = n,Answer()
same = n,Dial(AudioSocket/server.example.com:9092/40325ec2-5efd-4bd3-805f-53576e581d13)
same = n,Hangup()

About

Simple bidirectional audio protocol

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - PKSHATechnology/audiosocket: Simple bidirectional audio protocol · GitHub
Skip to content
This repository was archived by the owner on Sep 3, 2024. It is now read-only.

Repository files navigation

AudioSocket

--计划在原AudioSocket基础上,增加 DTMF 信号的传递功能,并不会实际产生和检测DTMF信息,需要在SOCKET另一端实现此功能。

###--希望能成功实现!

###--It is planned to add the transmission function of DTMF signals on the basis of the original AudioSocket. It will not actually generate and detect DTMF information. This function needs to be implemented at the other end of the network.

###--Hope it can be achieved successfully!

AudioSocket is a simple TCP-based protocol for sending and receiving realtime audio streams.

There exists a protocol definition (below), a Go library, and Asterisk application and channel interfaces.

NOTE: as of 2020-01-15, AudioSocket has been included in the upstream Asterisk system. While I am leaving the Asterisk patches here for use with previous versions, the Asterisk code in this repository should be considered obsolete. The Go code is up-to-date, maintained, and this is the primary source for it.

Protocol definition

The singular design goal of AudioSocket is to present the simplest possible audio streaming protocol, initially based on the constraints of Asterisk audio. Each packet contains a three-byte header and a variable payload. The header is composed of a one-byte type and a two-byte length indicator.

The minimum message length is three bytes: type and payload-length. Hangup indication, for instance, is 0x00 0x00 0x00.

Types

  • 0x00 - Terminate the connection (socket closure is also sufficient)
  • 0x01 - Payload will contain the UUID (16-byte binary representation) for the audio stream
  • 0x02 - Payload is Dtmf start & stop signal, total 6 bytes. 1 byte state: 1:start dtmf, 0:stop dtmf; 1 byte code , 1-9, *, #, A-D; 4 bytes int duration, little-endian (0 for dtmf begin)
  • 0x03 - Payload is AST_CONTROL_(ANSWER RING BUSY HANGUP ....see frame.h ) base control signal, 1 byte.
  • 0x10 - Payload is signed linear, 16-bit, 8kHz, mono PCM (little-endian)
  • 0xff - An error has occurred; payload is the (optional) application-specific error code. Asterisk-generated error codes are listed below.

Payload length

The payload length is a 16-bit unsigned integer (big endian) indicating how many bytes are in the payload.

Payload

The content of the payload is defined by the header: type and length.

Asterisk error codes

Error codes are application-specific. The error codes for Asterisk are single-byte, bit-packed error codes:

  • 0x01 - hangup of calling party
  • 0x02 - frame forwarding error
  • 0x04 - memory (allocation) error

Asterisk usage

There are two Asterisk implementations: a channel interface and a dialplan application interface. Each of these lends itself to simplify a different use-case, but they work in exactly the same way.

The following examples demonstrate an AudioSocket connection to a server at server.example.com running on TCP port 9092. The UUID (which is chosen arbitrarily) of the call is 40325ec2-5efd-4bd3-805f-53576e581d13.

Dialplan application:

exten = 100,1,Verbose("Call to AudioSocket via Dialplan Application")
same = n,Answer()
same = n,AudioSocket(40325ec2-5efd-4bd3-805f-53576e581d13,server.example.com:9092)
same = n,Hangup()

Channel interface:

exten = 101,1,Verbose("Call to AudioSocket via Channel interface")
same = n,Answer()
same = n,Dial(AudioSocket/server.example.com:9092/40325ec2-5efd-4bd3-805f-53576e581d13)
same = n,Hangup()

About

Simple bidirectional audio protocol

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - PKSHATechnology/audiosocket: Simple bidirectional audio protocol · GitHub
Skip to content
This repository was archived by the owner on Sep 3, 2024. It is now read-only.

Repository files navigation

AudioSocket

--计划在原AudioSocket基础上,增加 DTMF 信号的传递功能,并不会实际产生和检测DTMF信息,需要在SOCKET另一端实现此功能。

###--希望能成功实现!

###--It is planned to add the transmission function of DTMF signals on the basis of the original AudioSocket. It will not actually generate and detect DTMF information. This function needs to be implemented at the other end of the network.

###--Hope it can be achieved successfully!

AudioSocket is a simple TCP-based protocol for sending and receiving realtime audio streams.

There exists a protocol definition (below), a Go library, and Asterisk application and channel interfaces.

NOTE: as of 2020-01-15, AudioSocket has been included in the upstream Asterisk system. While I am leaving the Asterisk patches here for use with previous versions, the Asterisk code in this repository should be considered obsolete. The Go code is up-to-date, maintained, and this is the primary source for it.

Protocol definition

The singular design goal of AudioSocket is to present the simplest possible audio streaming protocol, initially based on the constraints of Asterisk audio. Each packet contains a three-byte header and a variable payload. The header is composed of a one-byte type and a two-byte length indicator.

The minimum message length is three bytes: type and payload-length. Hangup indication, for instance, is 0x00 0x00 0x00.

Types

  • 0x00 - Terminate the connection (socket closure is also sufficient)
  • 0x01 - Payload will contain the UUID (16-byte binary representation) for the audio stream
  • 0x02 - Payload is Dtmf start & stop signal, total 6 bytes. 1 byte state: 1:start dtmf, 0:stop dtmf; 1 byte code , 1-9, *, #, A-D; 4 bytes int duration, little-endian (0 for dtmf begin)
  • 0x03 - Payload is AST_CONTROL_(ANSWER RING BUSY HANGUP ....see frame.h ) base control signal, 1 byte.
  • 0x10 - Payload is signed linear, 16-bit, 8kHz, mono PCM (little-endian)
  • 0xff - An error has occurred; payload is the (optional) application-specific error code. Asterisk-generated error codes are listed below.

Payload length

The payload length is a 16-bit unsigned integer (big endian) indicating how many bytes are in the payload.

Payload

The content of the payload is defined by the header: type and length.

Asterisk error codes

Error codes are application-specific. The error codes for Asterisk are single-byte, bit-packed error codes:

  • 0x01 - hangup of calling party
  • 0x02 - frame forwarding error
  • 0x04 - memory (allocation) error

Asterisk usage

There are two Asterisk implementations: a channel interface and a dialplan application interface. Each of these lends itself to simplify a different use-case, but they work in exactly the same way.

The following examples demonstrate an AudioSocket connection to a server at server.example.com running on TCP port 9092. The UUID (which is chosen arbitrarily) of the call is 40325ec2-5efd-4bd3-805f-53576e581d13.

Dialplan application:

exten = 100,1,Verbose("Call to AudioSocket via Dialplan Application")
same = n,Answer()
same = n,AudioSocket(40325ec2-5efd-4bd3-805f-53576e581d13,server.example.com:9092)
same = n,Hangup()

Channel interface:

exten = 101,1,Verbose("Call to AudioSocket via Channel interface")
same = n,Answer()
same = n,Dial(AudioSocket/server.example.com:9092/40325ec2-5efd-4bd3-805f-53576e581d13)
same = n,Hangup()

About

Simple bidirectional audio protocol

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - PKSHATechnology/audiosocket: Simple bidirectional audio protocol · GitHub
Skip to content
This repository was archived by the owner on Sep 3, 2024. It is now read-only.

Repository files navigation

AudioSocket

--计划在原AudioSocket基础上,增加 DTMF 信号的传递功能,并不会实际产生和检测DTMF信息,需要在SOCKET另一端实现此功能。

###--希望能成功实现!

###--It is planned to add the transmission function of DTMF signals on the basis of the original AudioSocket. It will not actually generate and detect DTMF information. This function needs to be implemented at the other end of the network.

###--Hope it can be achieved successfully!

AudioSocket is a simple TCP-based protocol for sending and receiving realtime audio streams.

There exists a protocol definition (below), a Go library, and Asterisk application and channel interfaces.

NOTE: as of 2020-01-15, AudioSocket has been included in the upstream Asterisk system. While I am leaving the Asterisk patches here for use with previous versions, the Asterisk code in this repository should be considered obsolete. The Go code is up-to-date, maintained, and this is the primary source for it.

Protocol definition

The singular design goal of AudioSocket is to present the simplest possible audio streaming protocol, initially based on the constraints of Asterisk audio. Each packet contains a three-byte header and a variable payload. The header is composed of a one-byte type and a two-byte length indicator.

The minimum message length is three bytes: type and payload-length. Hangup indication, for instance, is 0x00 0x00 0x00.

Types

  • 0x00 - Terminate the connection (socket closure is also sufficient)
  • 0x01 - Payload will contain the UUID (16-byte binary representation) for the audio stream
  • 0x02 - Payload is Dtmf start & stop signal, total 6 bytes. 1 byte state: 1:start dtmf, 0:stop dtmf; 1 byte code , 1-9, *, #, A-D; 4 bytes int duration, little-endian (0 for dtmf begin)
  • 0x03 - Payload is AST_CONTROL_(ANSWER RING BUSY HANGUP ....see frame.h ) base control signal, 1 byte.
  • 0x10 - Payload is signed linear, 16-bit, 8kHz, mono PCM (little-endian)
  • 0xff - An error has occurred; payload is the (optional) application-specific error code. Asterisk-generated error codes are listed below.

Payload length

The payload length is a 16-bit unsigned integer (big endian) indicating how many bytes are in the payload.

Payload

The content of the payload is defined by the header: type and length.

Asterisk error codes

Error codes are application-specific. The error codes for Asterisk are single-byte, bit-packed error codes:

  • 0x01 - hangup of calling party
  • 0x02 - frame forwarding error
  • 0x04 - memory (allocation) error

Asterisk usage

There are two Asterisk implementations: a channel interface and a dialplan application interface. Each of these lends itself to simplify a different use-case, but they work in exactly the same way.

The following examples demonstrate an AudioSocket connection to a server at server.example.com running on TCP port 9092. The UUID (which is chosen arbitrarily) of the call is 40325ec2-5efd-4bd3-805f-53576e581d13.

Dialplan application:

exten = 100,1,Verbose("Call to AudioSocket via Dialplan Application")
same = n,Answer()
same = n,AudioSocket(40325ec2-5efd-4bd3-805f-53576e581d13,server.example.com:9092)
same = n,Hangup()

Channel interface:

exten = 101,1,Verbose("Call to AudioSocket via Channel interface")
same = n,Answer()
same = n,Dial(AudioSocket/server.example.com:9092/40325ec2-5efd-4bd3-805f-53576e581d13)
same = n,Hangup()

About

Simple bidirectional audio protocol

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - PKSHATechnology/audiosocket: Simple bidirectional audio protocol · GitHub
Skip to content
This repository was archived by the owner on Sep 3, 2024. It is now read-only.

Repository files navigation

AudioSocket

--计划在原AudioSocket基础上,增加 DTMF 信号的传递功能,并不会实际产生和检测DTMF信息,需要在SOCKET另一端实现此功能。

###--希望能成功实现!

###--It is planned to add the transmission function of DTMF signals on the basis of the original AudioSocket. It will not actually generate and detect DTMF information. This function needs to be implemented at the other end of the network.

###--Hope it can be achieved successfully!

AudioSocket is a simple TCP-based protocol for sending and receiving realtime audio streams.

There exists a protocol definition (below), a Go library, and Asterisk application and channel interfaces.

NOTE: as of 2020-01-15, AudioSocket has been included in the upstream Asterisk system. While I am leaving the Asterisk patches here for use with previous versions, the Asterisk code in this repository should be considered obsolete. The Go code is up-to-date, maintained, and this is the primary source for it.

Protocol definition

The singular design goal of AudioSocket is to present the simplest possible audio streaming protocol, initially based on the constraints of Asterisk audio. Each packet contains a three-byte header and a variable payload. The header is composed of a one-byte type and a two-byte length indicator.

The minimum message length is three bytes: type and payload-length. Hangup indication, for instance, is 0x00 0x00 0x00.

Types

  • 0x00 - Terminate the connection (socket closure is also sufficient)
  • 0x01 - Payload will contain the UUID (16-byte binary representation) for the audio stream
  • 0x02 - Payload is Dtmf start & stop signal, total 6 bytes. 1 byte state: 1:start dtmf, 0:stop dtmf; 1 byte code , 1-9, *, #, A-D; 4 bytes int duration, little-endian (0 for dtmf begin)
  • 0x03 - Payload is AST_CONTROL_(ANSWER RING BUSY HANGUP ....see frame.h ) base control signal, 1 byte.
  • 0x10 - Payload is signed linear, 16-bit, 8kHz, mono PCM (little-endian)
  • 0xff - An error has occurred; payload is the (optional) application-specific error code. Asterisk-generated error codes are listed below.

Payload length

The payload length is a 16-bit unsigned integer (big endian) indicating how many bytes are in the payload.

Payload

The content of the payload is defined by the header: type and length.

Asterisk error codes

Error codes are application-specific. The error codes for Asterisk are single-byte, bit-packed error codes:

  • 0x01 - hangup of calling party
  • 0x02 - frame forwarding error
  • 0x04 - memory (allocation) error

Asterisk usage

There are two Asterisk implementations: a channel interface and a dialplan application interface. Each of these lends itself to simplify a different use-case, but they work in exactly the same way.

The following examples demonstrate an AudioSocket connection to a server at server.example.com running on TCP port 9092. The UUID (which is chosen arbitrarily) of the call is 40325ec2-5efd-4bd3-805f-53576e581d13.

Dialplan application:

exten = 100,1,Verbose("Call to AudioSocket via Dialplan Application")
same = n,Answer()
same = n,AudioSocket(40325ec2-5efd-4bd3-805f-53576e581d13,server.example.com:9092)
same = n,Hangup()

Channel interface:

exten = 101,1,Verbose("Call to AudioSocket via Channel interface")
same = n,Answer()
same = n,Dial(AudioSocket/server.example.com:9092/40325ec2-5efd-4bd3-805f-53576e581d13)
same = n,Hangup()

About

Simple bidirectional audio protocol

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages