@livepeer-frameworks/streamcrafter-core 0.0.1 → 0.1.0

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.
Files changed (43) hide show
  1. package/README.md +61 -0
  2. package/dist/cjs/IngestControllerV2-BSD6O8gz.cjs +5662 -0
  3. package/dist/cjs/IngestControllerV2-BSD6O8gz.cjs.map +1 -0
  4. package/dist/cjs/IngestControllerV2-DZFuxrNk.cjs +5768 -0
  5. package/dist/cjs/IngestControllerV2-DZFuxrNk.cjs.map +1 -0
  6. package/dist/cjs/IngestControllerV2-Mt6aX-DU.cjs +5768 -0
  7. package/dist/cjs/IngestControllerV2-Mt6aX-DU.cjs.map +1 -0
  8. package/dist/cjs/index.cjs +60 -5
  9. package/dist/cjs/index.cjs.map +1 -1
  10. package/dist/cjs/vanilla.cjs +1 -1
  11. package/dist/cjs/vanilla.cjs.map +1 -1
  12. package/dist/esm/IngestControllerV2-BaOxEiTq.js +5606 -0
  13. package/dist/esm/IngestControllerV2-BaOxEiTq.js.map +1 -0
  14. package/dist/esm/IngestControllerV2-DswB_ybx.js +5712 -0
  15. package/dist/esm/IngestControllerV2-DswB_ybx.js.map +1 -0
  16. package/dist/esm/IngestControllerV2-fiwB1xzE.js +5712 -0
  17. package/dist/esm/IngestControllerV2-fiwB1xzE.js.map +1 -0
  18. package/dist/esm/index.js +61 -6
  19. package/dist/esm/index.js.map +1 -1
  20. package/dist/esm/vanilla.js +1 -1
  21. package/dist/esm/vanilla.js.map +1 -1
  22. package/dist/types/core/EncoderManager.d.ts +6 -0
  23. package/dist/types/core/IngestControllerV2.d.ts +7 -0
  24. package/dist/types/core/SceneManager.d.ts +6 -0
  25. package/dist/types/core/WhipClient.d.ts +1 -0
  26. package/dist/types/core/renderers/Canvas2DRenderer.d.ts +1 -0
  27. package/dist/types/core/renderers/WebGLRenderer.d.ts +1 -0
  28. package/dist/types/core/renderers/WebGPURenderer.d.ts +3 -0
  29. package/dist/types/core/renderers/index.d.ts +5 -0
  30. package/dist/types/types.d.ts +5 -0
  31. package/dist/workers/compositor.worker.js +92 -5
  32. package/dist/workers/compositor.worker.js.map +1 -1
  33. package/dist/workers/encoder.worker.js +2 -2
  34. package/dist/workers/encoder.worker.js.map +1 -1
  35. package/package.json +1 -1
  36. package/src/core/EncoderManager.ts +63 -1
  37. package/src/core/IngestControllerV2.ts +114 -98
  38. package/src/core/SceneManager.ts +16 -3
  39. package/src/core/WhipClient.ts +26 -0
  40. package/src/core/renderers/WebGPURenderer.ts +1 -1
  41. package/src/vanilla/StreamCrafterV2.ts +0 -1
  42. package/src/workers/compositor.worker.ts +1 -2
  43. package/src/workers/encoder.worker.ts +2 -2
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var IngestControllerV2 = require('./IngestControllerV2-7OKm7INi.cjs');
3
+ var IngestControllerV2 = require('./IngestControllerV2-Mt6aX-DU.cjs');
4
4
 
5
5
  /**
6
6
  * StreamCrafter V2
@@ -1 +1 @@
1
- {"version":3,"file":"vanilla.cjs","sources":["../../src/vanilla/StreamCrafterV2.ts"],"sourcesContent":["/**\n * StreamCrafter V2\n * Vanilla JS API with Phase 2 features:\n * - Multi-source support\n * - Audio mixing\n * - Quality switching\n * - Auto-reconnection\n */\n\nimport { IngestControllerV2 } from '../core/IngestControllerV2';\nimport type {\n IngestControllerConfigV2,\n IngestState,\n IngestStateContextV2,\n IngestStats,\n CaptureOptions,\n ScreenCaptureOptions,\n DeviceInfo,\n MediaSource,\n QualityProfile,\n ReconnectionConfig,\n SourceAddedEvent,\n SourceRemovedEvent,\n SourceUpdatedEvent,\n} from '../types';\n\nexport interface StreamCrafterV2Config extends IngestControllerConfigV2 {}\n\nexport class StreamCrafterV2 {\n private controller: IngestControllerV2;\n\n constructor(config: StreamCrafterV2Config) {\n this.controller = new IngestControllerV2(config);\n }\n\n // ========================================\n // Event Handling\n // ========================================\n\n /**\n * Subscribe to state changes\n */\n onStateChange(\n handler: (event: { state: IngestState; context?: IngestStateContextV2 }) => void\n ): () => void {\n return this.controller.on('stateChange', handler);\n }\n\n /**\n * Subscribe to stats updates\n */\n onStatsUpdate(handler: (stats: IngestStats) => void): () => void {\n return this.controller.on('statsUpdate', handler);\n }\n\n /**\n * Subscribe to device changes\n */\n onDeviceChange(handler: (event: { devices: DeviceInfo[] }) => void): () => void {\n return this.controller.on('deviceChange', handler);\n }\n\n /**\n * Subscribe to errors\n */\n onError(handler: (event: { error: string; recoverable: boolean }) => void): () => void {\n return this.controller.on('error', handler);\n }\n\n /**\n * Subscribe to source added events\n */\n onSourceAdded(handler: (event: SourceAddedEvent) => void): () => void {\n return this.controller.on('sourceAdded', handler);\n }\n\n /**\n * Subscribe to source removed events\n */\n onSourceRemoved(handler: (event: SourceRemovedEvent) => void): () => void {\n return this.controller.on('sourceRemoved', handler);\n }\n\n /**\n * Subscribe to source updated events\n */\n onSourceUpdated(handler: (event: SourceUpdatedEvent) => void): () => void {\n return this.controller.on('sourceUpdated', handler);\n }\n\n /**\n * Subscribe to quality changed events\n */\n onQualityChanged(\n handler: (event: { profile: QualityProfile; previousProfile: QualityProfile }) => void\n ): () => void {\n return this.controller.on('qualityChanged', handler);\n }\n\n /**\n * Subscribe to reconnection attempt events\n */\n onReconnectionAttempt(\n handler: (event: { attempt: number; maxAttempts: number }) => void\n ): () => void {\n return this.controller.on('reconnectionAttempt', handler);\n }\n\n /**\n * Subscribe to reconnection success events\n */\n onReconnectionSuccess(handler: () => void): () => void {\n return this.controller.on('reconnectionSuccess', () => handler());\n }\n\n /**\n * Subscribe to reconnection failed events\n */\n onReconnectionFailed(handler: (event: { error: string }) => void): () => void {\n return this.controller.on('reconnectionFailed', handler);\n }\n\n // ========================================\n // Capture Methods\n // ========================================\n\n /**\n * Start camera/mic capture\n */\n async startCamera(options?: CaptureOptions): Promise<MediaSource> {\n return this.controller.startCamera(options);\n }\n\n /**\n * Start screen share capture\n */\n async startScreenShare(options?: ScreenCaptureOptions): Promise<MediaSource | null> {\n return this.controller.startScreenShare(options);\n }\n\n /**\n * Add a custom media source\n */\n addCustomSource(stream: MediaStream, label: string): MediaSource {\n return this.controller.addCustomSource(stream, label);\n }\n\n /**\n * Remove a source by ID\n */\n removeSource(sourceId: string): void {\n this.controller.removeSource(sourceId);\n }\n\n /**\n * Stop all capture\n */\n async stopCapture(): Promise<void> {\n return this.controller.stopCapture();\n }\n\n // ========================================\n // Source Management\n // ========================================\n\n /**\n * Get all sources\n */\n getSources(): MediaSource[] {\n return this.controller.getSources();\n }\n\n /**\n * Get a specific source by ID\n */\n getSource(id: string): MediaSource | undefined {\n return this.controller.getSource(id);\n }\n\n /**\n * Set source volume (0.0 - 1.0)\n */\n setSourceVolume(sourceId: string, volume: number): void {\n this.controller.setSourceVolume(sourceId, volume);\n }\n\n /**\n * Mute/unmute a source\n */\n setSourceMuted(sourceId: string, muted: boolean): void {\n this.controller.setSourceMuted(sourceId, muted);\n }\n\n /**\n * Set source active state\n */\n setSourceActive(sourceId: string, active: boolean): void {\n this.controller.setSourceActive(sourceId, active);\n }\n\n // ========================================\n // Streaming Methods\n // ========================================\n\n /**\n * Start streaming to WHIP endpoint\n */\n async startStreaming(): Promise<void> {\n return this.controller.startStreaming();\n }\n\n /**\n * Stop streaming\n */\n async stopStreaming(): Promise<void> {\n return this.controller.stopStreaming();\n }\n\n // ========================================\n // Quality Methods\n // ========================================\n\n /**\n * Get current quality profile\n */\n getQualityProfile(): QualityProfile {\n return this.controller.getQualityProfile();\n }\n\n /**\n * Set quality profile\n */\n async setQualityProfile(profile: QualityProfile): Promise<void> {\n return this.controller.setQualityProfile(profile);\n }\n\n // ========================================\n // Device Methods\n // ========================================\n\n /**\n * Get available devices\n */\n async getDevices(): Promise<DeviceInfo[]> {\n return this.controller.getDevices();\n }\n\n /**\n * Switch video device while streaming\n */\n async switchVideoDevice(deviceId: string): Promise<void> {\n return this.controller.switchVideoDevice(deviceId);\n }\n\n /**\n * Switch audio device while streaming\n */\n async switchAudioDevice(deviceId: string): Promise<void> {\n return this.controller.switchAudioDevice(deviceId);\n }\n\n // ========================================\n // State Methods\n // ========================================\n\n /**\n * Get current state\n */\n getState(): IngestState {\n return this.controller.getState();\n }\n\n /**\n * Get state context\n */\n getStateContext(): IngestStateContextV2 {\n return this.controller.getStateContext();\n }\n\n /**\n * Get current media stream (combined output)\n */\n getMediaStream(): MediaStream | null {\n return this.controller.getMediaStream();\n }\n\n /**\n * Get current stats\n */\n async getStats(): Promise<IngestStats | null> {\n return this.controller.getStats();\n }\n\n /**\n * Check if streaming\n */\n isStreaming(): boolean {\n return this.controller.isStreaming();\n }\n\n /**\n * Check if capturing\n */\n isCapturing(): boolean {\n return this.controller.isCapturing();\n }\n\n /**\n * Check if reconnecting\n */\n isReconnecting(): boolean {\n return this.controller.isReconnecting();\n }\n\n // ========================================\n // Advanced Access\n // ========================================\n\n /**\n * Get the audio mixer for direct control\n */\n getAudioMixer() {\n return this.controller.getAudioMixer();\n }\n\n /**\n * Get the reconnection manager for direct control\n */\n getReconnectionManager() {\n return this.controller.getReconnectionManager();\n }\n\n // ========================================\n // Lifecycle\n // ========================================\n\n /**\n * Destroy the instance\n */\n destroy(): void {\n this.controller.destroy();\n }\n}\n"],"names":["IngestControllerV2"],"mappings":"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"}
1
+ {"version":3,"file":"vanilla.cjs","sources":["../../src/vanilla/StreamCrafterV2.ts"],"sourcesContent":["/**\n * StreamCrafter V2\n * Vanilla JS API with Phase 2 features:\n * - Multi-source support\n * - Audio mixing\n * - Quality switching\n * - Auto-reconnection\n */\n\nimport { IngestControllerV2 } from '../core/IngestControllerV2';\nimport type {\n IngestControllerConfigV2,\n IngestState,\n IngestStateContextV2,\n IngestStats,\n CaptureOptions,\n ScreenCaptureOptions,\n DeviceInfo,\n MediaSource,\n QualityProfile,\n SourceAddedEvent,\n SourceRemovedEvent,\n SourceUpdatedEvent,\n} from '../types';\n\nexport interface StreamCrafterV2Config extends IngestControllerConfigV2 {}\n\nexport class StreamCrafterV2 {\n private controller: IngestControllerV2;\n\n constructor(config: StreamCrafterV2Config) {\n this.controller = new IngestControllerV2(config);\n }\n\n // ========================================\n // Event Handling\n // ========================================\n\n /**\n * Subscribe to state changes\n */\n onStateChange(\n handler: (event: { state: IngestState; context?: IngestStateContextV2 }) => void\n ): () => void {\n return this.controller.on('stateChange', handler);\n }\n\n /**\n * Subscribe to stats updates\n */\n onStatsUpdate(handler: (stats: IngestStats) => void): () => void {\n return this.controller.on('statsUpdate', handler);\n }\n\n /**\n * Subscribe to device changes\n */\n onDeviceChange(handler: (event: { devices: DeviceInfo[] }) => void): () => void {\n return this.controller.on('deviceChange', handler);\n }\n\n /**\n * Subscribe to errors\n */\n onError(handler: (event: { error: string; recoverable: boolean }) => void): () => void {\n return this.controller.on('error', handler);\n }\n\n /**\n * Subscribe to source added events\n */\n onSourceAdded(handler: (event: SourceAddedEvent) => void): () => void {\n return this.controller.on('sourceAdded', handler);\n }\n\n /**\n * Subscribe to source removed events\n */\n onSourceRemoved(handler: (event: SourceRemovedEvent) => void): () => void {\n return this.controller.on('sourceRemoved', handler);\n }\n\n /**\n * Subscribe to source updated events\n */\n onSourceUpdated(handler: (event: SourceUpdatedEvent) => void): () => void {\n return this.controller.on('sourceUpdated', handler);\n }\n\n /**\n * Subscribe to quality changed events\n */\n onQualityChanged(\n handler: (event: { profile: QualityProfile; previousProfile: QualityProfile }) => void\n ): () => void {\n return this.controller.on('qualityChanged', handler);\n }\n\n /**\n * Subscribe to reconnection attempt events\n */\n onReconnectionAttempt(\n handler: (event: { attempt: number; maxAttempts: number }) => void\n ): () => void {\n return this.controller.on('reconnectionAttempt', handler);\n }\n\n /**\n * Subscribe to reconnection success events\n */\n onReconnectionSuccess(handler: () => void): () => void {\n return this.controller.on('reconnectionSuccess', () => handler());\n }\n\n /**\n * Subscribe to reconnection failed events\n */\n onReconnectionFailed(handler: (event: { error: string }) => void): () => void {\n return this.controller.on('reconnectionFailed', handler);\n }\n\n // ========================================\n // Capture Methods\n // ========================================\n\n /**\n * Start camera/mic capture\n */\n async startCamera(options?: CaptureOptions): Promise<MediaSource> {\n return this.controller.startCamera(options);\n }\n\n /**\n * Start screen share capture\n */\n async startScreenShare(options?: ScreenCaptureOptions): Promise<MediaSource | null> {\n return this.controller.startScreenShare(options);\n }\n\n /**\n * Add a custom media source\n */\n addCustomSource(stream: MediaStream, label: string): MediaSource {\n return this.controller.addCustomSource(stream, label);\n }\n\n /**\n * Remove a source by ID\n */\n removeSource(sourceId: string): void {\n this.controller.removeSource(sourceId);\n }\n\n /**\n * Stop all capture\n */\n async stopCapture(): Promise<void> {\n return this.controller.stopCapture();\n }\n\n // ========================================\n // Source Management\n // ========================================\n\n /**\n * Get all sources\n */\n getSources(): MediaSource[] {\n return this.controller.getSources();\n }\n\n /**\n * Get a specific source by ID\n */\n getSource(id: string): MediaSource | undefined {\n return this.controller.getSource(id);\n }\n\n /**\n * Set source volume (0.0 - 1.0)\n */\n setSourceVolume(sourceId: string, volume: number): void {\n this.controller.setSourceVolume(sourceId, volume);\n }\n\n /**\n * Mute/unmute a source\n */\n setSourceMuted(sourceId: string, muted: boolean): void {\n this.controller.setSourceMuted(sourceId, muted);\n }\n\n /**\n * Set source active state\n */\n setSourceActive(sourceId: string, active: boolean): void {\n this.controller.setSourceActive(sourceId, active);\n }\n\n // ========================================\n // Streaming Methods\n // ========================================\n\n /**\n * Start streaming to WHIP endpoint\n */\n async startStreaming(): Promise<void> {\n return this.controller.startStreaming();\n }\n\n /**\n * Stop streaming\n */\n async stopStreaming(): Promise<void> {\n return this.controller.stopStreaming();\n }\n\n // ========================================\n // Quality Methods\n // ========================================\n\n /**\n * Get current quality profile\n */\n getQualityProfile(): QualityProfile {\n return this.controller.getQualityProfile();\n }\n\n /**\n * Set quality profile\n */\n async setQualityProfile(profile: QualityProfile): Promise<void> {\n return this.controller.setQualityProfile(profile);\n }\n\n // ========================================\n // Device Methods\n // ========================================\n\n /**\n * Get available devices\n */\n async getDevices(): Promise<DeviceInfo[]> {\n return this.controller.getDevices();\n }\n\n /**\n * Switch video device while streaming\n */\n async switchVideoDevice(deviceId: string): Promise<void> {\n return this.controller.switchVideoDevice(deviceId);\n }\n\n /**\n * Switch audio device while streaming\n */\n async switchAudioDevice(deviceId: string): Promise<void> {\n return this.controller.switchAudioDevice(deviceId);\n }\n\n // ========================================\n // State Methods\n // ========================================\n\n /**\n * Get current state\n */\n getState(): IngestState {\n return this.controller.getState();\n }\n\n /**\n * Get state context\n */\n getStateContext(): IngestStateContextV2 {\n return this.controller.getStateContext();\n }\n\n /**\n * Get current media stream (combined output)\n */\n getMediaStream(): MediaStream | null {\n return this.controller.getMediaStream();\n }\n\n /**\n * Get current stats\n */\n async getStats(): Promise<IngestStats | null> {\n return this.controller.getStats();\n }\n\n /**\n * Check if streaming\n */\n isStreaming(): boolean {\n return this.controller.isStreaming();\n }\n\n /**\n * Check if capturing\n */\n isCapturing(): boolean {\n return this.controller.isCapturing();\n }\n\n /**\n * Check if reconnecting\n */\n isReconnecting(): boolean {\n return this.controller.isReconnecting();\n }\n\n // ========================================\n // Advanced Access\n // ========================================\n\n /**\n * Get the audio mixer for direct control\n */\n getAudioMixer() {\n return this.controller.getAudioMixer();\n }\n\n /**\n * Get the reconnection manager for direct control\n */\n getReconnectionManager() {\n return this.controller.getReconnectionManager();\n }\n\n // ========================================\n // Lifecycle\n // ========================================\n\n /**\n * Destroy the instance\n */\n destroy(): void {\n this.controller.destroy();\n }\n}\n"],"names":["IngestControllerV2"],"mappings":"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"}