
Research
NPM targeted by malware campaign mimicking familiar library names
Socket uncovered npm malware campaign mimicking popular Node.js libraries and packages from other ecosystems; packages steal data and execute remote code.
mse-audio-wrapper
Advanced tools
Library to enable Media Source Extensions API playback for unsupported audio containers and raw codecs
mse-audio-wrapper
is a library to enable Media Source Extensions API playback for unsupported audio containers and raw codecs. MSE Audio Wrapper uses both WEBM and the ISO Base Media File Format (MPEG-4 Part 12) (commonly referred to as Fragmented MP4 or fmp4).
icecast-metadata-js
npm i mse-audio-wrapper
To use MSEAudioWrapper
, create a new instance of the class by passing in the mimetype of your audio data.
Note: For directly converting from a HTTP response, use the mimetype contained in the Content-Type
header
import MSEAudioWrapper from "mse-audio-wrapper";
const headers = myHTTPResponse.headers;
const mimeType = headers.get('Content-Type');
const audioWrapper = new MSEAudioWrapper(mimeType);
To begin processing audio data, pass in the audio data into the instance's .iterator()
. This method returns an iterator that can be consumed using a for ...of
or for await...of
loop. Repeat this step until all audio data has been read.
const audioData = response.body;
for (const wrappedAudio of audioWrapper.iterator(audioData)) {
// Do something with the wrapped data
}
MSEAudioWrapper will store any partial data until at least one full audio frame can be processed.
Note: Any data that does not conform to the instance's mimetype will be discarded.
Once enough data has been received to form at least 4 complete audio frames, and 1022 bytes of audio data, the initial segment will be returned along with a media segment containing the audio data. These values are user configurable using the options
parameter in the constructor.
1st Iteration
"initial segment"
--ftyp [file type]
--moov [movie]
"media segment"
--moof [movie fragment]
--mdat [audio data]
Subsequent iterations will only return media segments.
nth Iteration
"media segment"
--moof [movie fragment]
--mdat [audio data]
MSEAudioWrapper
Default export
const wrapper = new MSEAudioWrapper("audio/mpeg", {minFramesPerSegment: 2, minBytesPerSegment: 576, preferredContainer: "webm"});
constructor
mimetype
required Incoming audio codec or container
audio/mpeg
audio/aac
, audio/aacp
audio/flac
application/ogg
, audio/ogg
application/ogg
, audio/ogg
application/ogg
, audio/ogg
options
optional
options.minFramesPerSegment
optional Minimum audio frames to store before returning a segment
4
options.minBytesPerSegment
optional Minimum audio bytes to store before returning a segment
1022
options.maxFramesPerSegment
optional Maximum audio frames to group in a single segment
50
options.preferredContainer
optional Preferred output container when there are multiple supported containers
"webm"
, "fmp4"
"webm"
options.codec
optional Specifies the type of codec frames that will be passed into iterator(Array<CodecFrame>)
Uint8Array
data to iterator()
aac
, flac
, mpeg
, opus
, vorbis
undefined
options.enableLogging
optional Set to true
to enable debug logging
false
options.onMimeType(mimeType)
optional Called when the output mimeType is determined.
wrapper.mimeType
for a list of the possible output mimetypesoptions.onCodecUpdate(codecInfo, updateTimestamp)
optional Called when there is a change in the codec header.
codecInfo
is an object containing information about the codec such as bitrate
, sampleRate
, etc.updateTimestamp
is the time in milliseconds within the audio stream when the codec information was updatedwrapper.iterator(Uint8Array | Array<CodecFrame>)
for ...of
loop to return wrapped audiodata
(Uint8Array
| Array<CodecFrame>
)
CodecFrame
must follow the api noted in codec-parser
and options.codec
must be set with the correct codec.wrapper.inputMimeType
audio/mpeg
audio/aac
audio/flac
application/ogg
, audio/ogg
application/ogg
, audio/ogg
application/ogg
, audio/ogg
wrapper.mimeType
audio/mp4;codecs="mp3"
audio/mp4;codecs="mp4a.40.2"
audio/mp4;codecs="flac"
audio/mp4;codecs="opus"
audio/webm;codecs="opus"
audio/webm;codecs="vorbis"
getWrappedMimeType(codec, container = WEBM)
Named export
Returns the mime-type that MSEAudioWrapper will produce given a passed in codec and container type.
codec
required
aac
, flac
, mpeg
, opus
, vorbis
container
optional
"webm"
, "fmp4"
"webm"
mse-audio-wrapper
is used in the demo for icecast-metadata-js
to allow for Icecast metadata support in Firefox (mp3, aac, flac) and Chrome (flac) by wrapping the streaming audio in ISOBMFF so it can be used with the MediaSource API.
https://github.com/eshaz/icecast-metadata-js/tree/master/src/demo
FAQs
Library to enable Media Source Extensions API playback for unsupported audio containers and raw codecs
The npm package mse-audio-wrapper receives a total of 456 weekly downloads. As such, mse-audio-wrapper popularity was classified as not popular.
We found that mse-audio-wrapper demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Socket uncovered npm malware campaign mimicking popular Node.js libraries and packages from other ecosystems; packages steal data and execute remote code.
Research
Socket's research uncovers three dangerous Go modules that contain obfuscated disk-wiping malware, threatening complete data loss.
Research
Socket uncovers malicious packages on PyPI using Gmail's SMTP protocol for command and control (C2) to exfiltrate data and execute commands.