@gjsify/webrtc 0.64.13-next.283 → 0.64.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/esm/get-user-media.js +1 -1
- package/lib/esm/gst-init.js +2 -2
- package/lib/esm/media-devices.js +1 -1
- package/lib/esm/media-stream-track.js +1 -1
- package/lib/esm/media-stream.js +1 -1
- package/lib/types/get-user-media.d.ts +2 -8
- package/lib/types/gst-init.d.ts +2 -5
- package/package.json +11 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./_virtual/_rolldown/runtime.js";import{
|
|
1
|
+
import"./_virtual/_rolldown/runtime.js";import{MediaStreamTrack as e}from"./media-stream-track.js";import{MediaStream as t}from"./media-stream.js";import{ensureGstInit as n,openCapture as r}from"@gjsify/media-capture";async function getUserMedia(i){if(n(),!i.audio&&!i.video)throw TypeError(`Failed to execute 'getUserMedia': At least one of audio or video must be requested`);let a=[];for(let t of[`audio`,`video`]){let n=i[t];if(!n)continue;let{source:o,pipeline:s}=r(t,typeof n==`object`?n:{});a.push(new e({kind:t,label:o.name??t,_gst:{source:o,pipeline:s}}))}return new t(a)}export{getUserMedia};
|
package/lib/esm/gst-init.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import"./_virtual/_rolldown/runtime.js";import e
|
|
1
|
+
import"./_virtual/_rolldown/runtime.js";import{Gst as e,ensureGstInit as t,excludeUnboundedAutodetectCandidates as n}from"@gjsify/media-capture";import{DOMException as r}from"@gjsify/dom-exception";function ensureWebrtcbinAvailable(){t(),e.ElementFactory.find(`webrtcbin`)||throwNotSupported(e.ElementFactory.find(`dtlsenc`)!==null||e.ElementFactory.find(`sctpenc`)!==null?`GStreamer element "webrtcbin" not available, but gst-plugins-bad IS installed
|
|
2
2
|
(its dtls/sctp elements are registered). This distro does not ship the
|
|
3
3
|
plugin — verify with: ls /usr/lib/gstreamer-1.0/libgstwebrtc.so
|
|
4
4
|
Alpine/postmarketOS: absent since Alpine v3.24; no package provides it.
|
|
@@ -10,4 +10,4 @@ plugin — verify with: ls /usr/lib/gstreamer-1.0/libgstwebrtc.so
|
|
|
10
10
|
Fedora: dnf install libnice-gstreamer1
|
|
11
11
|
Ubuntu/Debian: apt install gstreamer1.0-nice
|
|
12
12
|
macOS: brew install libnice-gstreamer
|
|
13
|
-
Verify with: gst-inspect-1.0 nicesrc`)}function throwNotSupported(e){throw new
|
|
13
|
+
Verify with: gst-inspect-1.0 nicesrc`)}function throwNotSupported(e){throw new r(e,`NotSupportedError`)}export{e as Gst,t as ensureGstInit,ensureWebrtcbinAvailable,n as excludeUnboundedAutodetectCandidates};
|
package/lib/esm/media-devices.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./_virtual/_rolldown/runtime.js";import{Gst as e,ensureGstInit as t}from"./gst-init.js";import{getUserMedia as n}from"./get-user-media.js";import{MediaDeviceInfo as r}from"./media-device-info.js";import i from"gi://GLib?version=2.0";
|
|
1
|
+
import"./_virtual/_rolldown/runtime.js";import{Gst as e,ensureGstInit as t}from"./gst-init.js";import{getUserMedia as n}from"./get-user-media.js";import{MediaDeviceInfo as r}from"./media-device-info.js";import"@gjsify/dom-events/register/event-target";import i from"gi://GLib?version=2.0";const a={"Audio/Source":`audioinput`,"Video/Source":`videoinput`,"Audio/Sink":`audiooutput`};let o=!1;function isDeviceMonitorSafe(){return!(i.getenv(`CI`)||!i.getenv(`DISPLAY`)&&!i.getenv(`WAYLAND_DISPLAY`))}var MediaDevices=class extends EventTarget{_ondevicechange=null;get ondevicechange(){return this._ondevicechange}set ondevicechange(e){this._ondevicechange=e}async getUserMedia(e){if(!e)throw TypeError(`Failed to execute 'getUserMedia' on 'MediaDevices': At least one of audio or video must be requested`);let t=await n(e);return o=!0,t}async enumerateDevices(){t();let n=null,i=[];try{if(!isDeviceMonitorSafe())return i;n=new e.DeviceMonitor,n.set_show_all_devices(!0);let t=e.Caps.from_string(`audio/x-raw`),s=e.Caps.from_string(`video/x-raw`);if(t&&(n.add_filter(`Audio/Source`,t),n.add_filter(`Audio/Sink`,t)),s&&n.add_filter(`Video/Source`,s),!n.start())return i;let c;try{c=n.get_devices()??[]}catch{return i}for(let e of c){let t=e.get_device_class?.()??``,n=a[t];if(!n)continue;let s=e.get_display_name?.()??``,c=``,l=``;try{let t=e.get_properties?.();if(t){let e=t.n_fields();for(let n=0;n<e;n++){let e=t.nth_field_name(n);if(e===`persistent-id`||e===`node.name`){let n=t.get_value(e);n&&!c&&(c=String(n))}if(e===`group-id`){let n=t.get_value(e);n&&(l=String(n))}}}}catch{}c||=s||`${n}-${i.length}`,o?i.push(new r({deviceId:c,kind:n,label:s,groupId:l})):i.some(e=>e.kind===n)||i.push(new r({deviceId:``,kind:n,label:``,groupId:``}))}}catch{return i}finally{try{n?.stop()}catch{}}let s={audioinput:0,videoinput:1,audiooutput:2};return i.sort((e,t)=>(s[e.kind]??3)-(s[t.kind]??3)),i}getSupportedConstraints(){return{deviceId:!0,width:!0,height:!0,frameRate:!0,sampleRate:!0,channelCount:!0,aspectRatio:!1,facingMode:!1,resizeMode:!1,echoCancellation:!1,autoGainControl:!1,noiseSuppression:!1,latency:!1,groupId:!1}}};export{MediaDevices};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./_virtual/_rolldown/runtime.js";import{Gst as e}from"./gst-init.js";import t from"gi://GLib?version=2.0";
|
|
1
|
+
import"./_virtual/_rolldown/runtime.js";import{Gst as e}from"./gst-init.js";import"@gjsify/dom-events/register/event-target";import t from"gi://GLib?version=2.0";var n=class MediaStreamTrack extends EventTarget{id;kind;label;_enabled=!0;_muted;_ended=!1;_contentHint=``;_onended=null;_onmute=null;_onunmute=null;_gstSource=null;_gstPipeline=null;_gstTee=null;_teeMultiplexer=null;_senderConsumers=0;_enableCallback=null;constructor(e){super(),this.id=e.id??t.uuid_string_random(),this.kind=e.kind,this.label=e.label??``,this._muted=e.muted??!1,e._gst&&(this._gstSource=e._gst.source,this._gstPipeline=e._gst.pipeline)}get enabled(){return this._enabled}set enabled(e){let t=!!e;this._enabled!==t&&(this._enabled=t,this._enableCallback?.(t))}get muted(){return this._muted}get readyState(){return this._ended?`ended`:`live`}get contentHint(){return this._contentHint}set contentHint(e){if(this.kind===`audio`){if(e!==``&&e!==`speech`&&e!==`speech-recognition`&&e!==`music`)return}else if(e!==``&&e!==`motion`&&e!==`detail`&&e!==`text`)return;this._contentHint=e}get onended(){return this._onended}set onended(e){this._onended=e}get onmute(){return this._onmute}set onmute(e){this._onmute=e}get onunmute(){return this._onunmute}set onunmute(e){this._onunmute=e}clone(){let e=new MediaStreamTrack({kind:this.kind,label:this.label,muted:this._muted});return e._enabled=this._enabled,e}stop(){if(this._ended)return;if(this._ended=!0,this._gstSource||this._gstPipeline){try{this._gstPipeline?.set_state(e.State.NULL)}catch{}try{this._gstSource?.set_state(e.State.NULL)}catch{}this._gstSource=null,this._gstPipeline=null}let t=new Event(`ended`);this._onended?.call(this,t),this.dispatchEvent(t)}getCapabilities(){return{}}getConstraints(){return{}}getSettings(){return{}}applyConstraints(e){return Promise.reject(new DOMException(`applyConstraints is not supported`,`NotSupportedError`))}_setMuted(e){if(this._muted===e)return;this._muted=e;let t=new Event(e?`mute`:`unmute`);e?this._onmute?.call(this,t):this._onunmute?.call(this,t),this.dispatchEvent(t)}_setEnableCallback(e){this._enableCallback=e}};export{n as MediaStreamTrack};
|
package/lib/esm/media-stream.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./_virtual/_rolldown/runtime.js";import e from"gi://GLib?version=2.0";
|
|
1
|
+
import"./_virtual/_rolldown/runtime.js";import"@gjsify/dom-events/register/event-target";import e from"gi://GLib?version=2.0";var t=class MediaStream extends EventTarget{id;_tracks=new Map;_onaddtrack=null;_onremovetrack=null;constructor(t){if(super(),this.id=e.uuid_string_random(),t instanceof MediaStream)for(let e of t.getTracks())this._tracks.set(e.id,e.clone());else if(Array.isArray(t))for(let e of t)this._tracks.set(e.id,e)}get active(){for(let e of this._tracks.values())if(e.readyState===`live`)return!0;return!1}get onaddtrack(){return this._onaddtrack}set onaddtrack(e){this._onaddtrack=e}get onremovetrack(){return this._onremovetrack}set onremovetrack(e){this._onremovetrack=e}getTracks(){return[...this._tracks.values()]}getAudioTracks(){return this.getTracks().filter(e=>e.kind===`audio`)}getVideoTracks(){return this.getTracks().filter(e=>e.kind===`video`)}getTrackById(e){return this._tracks.get(e)??null}addTrack(e){if(this._tracks.has(e.id))return;this._tracks.set(e.id,e);let t=new MediaStreamTrackEvent(`addtrack`,{track:e});this._onaddtrack?.call(this,t),this.dispatchEvent(t)}removeTrack(e){if(!this._tracks.delete(e.id))return;let t=new MediaStreamTrackEvent(`removetrack`,{track:e});this._onremovetrack?.call(this,t),this.dispatchEvent(t)}clone(){return new MediaStream(this)}},MediaStreamTrackEvent=class extends Event{track;constructor(e,t){super(e,t),this.track=t.track}};export{t as MediaStream,MediaStreamTrackEvent};
|
|
@@ -1,12 +1,6 @@
|
|
|
1
|
+
import { type CaptureConstraints } from '@gjsify/media-capture';
|
|
1
2
|
import { MediaStream } from './media-stream.js';
|
|
2
|
-
export
|
|
3
|
-
deviceId?: string;
|
|
4
|
-
sampleRate?: number;
|
|
5
|
-
channelCount?: number;
|
|
6
|
-
width?: number;
|
|
7
|
-
height?: number;
|
|
8
|
-
frameRate?: number;
|
|
9
|
-
}
|
|
3
|
+
export type MediaTrackConstraints = CaptureConstraints;
|
|
10
4
|
export interface MediaStreamConstraints {
|
|
11
5
|
audio?: boolean | MediaTrackConstraints;
|
|
12
6
|
video?: boolean | MediaTrackConstraints;
|
package/lib/types/gst-init.d.ts
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import Gst from '
|
|
2
|
-
/** TEST SEAM (exported) — see the `keepOpenal` parameter doc above. */
|
|
3
|
-
export declare function excludeUnboundedAutodetectCandidates(keepOpenal?: boolean): void;
|
|
4
|
-
export declare function ensureGstInit(): void;
|
|
1
|
+
import { Gst, ensureGstInit, excludeUnboundedAutodetectCandidates } from '@gjsify/media-capture';
|
|
5
2
|
/** Throws if the `webrtcbin` element is not registered (gst-plugins-bad missing). */
|
|
6
3
|
export declare function ensureWebrtcbinAvailable(): void;
|
|
7
|
-
export { Gst };
|
|
4
|
+
export { Gst, ensureGstInit, excludeUnboundedAutodetectCandidates };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gjsify/webrtc",
|
|
3
|
-
"version": "0.64.
|
|
3
|
+
"version": "0.64.14",
|
|
4
4
|
"description": "W3C WebRTC API for GJS using GStreamer webrtcbin as the peer-connection backend",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"module": "lib/esm/index.js",
|
|
@@ -61,12 +61,13 @@
|
|
|
61
61
|
"peer-connection"
|
|
62
62
|
],
|
|
63
63
|
"dependencies": {
|
|
64
|
-
"@gjsify/buffer": "0.64.
|
|
65
|
-
"@gjsify/dom-events": "0.64.
|
|
66
|
-
"@gjsify/dom-exception": "0.64.
|
|
67
|
-
"@gjsify/
|
|
68
|
-
"@gjsify/
|
|
69
|
-
"@gjsify/
|
|
64
|
+
"@gjsify/buffer": "^0.64.14",
|
|
65
|
+
"@gjsify/dom-events": "^0.64.14",
|
|
66
|
+
"@gjsify/dom-exception": "^0.64.14",
|
|
67
|
+
"@gjsify/media-capture": "^0.64.14",
|
|
68
|
+
"@gjsify/node-globals": "^0.64.14",
|
|
69
|
+
"@gjsify/webcrypto": "^0.64.14",
|
|
70
|
+
"@gjsify/webrtc-native": "^0.64.14"
|
|
70
71
|
},
|
|
71
72
|
"devDependencies": {
|
|
72
73
|
"@girs/gio-2.0": "5.4.0",
|
|
@@ -76,8 +77,8 @@
|
|
|
76
77
|
"@girs/gst-1.0": "5.4.0",
|
|
77
78
|
"@girs/gstsdp-1.0": "5.4.0",
|
|
78
79
|
"@girs/gstwebrtc-1.0": "5.4.0",
|
|
79
|
-
"@gjsify/cli": "0.64.
|
|
80
|
-
"@gjsify/unit": "0.64.
|
|
80
|
+
"@gjsify/cli": "^0.64.14",
|
|
81
|
+
"@gjsify/unit": "^0.64.14",
|
|
81
82
|
"@types/node": "^25.9.2",
|
|
82
83
|
"typescript": "^6.0.3"
|
|
83
84
|
},
|
|
@@ -99,6 +100,5 @@
|
|
|
99
100
|
"bugs": {
|
|
100
101
|
"url": "https://github.com/gjsify/gjsify/issues"
|
|
101
102
|
},
|
|
102
|
-
"homepage": "https://github.com/gjsify/gjsify/tree/main/packages/web/webrtc#readme"
|
|
103
|
-
"gitHead": "05fae97125a374e84bf57c2d2d086fb53523f205"
|
|
103
|
+
"homepage": "https://github.com/gjsify/gjsify/tree/main/packages/web/webrtc#readme"
|
|
104
104
|
}
|