mirror of
https://github.com/codedread/bitjs
synced 2025-10-04 01:59:15 +02:00
Fix for m4a files as audio/mp4. Up-rev to 1.1.2.
This commit is contained in:
parent
a7d32942c0
commit
e072b35854
5 changed files with 40 additions and 16 deletions
|
@ -2,6 +2,10 @@
|
||||||
|
|
||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
|
## [1.1.2] - 2023-09-30
|
||||||
|
|
||||||
|
- codecs: Handle m4a files as audio/mp4.
|
||||||
|
|
||||||
## [1.1.1] - 2023-06-21
|
## [1.1.1] - 2023-06-21
|
||||||
|
|
||||||
- Fix missing RarVM import in unrar.js.
|
- Fix missing RarVM import in unrar.js.
|
||||||
|
|
|
@ -58,6 +58,11 @@ export function getShortMIMEString(info) {
|
||||||
return 'audio/flac';
|
return 'audio/flac';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// M4A files are specifically audio/mp4.
|
||||||
|
if (info?.format?.filename?.toLowerCase().endsWith('.m4a')) {
|
||||||
|
return 'audio/mp4';
|
||||||
|
}
|
||||||
|
|
||||||
// Otherwise, any file with at least 1 video stream is considered video/.
|
// Otherwise, any file with at least 1 video stream is considered video/.
|
||||||
// Otherwise, any file with at least 1 audio stream is considered audio/.
|
// Otherwise, any file with at least 1 audio stream is considered audio/.
|
||||||
const type = info.streams.some(s => s.codec_type === 'video') ?
|
const type = info.streams.some(s => s.codec_type === 'video') ?
|
||||||
|
|
4
package-lock.json
generated
4
package-lock.json
generated
|
@ -1,12 +1,12 @@
|
||||||
{
|
{
|
||||||
"name": "@codedread/bitjs",
|
"name": "@codedread/bitjs",
|
||||||
"version": "1.0.11",
|
"version": "1.1.2",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "@codedread/bitjs",
|
"name": "@codedread/bitjs",
|
||||||
"version": "1.0.11",
|
"version": "1.1.2",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"c8": "^7.12.0",
|
"c8": "^7.12.0",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@codedread/bitjs",
|
"name": "@codedread/bitjs",
|
||||||
"version": "1.1.1",
|
"version": "1.1.2",
|
||||||
"description": "Binary Tools for JavaScript",
|
"description": "Binary Tools for JavaScript",
|
||||||
"homepage": "https://github.com/codedread/bitjs",
|
"homepage": "https://github.com/codedread/bitjs",
|
||||||
"author": "Jeff Schiller",
|
"author": "Jeff Schiller",
|
||||||
|
|
|
@ -75,6 +75,13 @@ describe('codecs test suite', () => {
|
||||||
})).equals('audio/mpeg');
|
})).equals('audio/mpeg');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('detects M4A audio', () => {
|
||||||
|
expect(getShortMIMEString({
|
||||||
|
format: { filename: 'sample.m4a', format_name: 'mov,mp4,m4a,3gp,3g2,mj2' },
|
||||||
|
streams: [ { codec_type: 'video', }, { codec_type: 'audio' } ],
|
||||||
|
})).equals('audio/mp4');
|
||||||
|
});
|
||||||
|
|
||||||
it('detects MP4 video', () => {
|
it('detects MP4 video', () => {
|
||||||
expect(getShortMIMEString({
|
expect(getShortMIMEString({
|
||||||
format: { format_name: 'mov,mp4,m4a,3gp,3g2,mj2' },
|
format: { format_name: 'mov,mp4,m4a,3gp,3g2,mj2' },
|
||||||
|
@ -306,24 +313,21 @@ describe('codecs test suite', () => {
|
||||||
|
|
||||||
describe('MP4A / AAC', () => {
|
describe('MP4A / AAC', () => {
|
||||||
/** @type {ProbeInfo} */
|
/** @type {ProbeInfo} */
|
||||||
let info;
|
let baseInfo = {
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
info = {
|
|
||||||
format: { format_name: 'mov,mp4,m4a,3gp,3g2,mj2' },
|
format: { format_name: 'mov,mp4,m4a,3gp,3g2,mj2' },
|
||||||
streams: [{
|
streams: [{
|
||||||
codec_type: 'audio',
|
codec_type: 'audio',
|
||||||
codec_tag_string: 'mp4a',
|
codec_tag_string: 'mp4a',
|
||||||
}],
|
}],
|
||||||
};
|
};
|
||||||
});
|
|
||||||
|
|
||||||
it('throws when unknown', () => {
|
it('throws when unknown', () => {
|
||||||
expect(() => getFullMIMEString(info)).to.throw();
|
expect(() => getFullMIMEString(baseInfo)).to.throw();
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Profile tests', () => {
|
describe('Profile tests', () => {
|
||||||
it('recognizes AAC-LC', () => {
|
it('recognizes AAC-LC', () => {
|
||||||
|
const info = structuredClone(baseInfo);
|
||||||
info.streams[0].profile = 'LC';
|
info.streams[0].profile = 'LC';
|
||||||
expect(getFullMIMEString(info))
|
expect(getFullMIMEString(info))
|
||||||
.to.be.a('string')
|
.to.be.a('string')
|
||||||
|
@ -332,6 +336,7 @@ describe('codecs test suite', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('handles codec_name=aac but no codec_tag_string', () => {
|
it('handles codec_name=aac but no codec_tag_string', () => {
|
||||||
|
const info = structuredClone(baseInfo);
|
||||||
info.streams[0].profile = 'LC';
|
info.streams[0].profile = 'LC';
|
||||||
info.streams[0].codec_tag_string = '[0][0][0][0]';
|
info.streams[0].codec_tag_string = '[0][0][0][0]';
|
||||||
info.streams[0].codec_name = 'aac';
|
info.streams[0].codec_name = 'aac';
|
||||||
|
@ -339,6 +344,16 @@ describe('codecs test suite', () => {
|
||||||
.to.be.a('string')
|
.to.be.a('string')
|
||||||
.and.equals('audio/mp4; codecs="mp4a.40.2"');
|
.and.equals('audio/mp4; codecs="mp4a.40.2"');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('handles m4a file with MJPEG stream', () => {
|
||||||
|
const info = structuredClone(baseInfo);
|
||||||
|
info.format.filename = 'sample.m4a';
|
||||||
|
info.streams[0].profile = 'LC';
|
||||||
|
info.streams.push({codec_name: 'mjpeg', codec_type: 'video', profile: 'Baseline'});
|
||||||
|
expect(getFullMIMEString(info))
|
||||||
|
.to.be.a('string')
|
||||||
|
.and.equals('audio/mp4; codecs="mp4a.40.2"');
|
||||||
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('MP4 / FLAC', () => {
|
describe('MP4 / FLAC', () => {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue