odyssey-official-audio-video-sdk
v1.0.1
Published
Odyssey Official Audio & Video SDK using MediaSoup for real-time communication
Maintainers
Readme
Odyssey Spatial Audio SDK
A comprehensive SDK for real-time spatial audio and video communication using MediaSoup, designed for immersive multi-user experiences in the Odyssey platform.
Purpose
This package provides a complete WebRTC-based spatial audio and video solution that:
- Manages MediaSoup connections for audio/video streaming
- Implements spatial audio using Web Audio API with HRTF
- Handles participant management with user profile data (bodyHeight, bodyShape, email, etc.)
- Provides real-time position tracking for immersive spatial experiences
Installation
You can install this package from npm:
npm install @newgameplusinc/odyssey-spatial-sdk-wrapperOr install locally:
npm install ../mediasoup-sdk-testUsage
1. Initialize the SDK
import { OdysseySpatialComms } from "@newgameplusinc/odyssey-spatial-sdk-wrapper";
// Initialize with your MediaSoup server URL
const sdk = new OdysseySpatialComms("https://your-mediasoup-server.com");2. Join a Room with User Profile Data
const participant = await sdk.joinRoom({
roomId: "my-room",
userId: "user-123",
deviceId: "device-456",
position: { x: 0, y: 0, z: 0 },
direction: { x: 0, y: 0, z: 1 },
bodyHeight: "0.5", // User's avatar height from Firebase
bodyShape: "4", // User's avatar body shape from Firebase
userName: "John Doe", // User's display name
userEmail: "[email protected]" // User's email
});3. Produce Audio/Video Tracks
// Get user media
const stream = await navigator.mediaDevices.getUserMedia({
audio: true,
video: true
});
// Produce audio track
const audioTrack = stream.getAudioTracks()[0];
await sdk.produceTrack(audioTrack);
// Produce video track
const videoTrack = stream.getVideoTracks()[0];
await sdk.produceTrack(videoTrack);4. Update Position for Spatial Audio
sdk.updatePosition(
{ x: 10, y: 0, z: 5 }, // New position
{ x: 0, y: 0, z: 1 } // New direction
);5. Listen to Events
// New participant joined
sdk.on("new-participant", (participant) => {
console.log("New participant:", participant.userName, participant.bodyHeight);
});
// Participant left
sdk.on("participant-left", (participantId) => {
console.log("Participant left:", participantId);
});
// Consumer created (receiving audio/video from remote participant)
sdk.on("consumer-created", ({ participant, track, consumer }) => {
console.log("Receiving", track.kind, "from", participant.userName);
});Build
To build the package, run:
npm run build