Compare commits

...
Sign in to create a new pull request.

14 commits

Author SHA1 Message Date
wrapper
4a7cb0dc2a 21521 2025-07-17 13:34:10 +07:00
wrapper
8e036283a9 part 2 2025-07-17 13:32:15 +07:00
wrapper
36111eec76 socket opts 2025-07-17 13:26:56 +07:00
wrapper
76c5dbc421 Allow multiplex
Some checks failed
Node CI / build-linux (18.x) (push) Has been cancelled
Node CI / build-linux (20.x) (push) Has been cancelled
Node CI / build-linux (22.x) (push) Has been cancelled
2025-07-17 11:28:41 +07:00
neoxpert
62b4a8ceac
Update SRT to 1.5.4 (#74)
* use SRT 1.5.4

* Update nodejs.yml

drop EoL NodeJS versions
2025-04-08 22:24:10 +02:00
Jonas Birmé
fe1d9f9cee
0.8.3 2023-11-20 13:02:52 +01:00
yaruno
f7938b4567
fix: AsyncSRT types and tests, add super() to AsyncSRT constructor (#67)
* add event emitter to async class

* fix types for AsyncSRT class

* Should call super() on constructor as extending event emitter, fixes tests
2023-11-20 12:54:11 +01:00
Jonas Birmé
cf06fe6ed1
0.8.2 2023-11-20 10:48:54 +01:00
yaruno
bec9609f70
fix: add event emitter to async class (#64) 2023-11-20 10:37:53 +01:00
Jonas Birmé
04ce7d238b 0.8.1 2023-09-19 23:05:46 +02:00
neoxpert
b40d4a3c8c Update srt-enums.h
Updated enum definition to take new values into account aswell as reserved spaces.
2023-09-18 21:16:25 +02:00
Jonas Birmé
23407cea60 0.8.0 2023-09-18 14:18:38 +02:00
Jonas Birmé
23efbb8501 feat: bump to libsrt 1.5.2 2023-09-04 09:01:34 +02:00
Jonas Birmé
ed0e4913a6 0.7.1 2023-08-10 15:53:12 +02:00
10 changed files with 94 additions and 74 deletions

View file

@ -7,7 +7,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [14.x, 16.x, 18.x]
node-version: [18.x, 20.x, 22.x]
steps:
- uses: actions/checkout@v3

4
package-lock.json generated
View file

@ -1,12 +1,12 @@
{
"name": "@eyevinn/srt",
"version": "0.7.0",
"version": "0.8.3",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@eyevinn/srt",
"version": "0.7.0",
"version": "0.8.3",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {

View file

@ -1,6 +1,6 @@
{
"name": "@eyevinn/srt",
"version": "0.7.0",
"version": "0.8.3",
"description": "Nodejs bindings for Secure Reliable Transport SDK",
"main": "index.js",
"scripts": {

View file

@ -13,7 +13,7 @@ const os = require('os');
const env = process.env;
const SRT_REPO = env.NODE_SRT_REPO || "https://github.com/Haivision/srt.git";
const SRT_CHECKOUT = "v1.4.4";
const SRT_CHECKOUT = "v1.5.4";
const srtRepoPath = env.NODE_SRT_LOCAL_REPO ? `file://${path.join(__dirname, env.NODE_SRT_LOCAL_REPO)}` : SRT_REPO;
const srtCheckout = env.NODE_SRT_CHECKOUT || SRT_CHECKOUT;

View file

@ -6,6 +6,7 @@ const debug = require('debug')('srt-async');
const { traceCallToString, extractTransferListFromParams } = require('./async-helpers');
const { SRT } = require('../build/Release/node_srt.node');
const EventEmitter = require('events');
const DEFAULT_PROMISE_TIMEOUT_MS = 3000;
@ -15,7 +16,7 @@ const DEBUG = false;
const WORK_ID_GEN_MOD = 0xFFF;
*/
class AsyncSRT {
class AsyncSRT extends EventEmitter {
/**
* @static
@ -24,7 +25,7 @@ class AsyncSRT {
static TimeoutMs = DEFAULT_PROMISE_TIMEOUT_MS;
constructor() {
super()
DEBUG && debug('Creating task-runner worker instance');
this._worker = new Worker(path.resolve(__dirname, './async-worker.js'));
@ -67,6 +68,7 @@ class AsyncSRT {
'\n Binding call:', traceCallToString(data.call.method, data.call.args),
//'\n Stacktrace:', data.err.stack
);
this.emit('error', data.err.message)
return;
}

View file

@ -177,7 +177,7 @@ Napi::Value NodeSRT::Accept(const Napi::CallbackInfo& info) {
Napi::Error::New(env, srt_getlasterror_str()).ThrowAsJavaScriptException();
return Napi::Number::New(env, SRT_ERROR);
}
srt_close(socketValue);
socketValue = Napi::Number::New(env, SRT_INVALID_SOCK);
return Napi::Number::New(env, their_fd);
}

View file

@ -1,66 +1,73 @@
#define ENUM(E) StaticValue(#E, Napi::Number::New(env, E))
// egrep '^\s+SRTO' srtcore/srt.h | sed 's/^.*\(SRTO_[^, ]*\)[, ].*$/ ENUM\(\1\), \\/'
#define ENUM(E,F) StaticValue(#E,Napi::Number::New(env,F))
#define SOCKET_OPTIONS \
ENUM(SRTO_MSS), \
ENUM(SRTO_SNDSYN), \
ENUM(SRTO_RCVSYN), \
ENUM(SRTO_ISN), \
ENUM(SRTO_FC), \
ENUM(SRTO_SNDBUF), \
ENUM(SRTO_RCVBUF), \
ENUM(SRTO_LINGER), \
ENUM(SRTO_UDP_SNDBUF), \
ENUM(SRTO_UDP_RCVBUF), \
ENUM(SRTO_RENDEZVOUS), \
ENUM(SRTO_SNDTIMEO), \
ENUM(SRTO_RCVTIMEO), \
ENUM(SRTO_REUSEADDR), \
ENUM(SRTO_MAXBW), \
ENUM(SRTO_STATE), \
ENUM(SRTO_EVENT), \
ENUM(SRTO_SNDDATA), \
ENUM(SRTO_RCVDATA), \
ENUM(SRTO_SENDER), \
ENUM(SRTO_TSBPDMODE), \
ENUM(SRTO_INPUTBW), \
ENUM(SRTO_OHEADBW), \
ENUM(SRTO_PASSPHRASE), \
ENUM(SRTO_PBKEYLEN), \
ENUM(SRTO_KMSTATE), \
ENUM(SRTO_IPTTL), \
ENUM(SRTO_IPTOS), \
ENUM(SRTO_TLPKTDROP), \
ENUM(SRTO_SNDDROPDELAY), \
ENUM(SRTO_NAKREPORT), \
ENUM(SRTO_VERSION), \
ENUM(SRTO_PEERVERSION), \
ENUM(SRTO_CONNTIMEO), \
ENUM(SRTO_SNDKMSTATE), \
ENUM(SRTO_RCVKMSTATE), \
ENUM(SRTO_LOSSMAXTTL), \
ENUM(SRTO_RCVLATENCY), \
ENUM(SRTO_PEERLATENCY), \
ENUM(SRTO_MINVERSION), \
ENUM(SRTO_STREAMID), \
ENUM(SRTO_CONGESTION), \
ENUM(SRTO_MESSAGEAPI), \
ENUM(SRTO_PAYLOADSIZE), \
ENUM(SRTO_TRANSTYPE), \
ENUM(SRTO_KMREFRESHRATE), \
ENUM(SRTO_KMPREANNOUNCE), \
ENUM(SRTO_ENFORCEDENCRYPTION), \
ENUM(SRTO_IPV6ONLY), \
ENUM(SRTO_PEERIDLETIMEO), \
ENUM(SRTO_PACKETFILTER)
ENUM(SRTO_MSS, 0), \
ENUM(SRTO_SNDSYN, 1), \
ENUM(SRTO_RCVSYN, 2), \
ENUM(SRTO_ISN, 3), \
ENUM(SRTO_FC, 4), \
ENUM(SRTO_SNDBUF, 5), \
ENUM(SRTO_RCVBUF, 6), \
ENUM(SRTO_LINGER, 7), \
ENUM(SRTO_UDP_SNDBUF, 8), \
ENUM(SRTO_UDP_RCVBUF, 9), \
ENUM(SRTO_RENDEZVOUS, 12), \
ENUM(SRTO_SNDTIMEO, 13), \
ENUM(SRTO_RCVTIMEO, 14), \
ENUM(SRTO_REUSEADDR, 15), \
ENUM(SRTO_MAXBW, 16), \
ENUM(SRTO_STATE, 17), \
ENUM(SRTO_EVENT, 18), \
ENUM(SRTO_SNDDATA, 19), \
ENUM(SRTO_RCVDATA, 20), \
ENUM(SRTO_SENDER, 21), \
ENUM(SRTO_TSBPDMODE, 22), \
ENUM(SRTO_LATENCY, 23), \
ENUM(SRTO_INPUTBW, 24), \
ENUM(SRTO_OHEADBW, 25), \
ENUM(SRTO_PASSPHRASE, 26), \
ENUM(SRTO_PBKEYLEN, 27), \
ENUM(SRTO_KMSTATE, 28), \
ENUM(SRTO_IPTTL, 29), \
ENUM(SRTO_IPTOS, 30), \
ENUM(SRTO_TLPKTDROP, 31), \
ENUM(SRTO_SNDDROPDELAY, 32), \
ENUM(SRTO_NAKREPORT, 33), \
ENUM(SRTO_VERSION, 34), \
ENUM(SRTO_PEERVERSION, 35), \
ENUM(SRTO_CONNTIMEO, 36), \
ENUM(SRTO_DRIFTTRACER, 37), \
ENUM(SRTO_MININPUTBW, 38), \
ENUM(SRTO_SNDKMSTATE, 40), \
ENUM(SRTO_RCVKMSTATE, 41), \
ENUM(SRTO_LOSSMAXTTL, 42), \
ENUM(SRTO_RCVLATENCY, 43), \
ENUM(SRTO_PEERLATENCY, 44), \
ENUM(SRTO_MINVERSION, 45), \
ENUM(SRTO_STREAMID, 46), \
ENUM(SRTO_CONGESTION, 47), \
ENUM(SRTO_MESSAGEAPI, 48), \
ENUM(SRTO_PAYLOADSIZE, 49), \
ENUM(SRTO_TRANSTYPE, 50), \
ENUM(SRTO_KMREFRESHRATE, 51), \
ENUM(SRTO_KMPREANNOUNCE, 52), \
ENUM(SRTO_ENFORCEDENCRYPTION, 53), \
ENUM(SRTO_IPV6ONLY, 54), \
ENUM(SRTO_PEERIDLETIMEO, 55), \
ENUM(SRTO_BINDTODEVICE, 56), \
ENUM(SRTO_GROUPCONNECT, 57), \
ENUM(SRTO_GROUPMINSTABLETIMEO, 58), \
ENUM(SRTO_GROUPTYPE, 59), \
ENUM(SRTO_PACKETFILTER, 60), \
ENUM(SRTO_RETRANSMITALGO, 61)
#define SOCKET_STATUS \
ENUM(SRTS_INIT), \
ENUM(SRTS_OPENED), \
ENUM(SRTS_LISTENING), \
ENUM(SRTS_CONNECTING), \
ENUM(SRTS_CONNECTED), \
ENUM(SRTS_BROKEN), \
ENUM(SRTS_CLOSING), \
ENUM(SRTS_CLOSED)
ENUM(SRTS_INIT, 1), \
ENUM(SRTS_OPENED, 2), \
ENUM(SRTS_LISTENING, 3), \
ENUM(SRTS_CONNECTING, 4), \
ENUM(SRTS_CONNECTED, 5), \
ENUM(SRTS_BROKEN, 6), \
ENUM(SRTS_CLOSING, 7), \
ENUM(SRTS_CLOSED, 8), \
ENUM(SRTS_NONEXIST, 9)

View file

@ -99,7 +99,7 @@ class SRTConnection extends EventEmitter {
this.emit('closing');
const result = await asyncSrt.close(this.fd);
this.emit('closed', result);
this.off();
this.removeAllListeners();
return result;
}
@ -113,6 +113,14 @@ class SRTConnection extends EventEmitter {
this._gotFirstData = true;
}
}
async getSocketOpt(opt) {
return await this._asyncSrt.getSockOpt(this.fd, opt);
}
async setSocketOpt(opt, val) {
return await this._asyncSrt.setSockOpt(this.fd, opt, val);
}
}
/**

View file

@ -1,11 +1,11 @@
import { EventEmitter } from "events";
import { SRTLoggingLevel, SRTResult, SRTSockOpt, SRTSockStatus } from "../src/srt-api-enums";
import { SRTReadReturn, SRTFileDescriptor, SRTEpollEvent, SRTSockOptValue, SRTStats } from "./srt-api"
export type AsyncSRTCallback<T> = (result: T) => void;
export class AsyncSRT {
export class AsyncSRT extends EventEmitter {
static TimeoutMs: number;

View file

@ -30,6 +30,9 @@ export class SRTConnection extends EventEmitter {
onData(): void;
getReaderWriter(): AsyncReaderWriter;
getSocketOpt(opt: number): Promise<number|boolean|string>;
setSocketOpt(opt: number, val: number|boolean|string): Promise<number>;
}
export class SRTServer extends EventEmitter /*<SRTServerEvent>*/ {