@danything/arib 1.2.0 → 1.2.2
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.
- package/README.md +13 -13
- package/dist/ait.d.ts +10 -10
- package/dist/ait.js +12 -12
- package/dist/aribtext-gaiji.d.ts +5 -5
- package/dist/aribtext-gaiji.js +7 -7
- package/dist/aribtext.d.ts +11 -11
- package/dist/aribtext.js +34 -34
- package/dist/b24-tables.d.ts +9 -9
- package/dist/b24-tables.js +59 -59
- package/dist/b24caption.d.ts +12 -12
- package/dist/b24caption.js +23 -23
- package/dist/bml-protocol.d.ts +4 -4
- package/dist/bml-protocol.js +2 -2
- package/dist/bml.d.ts +12 -12
- package/dist/bml.js +24 -24
- package/dist/bytes.d.ts +4 -4
- package/dist/bytes.js +4 -4
- package/dist/caption-text.d.ts +19 -19
- package/dist/caption-text.js +1 -1
- package/dist/drcs-smooth.d.ts +6 -6
- package/dist/drcs-smooth.js +5 -5
- package/dist/dsmcc.d.ts +11 -11
- package/dist/dsmcc.js +12 -12
- package/dist/eit.d.ts +38 -38
- package/dist/eit.js +68 -54
- package/dist/language.d.ts +2 -2
- package/dist/language.js +2 -2
- package/dist/multipart.d.ts +4 -4
- package/dist/multipart.js +6 -6
- package/dist/pes.d.ts +13 -13
- package/dist/pes.js +12 -12
- package/dist/psi.d.ts +22 -22
- package/dist/psi.js +25 -25
- package/dist/service-filter.d.ts +14 -14
- package/dist/service-filter.js +18 -18
- package/dist/synth-av.d.ts +7 -7
- package/dist/synth-av.js +15 -15
- package/dist/synth-caption.d.ts +6 -6
- package/dist/synth-caption.js +9 -9
- package/dist/synth.d.ts +16 -16
- package/dist/synth.js +28 -28
- package/package.json +1 -1
package/dist/synth.js
CHANGED
|
@@ -10,7 +10,7 @@ import { PACKET, SYNC, withCrc } from "./psi.js";
|
|
|
10
10
|
export { withCrc };
|
|
11
11
|
const be = (value) => [(value >> 8) & 0xff, value & 0xff];
|
|
12
12
|
const be32 = (value) => [...be(value >>> 16), ...be(value & 0xffff)];
|
|
13
|
-
/** セクションの頭8バイト (長さは `withCrc` が埋める) */
|
|
13
|
+
/** セクションの頭 8 バイト (長さは `withCrc` が埋める) */
|
|
14
14
|
function head(tableId, extension, part = {}) {
|
|
15
15
|
return [
|
|
16
16
|
tableId,
|
|
@@ -35,8 +35,8 @@ export function putPcr(packet, pcr) {
|
|
|
35
35
|
/**
|
|
36
36
|
* Unicode → JIS X 0208 の区点。**読む側の裏返し。**
|
|
37
37
|
*
|
|
38
|
-
* 表を抱え込まずに、EUC-JP のデコーダを1回だけ総当たりして作る
|
|
39
|
-
* (84区 × 94点 = 7896 文字)。テストと偽放送局からしか呼ばないので、
|
|
38
|
+
* 表を抱え込まずに、EUC-JP のデコーダを 1 回だけ総当たりして作る
|
|
39
|
+
* (84 区 × 94 点 = 7896 文字)。テストと偽放送局からしか呼ばないので、
|
|
40
40
|
* 最初に使うときまで作らない。
|
|
41
41
|
*/
|
|
42
42
|
let jis = null;
|
|
@@ -57,7 +57,7 @@ function jisTable() {
|
|
|
57
57
|
return jis;
|
|
58
58
|
}
|
|
59
59
|
/**
|
|
60
|
-
* 文字列を ARIB STD-B24 の8単位符号にする。
|
|
60
|
+
* 文字列を ARIB STD-B24 の 8 単位符号にする。
|
|
61
61
|
*
|
|
62
62
|
* 初期状態 (G0=漢字) から始めて、ASCII のところだけ英数集合へ切り替える。
|
|
63
63
|
* 本物の放送はもっと凝った切り替え方をするが、**読む側が同じ経路を通れば足りる**。
|
|
@@ -81,13 +81,13 @@ export function encodeAribText(text, half = false) {
|
|
|
81
81
|
out.push(0x1b, 0x24, 0x42, ...(half ? [0x8a] : []));
|
|
82
82
|
alnum = false;
|
|
83
83
|
const kuten = jisTable().get(char);
|
|
84
|
-
// 表に無い字は下駄で埋める (2区14点)。長さが変わらないので位置がずれない
|
|
84
|
+
// 表に無い字は下駄で埋める (2 区 14 点)。長さが変わらないので位置がずれない
|
|
85
85
|
out.push(...be(kuten ?? 0x222e));
|
|
86
86
|
}
|
|
87
87
|
return out;
|
|
88
88
|
}
|
|
89
89
|
/**
|
|
90
|
-
* 番組名・局名 (SI) に書く形式。**ASCII は中型 (MSZ)
|
|
90
|
+
* 番組名・局名 (SI) に書く形式。**ASCII は中型 (MSZ) で挟んで半角で読ませる。** 標準の大きさの
|
|
91
91
|
* 英数はテレビが全角で描く (読む側 `aribtext.ts` も全角にする)。全角の英数 (「Venue」) は
|
|
92
92
|
* 漢字の集合の字として書くので、読めば書いたとおりの文字列に戻る
|
|
93
93
|
*/
|
|
@@ -96,7 +96,7 @@ function encodeSiText(text) {
|
|
|
96
96
|
}
|
|
97
97
|
/** 言語の符号 "jpn" (ISO 639-2) */
|
|
98
98
|
const JPN = [0x6a, 0x70, 0x6e];
|
|
99
|
-
/** 長さ1バイトを頭に付けた文字列。SI の記述子はどこもこの形式 */
|
|
99
|
+
/** 長さ 1 バイトを頭に付けた文字列。SI の記述子はどこもこの形式 */
|
|
100
100
|
const sized = (text) => {
|
|
101
101
|
const body = encodeSiText(text);
|
|
102
102
|
return [body.length, ...body];
|
|
@@ -117,9 +117,9 @@ options = {}) {
|
|
|
117
117
|
}
|
|
118
118
|
return withCrc(body);
|
|
119
119
|
}
|
|
120
|
-
/** 2桁の10進を BCD の1バイトに */
|
|
120
|
+
/** 2 桁の 10 進を BCD の 1 バイトに */
|
|
121
121
|
const bcd = (value) => ((Math.floor(value / 10) << 4) | (value % 10)) & 0xff;
|
|
122
|
-
/** epoch ms → MJD + BCD の5バイト。放送の時刻は日本時間で書く */
|
|
122
|
+
/** epoch ms → MJD + BCD の 5 バイト。放送の時刻は日本時間で書く */
|
|
123
123
|
function mjdTime(at) {
|
|
124
124
|
const jst = Math.floor(at / 1000) + 9 * 3600;
|
|
125
125
|
const mjd = Math.floor(jst / 86400) + 40587;
|
|
@@ -131,7 +131,7 @@ function mjdTime(at) {
|
|
|
131
131
|
bcd(rest % 60),
|
|
132
132
|
];
|
|
133
133
|
}
|
|
134
|
-
/** ms → BCD 3バイトの尺 */
|
|
134
|
+
/** ms → BCD 3 バイトの尺 */
|
|
135
135
|
function bcdDuration(ms) {
|
|
136
136
|
const total = Math.floor(ms / 1000);
|
|
137
137
|
return [
|
|
@@ -141,11 +141,11 @@ function bcdDuration(ms) {
|
|
|
141
141
|
];
|
|
142
142
|
}
|
|
143
143
|
/**
|
|
144
|
-
* シリーズ記述子 (0xD5。ARIB STD-B10 第2部)。
|
|
144
|
+
* シリーズ記述子 (0xD5。ARIB STD-B10 第 2 部)。
|
|
145
145
|
*
|
|
146
146
|
* series_id(16) / repeat_label(4) program_pattern(3) expire_date_valid_flag(1) /
|
|
147
147
|
* expire_date(16) / episode_number(12) last_episode_number(12) / series_name_char。
|
|
148
|
-
* 有効期限は載せない (flag 0、日付は全ビット1)
|
|
148
|
+
* 有効期限は載せない (flag 0、日付は全ビット 1)
|
|
149
149
|
*/
|
|
150
150
|
function seriesDescriptor(series) {
|
|
151
151
|
const episode = series.episode ?? 0;
|
|
@@ -164,7 +164,7 @@ function seriesDescriptor(series) {
|
|
|
164
164
|
}
|
|
165
165
|
/**
|
|
166
166
|
* デジタルコピー制御記述子 (0xC1)。EIT の番組と PMT に載る。
|
|
167
|
-
* 中身は1バイトだけ: 記録制御 (2) 最大ビットレートの有無 (1) 部品ごとの制御の有無 (1) 出力の制御 (4)
|
|
167
|
+
* 中身は 1 バイトだけ: 記録制御 (2) 最大ビットレートの有無 (1) 部品ごとの制御の有無 (1) 出力の制御 (4)
|
|
168
168
|
*/
|
|
169
169
|
export function copyControlDescriptor(control) {
|
|
170
170
|
return [0xc1, 0x01, ((control & 0b11) << 6) | 0b0100];
|
|
@@ -203,7 +203,7 @@ function eventDescriptors(event) {
|
|
|
203
203
|
* simulcast_group_tag / フラグ / 言語 / **放送が付けた名前**。
|
|
204
204
|
*
|
|
205
205
|
* フラグは 多言語(1) 主音声(1) 品質(2) 標本化周波数(3) reserved(1)。
|
|
206
|
-
* 名前は、種別も言語も同じ音声が2本あるとき**唯一の見分け**になる
|
|
206
|
+
* 名前は、種別も言語も同じ音声が 2 本あるとき**唯一の見分け**になる
|
|
207
207
|
*/
|
|
208
208
|
const lang = [...(audio.lang ?? "jpn")].map((c) => c.charCodeAt(0));
|
|
209
209
|
const text = encodeSiText(audio.text ?? "");
|
|
@@ -320,11 +320,11 @@ export function packetize(pid, section, counter = 0) {
|
|
|
320
320
|
}
|
|
321
321
|
return Uint8Array.from(packets);
|
|
322
322
|
}
|
|
323
|
-
/** 部品を1本のバイト列に繋ぐ。組んだパケットを流し込むときの糊 */
|
|
323
|
+
/** 部品を 1 本のバイト列に繋ぐ。組んだパケットを流し込むときの糊 */
|
|
324
324
|
export function stream(...parts) {
|
|
325
325
|
return joinBytes(parts);
|
|
326
326
|
}
|
|
327
|
-
/** PCR を1つ運ぶだけのパケット */
|
|
327
|
+
/** PCR を 1 つ運ぶだけのパケット */
|
|
328
328
|
export function pcrPacket(pid, seconds, counter = 0) {
|
|
329
329
|
const packet = new Uint8Array(PACKET).fill(0xff);
|
|
330
330
|
packet[0] = SYNC;
|
|
@@ -337,11 +337,11 @@ export function pcrPacket(pid, seconds, counter = 0) {
|
|
|
337
337
|
putPcr(packet, seconds * 90_000);
|
|
338
338
|
return packet;
|
|
339
339
|
}
|
|
340
|
-
/** 放送の実時刻 (TDT) を1
|
|
340
|
+
/** 放送の実時刻 (TDT) を 1 パケットに。データ放送の時刻 (`BmlDecoder` の `currentTime`) はこれから作る */
|
|
341
341
|
export function tdtPacket(unixMs) {
|
|
342
342
|
return packetize(0x0014, Uint8Array.from([0x70, 0x70, 0x05, ...mjdTime(unixMs)]));
|
|
343
343
|
}
|
|
344
|
-
/** PAT。サービスID → PMT の PID */
|
|
344
|
+
/** PAT。サービス ID → PMT の PID */
|
|
345
345
|
export function patSection(programs, transportStreamId = 1) {
|
|
346
346
|
const body = head(0x00, transportStreamId);
|
|
347
347
|
for (const [serviceId, pmtPid] of programs) {
|
|
@@ -350,7 +350,7 @@ export function patSection(programs, transportStreamId = 1) {
|
|
|
350
350
|
return withCrc(body);
|
|
351
351
|
}
|
|
352
352
|
/**
|
|
353
|
-
* PMT。ロゴのカルーセルが乗る ES を1つだけ持たせる。
|
|
353
|
+
* PMT。ロゴのカルーセルが乗る ES を 1 つだけ持たせる。
|
|
354
354
|
* 目印は stream_identifier_descriptor (0x52) の component_tag
|
|
355
355
|
*/
|
|
356
356
|
export function pmtSection(serviceId, esPid, componentTag) {
|
|
@@ -377,7 +377,7 @@ export function pmtSection(serviceId, esPid, componentTag) {
|
|
|
377
377
|
* [service-filter.ts](service-filter.ts) を試すのに要る
|
|
378
378
|
*/
|
|
379
379
|
export function programMap(serviceId, pcrPid,
|
|
380
|
-
/** `[種別, PID]`。**3つ目は記述子**の並び (字幕の部品タグなど) */
|
|
380
|
+
/** `[種別, PID]`。**3 つ目は記述子**の並び (字幕の部品タグなど) */
|
|
381
381
|
streams, ecmPid,
|
|
382
382
|
/** 番組ぜんたいに掛かる記述子 (program_info) に足すもの。コピー制御 ({@link copyControlDescriptor}) など */
|
|
383
383
|
extra = []) {
|
|
@@ -409,7 +409,7 @@ export function bxmlDescriptor(options = {}) {
|
|
|
409
409
|
const { dataComponentId = 0x0c, entryPoint = true } = options;
|
|
410
410
|
const body = [
|
|
411
411
|
...be(dataComponentId),
|
|
412
|
-
// 伝送方式00 / 入口 / 自動起動 / 解像度0011 (960x540)
|
|
412
|
+
// 伝送方式 00 / 入口 / 自動起動 / 解像度 0011 (960x540)
|
|
413
413
|
...(entryPoint ? [0x33, 0x70] : [0x00, 0xff]),
|
|
414
414
|
0xf8, // dataEventId 0xF / event_section_flag
|
|
415
415
|
0xa0, // 即時取得あり / 蓄積不可 / 起動優先
|
|
@@ -420,7 +420,7 @@ export function bxmlDescriptor(options = {}) {
|
|
|
420
420
|
* 字幕の ES (stream_type 0x06) に付ける記述子。**字幕の目印。**
|
|
421
421
|
*
|
|
422
422
|
* 部品タグ (stream_identifier_descriptor。ふつうの字幕は 0x30〜0x37) と、データ符号化方式記述子の
|
|
423
|
-
* data_component_id 0x0008 (字幕)。続く1バイトの DMF・時刻制御モードは denpa も ffmpeg も見ない
|
|
423
|
+
* data_component_id 0x0008 (字幕)。続く 1 バイトの DMF・時刻制御モードは denpa も ffmpeg も見ない
|
|
424
424
|
*/
|
|
425
425
|
export function captionDescriptors(componentTag = 0x30) {
|
|
426
426
|
return [0x52, 0x01, componentTag, 0xfd, 0x03, 0x00, 0x08, 0x3d];
|
|
@@ -433,7 +433,7 @@ function dsmccSection(tableId, message) {
|
|
|
433
433
|
* DII。「このモジュールは何バイトで、名前は何か」を伝える。
|
|
434
434
|
*
|
|
435
435
|
* **複数のモジュールを載せられる。** 本物の BS はここに `LOGO-05` と
|
|
436
|
-
* `CS_LOGO-05` を並べて流していて (実機の `BS15:16625` で確認)、1つしか
|
|
436
|
+
* `CS_LOGO-05` を並べて流していて (実機の `BS15:16625` で確認)、1 つしか
|
|
437
437
|
* 載せられない作りでは CS を取りこぼす経路を試せない。
|
|
438
438
|
*/
|
|
439
439
|
export function diiSection(downloadId, blockSize, modules,
|
|
@@ -469,7 +469,7 @@ transactionId = 1) {
|
|
|
469
469
|
0x00, // ackPeriod
|
|
470
470
|
...be32(0), // tCDownloadWindow
|
|
471
471
|
...be32(0), // tCDownloadScenario
|
|
472
|
-
...be(0), // compatibilityDescriptor: 長さ0
|
|
472
|
+
...be(0), // compatibilityDescriptor: 長さ 0
|
|
473
473
|
...be(list.length), // numberOfModules
|
|
474
474
|
...entries,
|
|
475
475
|
...be(0), // privateDataLength
|
|
@@ -485,7 +485,7 @@ transactionId = 1) {
|
|
|
485
485
|
...rest,
|
|
486
486
|
]);
|
|
487
487
|
}
|
|
488
|
-
/** DDB。モジュールを割ったブロックを1つ運ぶ */
|
|
488
|
+
/** DDB。モジュールを割ったブロックを 1 つ運ぶ */
|
|
489
489
|
export function ddbSection(downloadId, moduleId, moduleVersion, blockNumber, block) {
|
|
490
490
|
return dsmccSection(0x3c, [
|
|
491
491
|
0x11,
|
|
@@ -516,7 +516,7 @@ export function logoModule(logoType, logos) {
|
|
|
516
516
|
}
|
|
517
517
|
/*
|
|
518
518
|
* --- データ放送のテストで使う定番の割り振り ---
|
|
519
|
-
* denpa の bml / data-timeline / recorded-bml の3つのテストが、同じ表と同じ組み立てを
|
|
519
|
+
* denpa の bml / data-timeline / recorded-bml の 3 つのテストが、同じ表と同じ組み立てを
|
|
520
520
|
* それぞれに書いていた。番号そのものに意味は無く、揃っていることに意味がある。
|
|
521
521
|
*/
|
|
522
522
|
export const BML_TS = {
|
|
@@ -527,7 +527,7 @@ export const BML_TS = {
|
|
|
527
527
|
downloadId: 0xf0000001,
|
|
528
528
|
componentTag: 0x40,
|
|
529
529
|
};
|
|
530
|
-
/** BML の ES が1本だけ載った PMT (`BML_TS` の割り振り) */
|
|
530
|
+
/** BML の ES が 1 本だけ載った PMT (`BML_TS` の割り振り) */
|
|
531
531
|
export function bmlPmt() {
|
|
532
532
|
return programMap(BML_TS.service, BML_TS.videoPid, [
|
|
533
533
|
[0x02, BML_TS.videoPid, [0x52, 0x01, 0x00]],
|
|
@@ -546,7 +546,7 @@ export function bmlHead() {
|
|
|
546
546
|
];
|
|
547
547
|
}
|
|
548
548
|
/**
|
|
549
|
-
* モジュール1つぶんの中身。**放送は multipart/mixed で複数のファイルを詰める。**
|
|
549
|
+
* モジュール 1 つぶんの中身。**放送は multipart/mixed で複数のファイルを詰める。**
|
|
550
550
|
* 本物と同じく、頭に Content-Type、境界で区切って各ファイルに Content-Location
|
|
551
551
|
*/
|
|
552
552
|
export function multipartModule(files) {
|