Skip to main content

SosGetResultAudio

SosGetResultVideo is a specific DataSource to parse Audio data.

The class inherits directly from TimeSeriesDataSource.

There are specific properties for this DataSource.

Parser

The underlaying stream is binary.

The first 8 bytes is the timestamp in millis.

The next 4 bytes define the sampleRate.

The next 4 bytes define the number of samples.

The next 4 bytes define the data compressed size.

The next bytes are corresponding to an audio frame.

|--- 8 bytes timestamp ---|--- 4 bytes sampleRate ---|--- 4 bytes number of samples ---|--- 4 bytes data compressed size ---|--- AUDIO FRAME ---|

From Server:

[..binary..data..]

After Parsing:

{
timeStamp: 1450559070000,
data: {
frameData: [..binary..AUDIO FRAME...],
sampleRate: 11025,
nbSamples: 750,
pktLength: 1024
}
}

Example


import SosGetResultAudio from "osh-js/core/datasource/SosGetResultAudio";

let audioDataSource = new SosGetResultAudio("alex-audio", {
protocol: "ws",
service: "SOS",
endpointUrl: "sensiasoft.net:8181/sensorhub/sos",
offeringID: "urn:android:device:dd90fceba7fd5b47-sos",
observedProperty: "http://sensorml.com/ont/swe/property/AudioFrame",
startTime: "2021-04-12T10:48:45Z",
endTime: "2021-04-12T10:49:45Z",
replaySpeed: 1.0,
bufferingTime: 1000
});

// Data are received through Broadcast channel in a separate thread.
// When you create a View object, it automatically subscribes to the corresponding datasource channel(s).
// If you don't have view, or don't need, you can directly subscribe to the channel

const audioBroadcastChannel = new BroadcastChannel(DATASOURCE_DATA_TOPIC + audioDataSource.id);
const divElement = document.getElementById('datasource-audio');

audioBroadcastChannel.onmessage = (message) => {
if(message.data.type === 'data') {
let dataEvent;
for(let i=0;i < message.data.values.length;i++) {
dataEvent = message.data.values[i];
dataEvent.data.frameData = message.data.values[i].data.frameData.slice(0,10);
divElement.value += JSON.stringify( [dataEvent]) + '\n';
}
}
}

// start streaming onclick
const runButtonElement = document.getElementById('run-datasource-button');
runButtonElement.onclick = () => audioDataSource.connect();