@danything/arib 1.3.1 → 2.0.0
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/dist/ait.d.ts +4 -4
- package/dist/ait.js +5 -5
- package/dist/aribtext-gaiji.d.ts +1 -1
- package/dist/aribtext-gaiji.js +1 -1
- package/dist/aribtext.js +3 -3
- package/dist/b24-tables.d.ts +5 -5
- package/dist/b24-tables.js +42 -42
- package/dist/b24caption.js +3 -3
- package/dist/bml-protocol.d.ts +2 -2
- package/dist/bml-protocol.js +1 -1
- package/dist/bml.d.ts +4 -4
- package/dist/bml.js +8 -8
- package/dist/bytes.d.ts +3 -3
- package/dist/bytes.js +3 -3
- package/dist/caption-text.d.ts +1 -1
- package/dist/drcs-smooth.d.ts +1 -1
- package/dist/drcs-smooth.js +1 -1
- package/dist/dsmcc.d.ts +5 -5
- package/dist/dsmcc.js +4 -4
- package/dist/eit.d.ts +11 -11
- package/dist/eit.js +17 -17
- package/dist/multipart.js +1 -1
- package/dist/pes.d.ts +4 -4
- package/dist/pes.js +10 -10
- package/dist/psi.d.ts +11 -44
- package/dist/psi.js +26 -35
- package/dist/service-filter.d.ts +9 -9
- package/dist/service-filter.js +10 -10
- package/dist/synth-av.d.ts +5 -5
- package/dist/synth-av.js +8 -8
- package/dist/synth-caption.d.ts +1 -1
- package/dist/synth-caption.js +1 -1
- package/dist/synth.d.ts +10 -10
- package/dist/synth.js +11 -11
- package/package.json +1 -1
package/dist/ait.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* AIT (Application Information Table) を読む。**Hybridcast の在り処。**
|
|
3
3
|
*
|
|
4
|
-
* データ放送 (BML) と違って、**Hybridcast
|
|
5
|
-
*
|
|
4
|
+
* データ放送 (BML) と違って、**Hybridcast のアプリは放送では送られていません**。
|
|
5
|
+
* 送られているのはこの表だけで、中身は「どこにアプリがあるか」のアドレス (URL) です。
|
|
6
6
|
* アプリそのものは放送局のサーバから HTTPS で取ってきます。
|
|
7
7
|
*
|
|
8
8
|
* ```
|
|
9
9
|
* PMT ─ ES に application_signalling_descriptor (0x6F) ─→ その PID に AIT
|
|
10
|
-
* AIT ─ transport_protocol_descriptor (URL
|
|
10
|
+
* AIT ─ transport_protocol_descriptor (URL の先頭部分)
|
|
11
11
|
* └ simple_application_location_descriptor (その先のパス) → アプリの URL
|
|
12
12
|
* ```
|
|
13
13
|
*
|
|
@@ -87,7 +87,7 @@ export declare class AitReader {
|
|
|
87
87
|
/**
|
|
88
88
|
* TS を読んで、見つかったものを返す。**見つからない間は空**。
|
|
89
89
|
*
|
|
90
|
-
*
|
|
90
|
+
* 同じものが何度も返るのは呼ぶ側でまとめてください。放送は同じ表を
|
|
91
91
|
* 繰り返し流すので、ここで覚えると「局を変えても消えない」になります
|
|
92
92
|
*/
|
|
93
93
|
feed(chunk: Uint8Array): Ait[];
|
package/dist/ait.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* AIT (Application Information Table) を読む。**Hybridcast の在り処。**
|
|
3
3
|
*
|
|
4
|
-
* データ放送 (BML) と違って、**Hybridcast
|
|
5
|
-
*
|
|
4
|
+
* データ放送 (BML) と違って、**Hybridcast のアプリは放送では送られていません**。
|
|
5
|
+
* 送られているのはこの表だけで、中身は「どこにアプリがあるか」のアドレス (URL) です。
|
|
6
6
|
* アプリそのものは放送局のサーバから HTTPS で取ってきます。
|
|
7
7
|
*
|
|
8
8
|
* ```
|
|
9
9
|
* PMT ─ ES に application_signalling_descriptor (0x6F) ─→ その PID に AIT
|
|
10
|
-
* AIT ─ transport_protocol_descriptor (URL
|
|
10
|
+
* AIT ─ transport_protocol_descriptor (URL の先頭部分)
|
|
11
11
|
* └ simple_application_location_descriptor (その先のパス) → アプリの URL
|
|
12
12
|
* ```
|
|
13
13
|
*
|
|
@@ -73,7 +73,7 @@ export function aitPidsFromPmt(section) {
|
|
|
73
73
|
return pids;
|
|
74
74
|
}
|
|
75
75
|
/**
|
|
76
|
-
* URL
|
|
76
|
+
* URL の先頭部分を取り出す (transport_protocol_descriptor)。
|
|
77
77
|
*
|
|
78
78
|
* **通信路で運ぶものだけ見ます。** `protocol_id` が 1 のものは放送のカルーセルで
|
|
79
79
|
* 運ぶアプリ (データ放送と同じ経路) で、Hybridcast の話ではありません
|
|
@@ -176,7 +176,7 @@ export class AitReader {
|
|
|
176
176
|
/**
|
|
177
177
|
* TS を読んで、見つかったものを返す。**見つからない間は空**。
|
|
178
178
|
*
|
|
179
|
-
*
|
|
179
|
+
* 同じものが何度も返るのは呼ぶ側でまとめてください。放送は同じ表を
|
|
180
180
|
* 繰り返し流すので、ここで覚えると「局を変えても消えない」になります
|
|
181
181
|
*/
|
|
182
182
|
feed(chunk) {
|
package/dist/aribtext-gaiji.d.ts
CHANGED
package/dist/aribtext-gaiji.js
CHANGED
package/dist/aribtext.js
CHANGED
|
@@ -36,7 +36,7 @@ const MOSAIC = { bytes: 1, kind: "blank" };
|
|
|
36
36
|
/**
|
|
37
37
|
* 終端バイト → 符号表。ESC の指示で使う。
|
|
38
38
|
*
|
|
39
|
-
* モザイク (0x32〜0x35)
|
|
39
|
+
* モザイク (0x32〜0x35) は図形なので読めるものが無い。**捨てずに字の無い集合として扱う**のは、
|
|
40
40
|
* 1 バイト表として字数を数え続けないと以降がずれるため。
|
|
41
41
|
*
|
|
42
42
|
* **オブジェクトではなく Map。** 数値のキーは書式が 10 進に直されてしまい、
|
|
@@ -110,7 +110,7 @@ function twoByte(code, kind) {
|
|
|
110
110
|
const cell = (ku - 1) * 94 + low - 0x21;
|
|
111
111
|
let decoded;
|
|
112
112
|
if (low > 0x7e) {
|
|
113
|
-
decoded = ""; // 0x7F は字ではない (
|
|
113
|
+
decoded = ""; // 0x7F は字ではない (次の区の先頭を引かないように)
|
|
114
114
|
}
|
|
115
115
|
else if (kind === "plane2") {
|
|
116
116
|
decoded = PLANE2_ROWS.get(ku)?.[low - 0x21] ?? "";
|
|
@@ -321,7 +321,7 @@ function afterEscape(data, at, designate, invoke) {
|
|
|
321
321
|
if (next === undefined)
|
|
322
322
|
return at + 2;
|
|
323
323
|
if (next >= 0x28 && next <= 0x2b) {
|
|
324
|
-
// ESC 0x24 0x2x 0x20 F は 2 バイト DRCS
|
|
324
|
+
// ESC 0x24 0x2x 0x20 F は 2 バイト DRCS。読めないので字の無い集合として扱う
|
|
325
325
|
if (data[at + 2] === 0x20) {
|
|
326
326
|
designate(next - 0x28, { bytes: 2, kind: "blank" });
|
|
327
327
|
return at + 4;
|
package/dist/b24-tables.d.ts
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
* 1. 字幕の JSON (`/api/recordings/<id>/captions.json` の `drcs`) の `md5` を読み取る。`data` の画像は送るために
|
|
26
26
|
* なめらかにしたもの (drcs-smooth.ts) なので、`data` から MD5 を取っても表と合わない
|
|
27
27
|
* 2. `[MD5, 字のコードポイント]` を足し、行末に「何の字か・どこで見たか (局・日付)」を書く
|
|
28
|
-
* 3.
|
|
28
|
+
* 3. フォントにその字があるか確かめる (無い字に置き換えると豆腐になる。画像のままのほうがよい)
|
|
29
29
|
*/
|
|
30
30
|
/** ひらがな集合 (0x21〜0x7E)。0x74〜0x76 は規格で空き (字幕は全角の空白で埋める) */
|
|
31
31
|
export declare const HIRAGANA = "\u3041\u3042\u3043\u3044\u3045\u3046\u3047\u3048\u3049\u304A\u304B\u304C\u304D\u304E\u304F\u3050\u3051\u3052\u3053\u3054\u3055\u3056\u3057\u3058\u3059\u305A\u305B\u305C\u305D\u305E\u305F\u3060\u3061\u3062\u3063\u3064\u3065\u3066\u3067\u3068\u3069\u306A\u306B\u306C\u306D\u306E\u306F\u3070\u3071\u3072\u3073\u3074\u3075\u3076\u3077\u3078\u3079\u307A\u307B\u307C\u307D\u307E\u307F\u3080\u3081\u3082\u3083\u3084\u3085\u3086\u3087\u3088\u3089\u308A\u308B\u308C\u308D\u308E\u308F\u3090\u3091\u3092\u3093\u3000\u3000\u3000\u309D\u309E\u30FC\u3002\u300C\u300D\u3001\u30FB";
|
|
@@ -48,14 +48,14 @@ export declare const KANJI_DIFF: [number, string][];
|
|
|
48
48
|
/** 追加記号・追加漢字を 1 つの文字列にしたもの。(区 − 85) × 94 + (点 − 1) 番目のコードポイント */
|
|
49
49
|
export declare const ADDITIONAL: string;
|
|
50
50
|
/**
|
|
51
|
-
* JIS X 0213:2004 の1面で、2つのコードポイントで表す字 (半濁点の付いたかな・発音記号と、声調の組)。
|
|
52
|
-
* [区×94+点 (0 から), 字]。字幕は1区画、番組表は2つのコードポイントのまま出す
|
|
51
|
+
* JIS X 0213:2004 の 1 面で、2 つのコードポイントで表す字 (半濁点の付いたかな・発音記号と、声調の組)。
|
|
52
|
+
* [区×94+点 (0 から), 字]。字幕は 1 区画、番組表は 2 つのコードポイントのまま出す
|
|
53
53
|
*/
|
|
54
54
|
export declare const KANJI_SEQUENCES: [number, string][];
|
|
55
|
-
/** `PLANE1_HIGH_ROWS` を1つの文字列にしたもの。(区 − 85) × 94 + (点 − 1) 番目のコードポイント */
|
|
55
|
+
/** `PLANE1_HIGH_ROWS` を 1 つの文字列にしたもの。(区 − 85) × 94 + (点 − 1) 番目のコードポイント */
|
|
56
56
|
export declare const PLANE1_HIGH: string;
|
|
57
57
|
/**
|
|
58
|
-
* JIS X 0213:2004 の2面 (JIS互換漢字2面。終端 0x3A)。[区, 94 字 (点の順)]。字のある区だけ
|
|
58
|
+
* JIS X 0213:2004 の 2 面 (JIS 互換漢字 2 面。終端 0x3A)。[区, 94 字 (点の順)]。字のある区だけ
|
|
59
59
|
*/
|
|
60
60
|
export declare const PLANE2: [number, string][];
|
|
61
61
|
/**
|
package/dist/b24-tables.js
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
* 1. 字幕の JSON (`/api/recordings/<id>/captions.json` の `drcs`) の `md5` を読み取る。`data` の画像は送るために
|
|
26
26
|
* なめらかにしたもの (drcs-smooth.ts) なので、`data` から MD5 を取っても表と合わない
|
|
27
27
|
* 2. `[MD5, 字のコードポイント]` を足し、行末に「何の字か・どこで見たか (局・日付)」を書く
|
|
28
|
-
* 3.
|
|
28
|
+
* 3. フォントにその字があるか確かめる (無い字に置き換えると豆腐になる。画像のままのほうがよい)
|
|
29
29
|
*/
|
|
30
30
|
/* 区点と突き合わせる表なので整形しない (bunfig.toml の ignorePatterns) */
|
|
31
31
|
/** ひらがな集合 (0x21〜0x7E)。0x74〜0x76 は規格で空き (字幕は全角の空白で埋める) */
|
|
@@ -102,56 +102,56 @@ const ADDITIONAL_ROWS = [
|
|
|
102
102
|
export const ADDITIONAL = ADDITIONAL_ROWS.join('');
|
|
103
103
|
// ここから JIS X 0213 の表 (packages/arib/scripts/jisx0213.ts が書く。手で直さない)
|
|
104
104
|
/**
|
|
105
|
-
* JIS X 0213:2004 の1面で、2つのコードポイントで表す字 (半濁点の付いたかな・発音記号と、声調の組)。
|
|
106
|
-
* [区×94+点 (0 から), 字]。字幕は1区画、番組表は2つのコードポイントのまま出す
|
|
105
|
+
* JIS X 0213:2004 の 1 面で、2 つのコードポイントで表す字 (半濁点の付いたかな・発音記号と、声調の組)。
|
|
106
|
+
* [区×94+点 (0 から), 字]。字幕は 1 区画、番組表は 2 つのコードポイントのまま出す
|
|
107
107
|
*/
|
|
108
108
|
export const KANJI_SEQUENCES = [
|
|
109
|
-
[368, "か゚"], // 4区87点
|
|
110
|
-
[369, "き゚"], // 4区88点
|
|
111
|
-
[370, "く゚"], // 4区89点
|
|
112
|
-
[371, "け゚"], // 4区90点
|
|
113
|
-
[372, "こ゚"], // 4区91点
|
|
114
|
-
[462, "カ゚"], // 5区87点
|
|
115
|
-
[463, "キ゚"], // 5区88点
|
|
116
|
-
[464, "ク゚"], // 5区89点
|
|
117
|
-
[465, "ケ゚"], // 5区90点
|
|
118
|
-
[466, "コ゚"], // 5区91点
|
|
119
|
-
[467, "セ゚"], // 5区92点
|
|
120
|
-
[468, "ツ゚"], // 5区93点
|
|
121
|
-
[469, "ト゚"], // 5区94点
|
|
122
|
-
[557, "ㇷ゚"], // 6区88点
|
|
123
|
-
[975, "æ̀"], // 11区36点
|
|
124
|
-
[979, "ɔ̀"], // 11区40点
|
|
125
|
-
[980, "ɔ́"], // 11区41点
|
|
126
|
-
[981, "ʌ̀"], // 11区42点
|
|
127
|
-
[982, "ʌ́"], // 11区43点
|
|
128
|
-
[983, "ə̀"], // 11区44点
|
|
129
|
-
[984, "ə́"], // 11区45点
|
|
130
|
-
[985, "ɚ̀"], // 11区46点
|
|
131
|
-
[986, "ɚ́"], // 11区47点
|
|
132
|
-
[1008, "˩˥"], // 11区69点
|
|
133
|
-
[1009, "˥˩"], // 11区70点
|
|
109
|
+
[368, "か゚"], // 4 区 87 点
|
|
110
|
+
[369, "き゚"], // 4 区 88 点
|
|
111
|
+
[370, "く゚"], // 4 区 89 点
|
|
112
|
+
[371, "け゚"], // 4 区 90 点
|
|
113
|
+
[372, "こ゚"], // 4 区 91 点
|
|
114
|
+
[462, "カ゚"], // 5 区 87 点
|
|
115
|
+
[463, "キ゚"], // 5 区 88 点
|
|
116
|
+
[464, "ク゚"], // 5 区 89 点
|
|
117
|
+
[465, "ケ゚"], // 5 区 90 点
|
|
118
|
+
[466, "コ゚"], // 5 区 91 点
|
|
119
|
+
[467, "セ゚"], // 5 区 92 点
|
|
120
|
+
[468, "ツ゚"], // 5 区 93 点
|
|
121
|
+
[469, "ト゚"], // 5 区 94 点
|
|
122
|
+
[557, "ㇷ゚"], // 6 区 88 点
|
|
123
|
+
[975, "æ̀"], // 11 区 36 点
|
|
124
|
+
[979, "ɔ̀"], // 11 区 40 点
|
|
125
|
+
[980, "ɔ́"], // 11 区 41 点
|
|
126
|
+
[981, "ʌ̀"], // 11 区 42 点
|
|
127
|
+
[982, "ʌ́"], // 11 区 43 点
|
|
128
|
+
[983, "ə̀"], // 11 区 44 点
|
|
129
|
+
[984, "ə́"], // 11 区 45 点
|
|
130
|
+
[985, "ɚ̀"], // 11 区 46 点
|
|
131
|
+
[986, "ɚ́"], // 11 区 47 点
|
|
132
|
+
[1008, "˩˥"], // 11 区 69 点
|
|
133
|
+
[1009, "˥˩"], // 11 区 70 点
|
|
134
134
|
];
|
|
135
135
|
/**
|
|
136
|
-
* JIS X 0213:2004 の1面の 85〜94区 (第3水準の漢字)。JIS互換漢字1面 (終端 0x39) だけが引く。
|
|
137
|
-
* 漢字集合 (0x42) と追加記号 (0x3B) の 85区から先は `ADDITIONAL`
|
|
136
|
+
* JIS X 0213:2004 の 1 面の 85〜94 区 (第 3 水準の漢字)。JIS 互換漢字 1 面 (終端 0x39) だけが引く。
|
|
137
|
+
* 漢字集合 (0x42) と追加記号 (0x3B) の 85 区から先は `ADDITIONAL`
|
|
138
138
|
*/
|
|
139
139
|
const PLANE1_HIGH_ROWS = [
|
|
140
|
-
"擄擊擐擷擻攢攩敏敧斝既昀昉昕昞昺昢昤昫昰昱昳曻晈晌𣇄晙晚晡晥晳晷晸暍暑暠暲暻曆曈㬢曛曨曺朓朗朳杦杇杈杻极枓枘枛枻柹柀柗柼栁桒栝栬栱桛桲桵梅梣梥梲棈棐棨棭棰棱棼椊楉𣗄椵楂楗楣楤楨榀﨔榥榭槏㮶", // 85区
|
|
141
|
-
"㯃槢槩槪槵槶樏樕𣜿樻樾橅橐橖橛橫橳𣝣檉檔檝檞檥櫤櫧㰏欄欛欞欬欵歆歖歠步歧歷殂殩殭殺每毖毗毿氅氐氳汙汜沪汴汶沅沆沘沜泻泆泔泠泫泮𣳾洄洎洮洱洹洿浘浥海涂涇涉涔涪涬涿淄淖淚淛淝淼渚渴湄湜湞溫溱滁", // 86区
|
|
142
|
-
"滇滎漐漚漢漪漯漳潑潙潞潡潢潾澈澌澍澔澠澧澶澼濇濊濹濰濵瀅瀆瀨灊灝灞灎灤灵炅炤炫炷烔烘烤焏焫焞焠焮焰煆煇煑煮煒煜煠煨凞熅熇熒燁熺燄燾爀爕牕牖㸿犍犛犾狀狻𤟱猧猨猪獐獦獼玕玟玠玢玦玫珉珏珖珙珣珩", // 87区
|
|
143
|
-
"琇琊琚琛琢琦琨琪琫琬琮琯琰瑄瑆瑇瑋瑗瑢瑫瑭璆璇璉璘璜璟璣璐璦璨璩璵璿瓈瓉瓚瓿甁甗甯畯畹疒㽲痎痤瘀瘂瘈瘕瘖瘙瘞瘭瘵癃癋癤癥癭癯癱皁皛皝皞皦皪皶盅盌盎盔盦盱盼眊眙眴眶睆睍睎睜睟睢睺瞀瞔瞪矠砭𥒎", // 88区
|
|
144
|
-
"硃硎硏硑硨确碑碰𥔎碭磤磲礀磷礜礮礱礴社祉祅祆祈祐祖祜祝神祥祹禍禎福禘禱禸秈秊𥝱秔秞秫秭稃穀稹穝穭突窅窠𥧄窳窻竎竫竽笒笭笻筇筎筠筭筯筲箞節篗篙簁簱簞簠簳簶䉤𥶡籙籭籹粏粔粠粼糕糙糝紇紈紓紝紣紱", // 89区
|
|
145
|
-
"絁絈絓絜絺綃綋綠綦緂緌緖緣練縨縈縑縕繁繇繒繡纊纍罇署羑羗羿翎翛翟翬翮翺者耔耦耵耷耼胊胗胠胳脘腊腠腧腨腭膻臊臏臗臭䑓䑛艠艴𦫿芎芡芣芤芩芮芷芾芿苆苕苽苾茀茁荢茢茭茺荃荇荑荕荽莆莒莘莧莩莿菀菇菏", // 90区
|
|
146
|
-
"菑菡菪萁萆萊著葈葟葰葳蒅蒞蒯蒴蒺蓀蓂𦹀蔲蔞蔣蔯蕙蕤﨟薭蕺薌薏薢薰藋藎藭蘒藿蘄蘅蘐𧃴蘘蘩蘸虗虛虜虢䖝虬虵蚘蚸蛺蛼蛽蜋蝱螇螈螬螭螵䗪蟖蟬蠆蠊蠐蠔蠟袘袪裊裎𧚄裵褜褐褘褙褚褧褰褲褹襀覔視觔觥觶訒訕", // 91区
|
|
147
|
-
"訢訷詇詎詝詡詵詹誧諐諟諴諶諸謁謹譆譔譙譩讝豉豨賓賡賴賸賾贈贒贛趯跎跑跗踠踣踽蹰蹻𨉷軀䡄軺輞輭輶轔𨏍辦辵迤迨迮逈逭逸邈邕邗邙邛邢邳邾郄郅郇郗郝郞郯郴都鄔鄕鄖鄢鄣鄧鄯鄱鄴鄽酈酛醃醞醬醱醼釗釻釤", // 92区
|
|
148
|
-
"釥釭釱鈇鈐鈸鈹鈺鈼鉀鉃鉏鉸銈鋂鋋鋌鋓鋠鋿錄錟錡錥鍈鍉鍊鍤鍥鍪鍰鎛鎣鎺鏆鏞鏟鐄鏽鐳鑊鑣鑫鑱鑲閎閟閦閩閬閶閽闋闐闓䦰闚闞陘隄隆隝隤隥雒雞難雩雯霳霻靍靎靏靚靮靳鞕鞮鞺韁韉韞韛韴響頊頞頫頰頻顒顓顖", // 93区
|
|
149
|
-
"顗顙顚類顥顬颺飈飧饘馞騂騃騤騭騮騸驊驎驒骶髁髃髎髖髹鬂鬈鬠䰗鬭魞魹魦魲魵鮄鮊鮏鮞鮧鯁鯎鯥鯸鯽鰀鰣鱁鱏鱐鱓鱣鱥鱷鴝鴞鵃鵇鵒鵣鵰鵼鶊鶖鷀鶬鶼鷗𪆐鷧鸇鸕鹼麞麤麬麯麴麵黃黑鼐鼹齗龐龔龗龢姸屛幷瘦繫", // 94区
|
|
140
|
+
"擄擊擐擷擻攢攩敏敧斝既昀昉昕昞昺昢昤昫昰昱昳曻晈晌𣇄晙晚晡晥晳晷晸暍暑暠暲暻曆曈㬢曛曨曺朓朗朳杦杇杈杻极枓枘枛枻柹柀柗柼栁桒栝栬栱桛桲桵梅梣梥梲棈棐棨棭棰棱棼椊楉𣗄椵楂楗楣楤楨榀﨔榥榭槏㮶", // 85 区
|
|
141
|
+
"㯃槢槩槪槵槶樏樕𣜿樻樾橅橐橖橛橫橳𣝣檉檔檝檞檥櫤櫧㰏欄欛欞欬欵歆歖歠步歧歷殂殩殭殺每毖毗毿氅氐氳汙汜沪汴汶沅沆沘沜泻泆泔泠泫泮𣳾洄洎洮洱洹洿浘浥海涂涇涉涔涪涬涿淄淖淚淛淝淼渚渴湄湜湞溫溱滁", // 86 区
|
|
142
|
+
"滇滎漐漚漢漪漯漳潑潙潞潡潢潾澈澌澍澔澠澧澶澼濇濊濹濰濵瀅瀆瀨灊灝灞灎灤灵炅炤炫炷烔烘烤焏焫焞焠焮焰煆煇煑煮煒煜煠煨凞熅熇熒燁熺燄燾爀爕牕牖㸿犍犛犾狀狻𤟱猧猨猪獐獦獼玕玟玠玢玦玫珉珏珖珙珣珩", // 87 区
|
|
143
|
+
"琇琊琚琛琢琦琨琪琫琬琮琯琰瑄瑆瑇瑋瑗瑢瑫瑭璆璇璉璘璜璟璣璐璦璨璩璵璿瓈瓉瓚瓿甁甗甯畯畹疒㽲痎痤瘀瘂瘈瘕瘖瘙瘞瘭瘵癃癋癤癥癭癯癱皁皛皝皞皦皪皶盅盌盎盔盦盱盼眊眙眴眶睆睍睎睜睟睢睺瞀瞔瞪矠砭𥒎", // 88 区
|
|
144
|
+
"硃硎硏硑硨确碑碰𥔎碭磤磲礀磷礜礮礱礴社祉祅祆祈祐祖祜祝神祥祹禍禎福禘禱禸秈秊𥝱秔秞秫秭稃穀稹穝穭突窅窠𥧄窳窻竎竫竽笒笭笻筇筎筠筭筯筲箞節篗篙簁簱簞簠簳簶䉤𥶡籙籭籹粏粔粠粼糕糙糝紇紈紓紝紣紱", // 89 区
|
|
145
|
+
"絁絈絓絜絺綃綋綠綦緂緌緖緣練縨縈縑縕繁繇繒繡纊纍罇署羑羗羿翎翛翟翬翮翺者耔耦耵耷耼胊胗胠胳脘腊腠腧腨腭膻臊臏臗臭䑓䑛艠艴𦫿芎芡芣芤芩芮芷芾芿苆苕苽苾茀茁荢茢茭茺荃荇荑荕荽莆莒莘莧莩莿菀菇菏", // 90 区
|
|
146
|
+
"菑菡菪萁萆萊著葈葟葰葳蒅蒞蒯蒴蒺蓀蓂𦹀蔲蔞蔣蔯蕙蕤﨟薭蕺薌薏薢薰藋藎藭蘒藿蘄蘅蘐𧃴蘘蘩蘸虗虛虜虢䖝虬虵蚘蚸蛺蛼蛽蜋蝱螇螈螬螭螵䗪蟖蟬蠆蠊蠐蠔蠟袘袪裊裎𧚄裵褜褐褘褙褚褧褰褲褹襀覔視觔觥觶訒訕", // 91 区
|
|
147
|
+
"訢訷詇詎詝詡詵詹誧諐諟諴諶諸謁謹譆譔譙譩讝豉豨賓賡賴賸賾贈贒贛趯跎跑跗踠踣踽蹰蹻𨉷軀䡄軺輞輭輶轔𨏍辦辵迤迨迮逈逭逸邈邕邗邙邛邢邳邾郄郅郇郗郝郞郯郴都鄔鄕鄖鄢鄣鄧鄯鄱鄴鄽酈酛醃醞醬醱醼釗釻釤", // 92 区
|
|
148
|
+
"釥釭釱鈇鈐鈸鈹鈺鈼鉀鉃鉏鉸銈鋂鋋鋌鋓鋠鋿錄錟錡錥鍈鍉鍊鍤鍥鍪鍰鎛鎣鎺鏆鏞鏟鐄鏽鐳鑊鑣鑫鑱鑲閎閟閦閩閬閶閽闋闐闓䦰闚闞陘隄隆隝隤隥雒雞難雩雯霳霻靍靎靏靚靮靳鞕鞮鞺韁韉韞韛韴響頊頞頫頰頻顒顓顖", // 93 区
|
|
149
|
+
"顗顙顚類顥顬颺飈飧饘馞騂騃騤騭騮騸驊驎驒骶髁髃髎髖髹鬂鬈鬠䰗鬭魞魹魦魲魵鮄鮊鮏鮞鮧鯁鯎鯥鯸鯽鰀鰣鱁鱏鱐鱓鱣鱥鱷鴝鴞鵃鵇鵒鵣鵰鵼鶊鶖鷀鶬鶼鷗𪆐鷧鸇鸕鹼麞麤麬麯麴麵黃黑鼐鼹齗龐龔龗龢姸屛幷瘦繫", // 94 区
|
|
150
150
|
];
|
|
151
|
-
/** `PLANE1_HIGH_ROWS` を1つの文字列にしたもの。(区 − 85) × 94 + (点 − 1) 番目のコードポイント */
|
|
151
|
+
/** `PLANE1_HIGH_ROWS` を 1 つの文字列にしたもの。(区 − 85) × 94 + (点 − 1) 番目のコードポイント */
|
|
152
152
|
export const PLANE1_HIGH = PLANE1_HIGH_ROWS.join('');
|
|
153
153
|
/**
|
|
154
|
-
* JIS X 0213:2004 の2面 (JIS互換漢字2面。終端 0x3A)。[区, 94 字 (点の順)]。字のある区だけ
|
|
154
|
+
* JIS X 0213:2004 の 2 面 (JIS 互換漢字 2 面。終端 0x3A)。[区, 94 字 (点の順)]。字のある区だけ
|
|
155
155
|
*/
|
|
156
156
|
export const PLANE2 = [
|
|
157
157
|
[1, "𠂉丂丏丒丩丫丮乀乇么𠂢乑㐆𠂤乚乩亝㐬㐮亹亻𠆢亼仃仈仐仫仚仱仵伀伖佤伷伾佔佘𠈓佷佸佺佽侂侅侒侚俦侲侾俅俋俏俒㑪俲倀倐倓倜倞倢㑨偂偆偎偓偗偣偦偪偰傣傈傒傓傕傖傜傪𠌫傱傺傻僄僇僳𠎁僎𠍱僔僙僡僩㒒"],
|
package/dist/b24caption.js
CHANGED
|
@@ -147,7 +147,7 @@ function isHalfwidth(code) {
|
|
|
147
147
|
const smoothed = new Map();
|
|
148
148
|
const SMOOTHED_MAX = 256;
|
|
149
149
|
function sendable(drcs) {
|
|
150
|
-
// MD5
|
|
150
|
+
// MD5 は画素だけから取っているので、大きさもキーに入れる
|
|
151
151
|
const key = `${drcs.md5}:${drcs.width}x${drcs.height}:${drcs.depth}`;
|
|
152
152
|
let sent = smoothed.get(key);
|
|
153
153
|
if (sent === undefined) {
|
|
@@ -917,7 +917,7 @@ export class B24CaptionDecoder {
|
|
|
917
917
|
/**
|
|
918
918
|
* デコードした 1 枚を、送る形式にする。**同じ見た目で続いている字を 1 つの並びに束ねる。**
|
|
919
919
|
*
|
|
920
|
-
* libaribcaption
|
|
920
|
+
* libaribcaption の描画側 (region_renderer) が字ごとに計算している置き場所を、ここで
|
|
921
921
|
* 面の単位のまま済ませておく。区画は `floor((字の幅 + 字間) × 倍率)`、字の枠は区画の中で
|
|
922
922
|
* 字間の半分だけ右下へずらしたところ。
|
|
923
923
|
*
|
|
@@ -1001,7 +1001,7 @@ function toPage(caption, plane) {
|
|
|
1001
1001
|
return page;
|
|
1002
1002
|
}
|
|
1003
1003
|
/**
|
|
1004
|
-
* 字幕の PES
|
|
1004
|
+
* 字幕の PES の中身で、データグループの先頭の位置。データ識別 (0x80 = 字幕) と私的ストリーム識別 (0xFF) が
|
|
1005
1005
|
* 合わなければ -1
|
|
1006
1006
|
*/
|
|
1007
1007
|
function groupAt(data) {
|
package/dist/bml-protocol.d.ts
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* web-bml は MIT で、著作権表示と許諾の文は [LICENSE](../LICENSE) に置いてある。
|
|
8
8
|
*
|
|
9
9
|
* 載せるのは denpa が実際に作るものだけ (PMT・モジュール一覧・揃ったモジュール・
|
|
10
|
-
*
|
|
10
|
+
* ストリーム記述子のイベント・番組の情報・放送の時刻)。web-bml が自前の
|
|
11
11
|
* TS 解析のために持っていた PCR・PES・BIT・映像の URL は作らないので持たない。
|
|
12
12
|
*/
|
|
13
13
|
/** PMT の ES 1 本。**部品タグ (`componentId`) を持つものだけ**並ぶ (bml.ts の `parsePmt`) */
|
|
@@ -123,7 +123,7 @@ export interface ESEventUpdatedMessage {
|
|
|
123
123
|
events: ESEvent[];
|
|
124
124
|
dataEventId: number;
|
|
125
125
|
}
|
|
126
|
-
/**
|
|
126
|
+
/** 番組の情報。TS からではなく DB から組む (denpa の `server/live.ts`・`server/recorded-bml.ts`) */
|
|
127
127
|
export interface ProgramInfoMessage {
|
|
128
128
|
type: "programInfo";
|
|
129
129
|
originalNetworkId: number | null;
|
package/dist/bml-protocol.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* web-bml は MIT で、著作権表示と許諾の文は [LICENSE](../LICENSE) に置いてある。
|
|
8
8
|
*
|
|
9
9
|
* 載せるのは denpa が実際に作るものだけ (PMT・モジュール一覧・揃ったモジュール・
|
|
10
|
-
*
|
|
10
|
+
* ストリーム記述子のイベント・番組の情報・放送の時刻)。web-bml が自前の
|
|
11
11
|
* TS 解析のために持っていた PCR・PES・BIT・映像の URL は作らないので持たない。
|
|
12
12
|
*/
|
|
13
13
|
export {};
|
package/dist/bml.d.ts
CHANGED
|
@@ -49,11 +49,11 @@ export declare class BmlDecoder {
|
|
|
49
49
|
* 切り分け済みのパケットを 1 つ。ライブは同じ TS を時計や Hybridcast とも
|
|
50
50
|
* 分け合うので、切り分けは 1 回で済ませて配る (denpa の `server/live.ts` の `tap`)。
|
|
51
51
|
*
|
|
52
|
-
* **PID
|
|
52
|
+
* **PID で渡し先を引く。** すべての組み立て処理にパケットを渡していた頃は、データ放送と
|
|
53
53
|
* 関係ない映像のパケットのたびにカルーセルの数だけ呼んでいた。
|
|
54
54
|
*
|
|
55
|
-
* `packet`
|
|
56
|
-
*
|
|
55
|
+
* `packet` は呼び出し側が渡したチャンクの一部を指す (`psi.ts` の `PacketStream`)。**返ったあとまで
|
|
56
|
+
* 持つならコピーすること。** チャンクのバッファは使い回される
|
|
57
57
|
*/
|
|
58
58
|
feedPacket(packet: Uint8Array): void;
|
|
59
59
|
private onPmt;
|
|
@@ -81,7 +81,7 @@ export declare class BmlDecoder {
|
|
|
81
81
|
* 入っている。Type 記述子が無いときも中身は multipart なので、同じ扱いにする。
|
|
82
82
|
*/
|
|
83
83
|
export declare function moduleFiles(data: Uint8Array, contentType: string | null): ModuleFile[];
|
|
84
|
-
/** zlib
|
|
84
|
+
/** zlib で圧縮してあれば展開する。展開できなければ諦めて null */
|
|
85
85
|
export declare function inflate(data: Uint8Array, compression: {
|
|
86
86
|
type: number;
|
|
87
87
|
} | null): Uint8Array | null;
|
package/dist/bml.js
CHANGED
|
@@ -226,15 +226,15 @@ export class BmlDecoder {
|
|
|
226
226
|
* 切り分け済みのパケットを 1 つ。ライブは同じ TS を時計や Hybridcast とも
|
|
227
227
|
* 分け合うので、切り分けは 1 回で済ませて配る (denpa の `server/live.ts` の `tap`)。
|
|
228
228
|
*
|
|
229
|
-
* **PID
|
|
229
|
+
* **PID で渡し先を引く。** すべての組み立て処理にパケットを渡していた頃は、データ放送と
|
|
230
230
|
* 関係ない映像のパケットのたびにカルーセルの数だけ呼んでいた。
|
|
231
231
|
*
|
|
232
|
-
* `packet`
|
|
233
|
-
*
|
|
232
|
+
* `packet` は呼び出し側が渡したチャンクの一部を指す (`psi.ts` の `PacketStream`)。**返ったあとまで
|
|
233
|
+
* 持つならコピーすること。** チャンクのバッファは使い回される
|
|
234
234
|
*/
|
|
235
235
|
feedPacket(packet) {
|
|
236
236
|
const pid = packetPid(packet);
|
|
237
|
-
// 同じ PID を 2
|
|
237
|
+
// 同じ PID を 2 つの用途で使うこともあるので、else でつながない
|
|
238
238
|
for (const section of this.pmt.feed(packet, pid))
|
|
239
239
|
this.onPmt(section);
|
|
240
240
|
if (pid === PID_TIME)
|
|
@@ -431,14 +431,14 @@ export class BmlDecoder {
|
|
|
431
431
|
const mark = doneMark(component, version);
|
|
432
432
|
if (component.done.get(moduleId) === mark)
|
|
433
433
|
return;
|
|
434
|
-
// 大きさ 0
|
|
434
|
+
// 大きさ 0 は展開しようが無い。ファイルの無いモジュールとして配り、待っている受け側を終わらせる
|
|
435
435
|
const empty = held.module.moduleSize === 0;
|
|
436
436
|
const data = empty
|
|
437
437
|
? held.builder.data
|
|
438
438
|
: inflate(held.builder.data, held.module.compression);
|
|
439
439
|
const files = data === null ? [] : moduleFiles(data, held.module.contentType);
|
|
440
440
|
/*
|
|
441
|
-
*
|
|
441
|
+
* **展開できない・分けられないモジュールは諦める。** 配らずに黙ると、受け側は DII に
|
|
442
442
|
* 載っている限り待ち続ける。ブロックは CRC を通っているので、組み直しても同じ結果になる
|
|
443
443
|
*/
|
|
444
444
|
if (files.length === 0 && !empty) {
|
|
@@ -499,14 +499,14 @@ export function moduleFiles(data, contentType) {
|
|
|
499
499
|
function base64(data) {
|
|
500
500
|
return Buffer.from(data).toString("base64");
|
|
501
501
|
}
|
|
502
|
-
/** zlib
|
|
502
|
+
/** zlib で圧縮してあれば展開する。展開できなければ諦めて null */
|
|
503
503
|
export function inflate(data, compression) {
|
|
504
504
|
if (compression === null)
|
|
505
505
|
return data;
|
|
506
506
|
if (compression.type !== COMPRESSION_ZLIB)
|
|
507
507
|
return null;
|
|
508
508
|
try {
|
|
509
|
-
//
|
|
509
|
+
// 展開した大きさにも上限を置く。小さな DDB から何 GB にも展開されるものを作れる
|
|
510
510
|
return inflateSync(data, { maxOutputLength: MAX_MODULE_SIZE });
|
|
511
511
|
}
|
|
512
512
|
catch {
|
package/dist/bytes.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* バイト列の細かい道具。**中身の意味は持たない。** 繋ぐ・読むのはここで済ませる (別名で書き直さない)
|
|
3
3
|
*/
|
|
4
|
-
/** バイト列を新しい 1 本に繋ぐ (
|
|
4
|
+
/** バイト列を新しい 1 本に繋ぐ (いつもコピーする。`Blob` などへ渡せる `ArrayBuffer` の上に作る) */
|
|
5
5
|
export declare function concatBytes(parts: readonly Uint8Array[]): Uint8Array<ArrayBuffer>;
|
|
6
6
|
/**
|
|
7
7
|
* バイト列を 1 本に繋ぐ。
|
|
8
8
|
*
|
|
9
|
-
* **1
|
|
9
|
+
* **1 本しかないときはコピーしません。** 分割された記述子を繋ぎ直すところ
|
|
10
10
|
* ([eit.ts](eit.ts)) では、繋ぐ必要のないほうが多数です
|
|
11
11
|
*/
|
|
12
12
|
export declare function joinBytes(parts: readonly Uint8Array[]): Uint8Array;
|
|
@@ -16,5 +16,5 @@ export declare function u16(data: Uint8Array, at: number): number;
|
|
|
16
16
|
export declare function u24(data: Uint8Array, at: number): number;
|
|
17
17
|
/** 大きい桁が先の 32 ビット (符号なし) */
|
|
18
18
|
export declare function u32(data: Uint8Array, at: number): number;
|
|
19
|
-
/** `length` バイトをそのまま 1 字ずつの文字列に (MP4
|
|
19
|
+
/** `length` バイトをそのまま 1 字ずつの文字列に (MP4 のボックスの種別・PNG のチャンクの名前・言語の符号) */
|
|
20
20
|
export declare function ascii(data: Uint8Array, at: number, length: number): string;
|
package/dist/bytes.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* バイト列の細かい道具。**中身の意味は持たない。** 繋ぐ・読むのはここで済ませる (別名で書き直さない)
|
|
3
3
|
*/
|
|
4
|
-
/** バイト列を新しい 1 本に繋ぐ (
|
|
4
|
+
/** バイト列を新しい 1 本に繋ぐ (いつもコピーする。`Blob` などへ渡せる `ArrayBuffer` の上に作る) */
|
|
5
5
|
export function concatBytes(parts) {
|
|
6
6
|
let total = 0;
|
|
7
7
|
for (const part of parts)
|
|
@@ -17,7 +17,7 @@ export function concatBytes(parts) {
|
|
|
17
17
|
/**
|
|
18
18
|
* バイト列を 1 本に繋ぐ。
|
|
19
19
|
*
|
|
20
|
-
* **1
|
|
20
|
+
* **1 本しかないときはコピーしません。** 分割された記述子を繋ぎ直すところ
|
|
21
21
|
* ([eit.ts](eit.ts)) では、繋ぐ必要のないほうが多数です
|
|
22
22
|
*/
|
|
23
23
|
export function joinBytes(parts) {
|
|
@@ -39,7 +39,7 @@ export function u32(data, at) {
|
|
|
39
39
|
data[at + 3]) >>>
|
|
40
40
|
0);
|
|
41
41
|
}
|
|
42
|
-
/** `length` バイトをそのまま 1 字ずつの文字列に (MP4
|
|
42
|
+
/** `length` バイトをそのまま 1 字ずつの文字列に (MP4 のボックスの種別・PNG のチャンクの名前・言語の符号) */
|
|
43
43
|
export function ascii(data, at, length) {
|
|
44
44
|
return String.fromCharCode(...data.subarray(at, at + length));
|
|
45
45
|
}
|
package/dist/caption-text.d.ts
CHANGED
|
@@ -85,7 +85,7 @@ export interface CaptionDrcs {
|
|
|
85
85
|
}
|
|
86
86
|
/** 空白として字を描かない (背景だけ塗る) 字。libaribcaption の IsSpaceCharacter と同じ */
|
|
87
87
|
export declare function isSpace(code: number): boolean;
|
|
88
|
-
/** 録画 1 本ぶんの字幕 (`GET /api/recordings/<id>/captions.json`)。`at`
|
|
88
|
+
/** 録画 1 本ぶんの字幕 (`GET /api/recordings/<id>/captions.json`)。`at` は動画の先頭からの秒 */
|
|
89
89
|
export interface CaptionPages {
|
|
90
90
|
v: typeof CAPTION_TEXT_VERSION;
|
|
91
91
|
/** 第 1 言語 */
|
package/dist/drcs-smooth.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* (1920x1080 の全画面で 72 画素ほど) に引き伸ばすので、そのまま渡すと 1 点が 4x4 の階段になり、
|
|
6
6
|
* なめらかに引き伸ばしても階段がぼやけて残る (スピーカー 🔊 の外字など)。
|
|
7
7
|
*
|
|
8
|
-
* 以前は libaribcaption
|
|
8
|
+
* 以前は libaribcaption の描画側にパッチを当てて同じことをしていた (#554)。描くのを受け側に移したとき (#571〜#586)
|
|
9
9
|
* にその直しが落ちたので、**サーバで 1 回だけ** やって、濃淡の画像 (`bits: 4`・`depth: 16`) で送る。受け側は
|
|
10
10
|
* もともと `bits` 1・2・4・8 を読み、濃さを字の色の不透明度に掛けて引き伸ばすので変えなくてよい。
|
|
11
11
|
*
|
package/dist/drcs-smooth.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* (1920x1080 の全画面で 72 画素ほど) に引き伸ばすので、そのまま渡すと 1 点が 4x4 の階段になり、
|
|
6
6
|
* なめらかに引き伸ばしても階段がぼやけて残る (スピーカー 🔊 の外字など)。
|
|
7
7
|
*
|
|
8
|
-
* 以前は libaribcaption
|
|
8
|
+
* 以前は libaribcaption の描画側にパッチを当てて同じことをしていた (#554)。描くのを受け側に移したとき (#571〜#586)
|
|
9
9
|
* にその直しが落ちたので、**サーバで 1 回だけ** やって、濃淡の画像 (`bits: 4`・`depth: 16`) で送る。受け側は
|
|
10
10
|
* もともと `bits` 1・2・4・8 を読み、濃さを字の色の不透明度に掛けて引き伸ばすので変えなくてよい。
|
|
11
11
|
*
|
package/dist/dsmcc.d.ts
CHANGED
|
@@ -35,7 +35,7 @@ export interface DiiModule {
|
|
|
35
35
|
name: string | null;
|
|
36
36
|
/** Type 記述子。`multipart/mixed` など。データ放送だけが使う */
|
|
37
37
|
contentType: string | null;
|
|
38
|
-
/** Compression Type 記述子。**0 が zlib
|
|
38
|
+
/** Compression Type 記述子。**0 が zlib**。展開したあとの大きさ付き */
|
|
39
39
|
compression: {
|
|
40
40
|
type: number;
|
|
41
41
|
originalSize: number;
|
|
@@ -63,7 +63,7 @@ export interface Ddb {
|
|
|
63
63
|
/**
|
|
64
64
|
* DII (Download Info Indication)。
|
|
65
65
|
*
|
|
66
|
-
*
|
|
66
|
+
* 先頭は共通で protocolDiscriminator/dsmccType/messageId/transaction_id と続き、
|
|
67
67
|
* adaptationLength ぶん飛ばした先に本体が入っている。
|
|
68
68
|
*/
|
|
69
69
|
export declare function parseDii(section: Uint8Array): Dii | null;
|
|
@@ -74,13 +74,13 @@ export declare function parseDdb(section: Uint8Array): Ddb | null;
|
|
|
74
74
|
*
|
|
75
75
|
* `moduleSize` は 32 ビットで、そのまま信じると DII 1 つで 4GB を確保させられる。
|
|
76
76
|
* 実際のデータ放送のモジュールは数 KB〜数百 KB、衛星のロゴも全局ぶんで数百 KB なので、
|
|
77
|
-
* 十分に余裕を見た値。zlib
|
|
77
|
+
* 十分に余裕を見た値。zlib で展開したあとの大きさにも同じ上限を使う ([bml.ts](bml.ts) の `inflate`)
|
|
78
78
|
*/
|
|
79
79
|
export declare const MAX_MODULE_SIZE: number;
|
|
80
80
|
/**
|
|
81
81
|
* 組み立て中のモジュール。DDB が来るたびに然るべき位置へ置く。
|
|
82
82
|
*
|
|
83
|
-
*
|
|
83
|
+
* **バッファは届いたところまでしか確保しない。** DII の言う大きさを先に確保すると、
|
|
84
84
|
* 大きいと言うだけの DII でメモリを使い切らせられる。`MAX_MODULE_SIZE` を超える
|
|
85
85
|
* モジュールはブロックを受け取らない (いつまでも揃わない)。
|
|
86
86
|
*
|
|
@@ -105,6 +105,6 @@ export declare class ModuleBuilder {
|
|
|
105
105
|
get complete(): boolean;
|
|
106
106
|
/** ブロックを 1 つ置く。**揃ったら true** */
|
|
107
107
|
add(blockNumber: number, block: Uint8Array): boolean;
|
|
108
|
-
/**
|
|
108
|
+
/** バッファを広げる。何度もコピーし直さないよう倍々で、モジュールの大きさまで */
|
|
109
109
|
private grow;
|
|
110
110
|
}
|
package/dist/dsmcc.js
CHANGED
|
@@ -49,7 +49,7 @@ function messageOf(section) {
|
|
|
49
49
|
/**
|
|
50
50
|
* DII (Download Info Indication)。
|
|
51
51
|
*
|
|
52
|
-
*
|
|
52
|
+
* 先頭は共通で protocolDiscriminator/dsmccType/messageId/transaction_id と続き、
|
|
53
53
|
* adaptationLength ぶん飛ばした先に本体が入っている。
|
|
54
54
|
*/
|
|
55
55
|
export function parseDii(section) {
|
|
@@ -157,13 +157,13 @@ export function parseDdb(section) {
|
|
|
157
157
|
*
|
|
158
158
|
* `moduleSize` は 32 ビットで、そのまま信じると DII 1 つで 4GB を確保させられる。
|
|
159
159
|
* 実際のデータ放送のモジュールは数 KB〜数百 KB、衛星のロゴも全局ぶんで数百 KB なので、
|
|
160
|
-
* 十分に余裕を見た値。zlib
|
|
160
|
+
* 十分に余裕を見た値。zlib で展開したあとの大きさにも同じ上限を使う ([bml.ts](bml.ts) の `inflate`)
|
|
161
161
|
*/
|
|
162
162
|
export const MAX_MODULE_SIZE = 16 * 1024 * 1024;
|
|
163
163
|
/**
|
|
164
164
|
* 組み立て中のモジュール。DDB が来るたびに然るべき位置へ置く。
|
|
165
165
|
*
|
|
166
|
-
*
|
|
166
|
+
* **バッファは届いたところまでしか確保しない。** DII の言う大きさを先に確保すると、
|
|
167
167
|
* 大きいと言うだけの DII でメモリを使い切らせられる。`MAX_MODULE_SIZE` を超える
|
|
168
168
|
* モジュールはブロックを受け取らない (いつまでも揃わない)。
|
|
169
169
|
*
|
|
@@ -222,7 +222,7 @@ export class ModuleBuilder {
|
|
|
222
222
|
}
|
|
223
223
|
return this.complete;
|
|
224
224
|
}
|
|
225
|
-
/**
|
|
225
|
+
/** バッファを広げる。何度もコピーし直さないよう倍々で、モジュールの大きさまで */
|
|
226
226
|
grow(length) {
|
|
227
227
|
const next = new Uint8Array(Math.min(this.moduleSize, Math.max(length, this.buffer.length * 2)));
|
|
228
228
|
next.set(this.buffer);
|
package/dist/eit.d.ts
CHANGED
|
@@ -99,7 +99,7 @@ export interface EitEvent {
|
|
|
99
99
|
*/
|
|
100
100
|
series?: EitSeries | null;
|
|
101
101
|
/**
|
|
102
|
-
* CA契約情報記述子 (0xCB) の contract_verification_info。
|
|
102
|
+
* CA 契約情報記述子 (0xCB) の contract_verification_info。
|
|
103
103
|
* 有料放送の契約確認・復号判定に使う (B-CAS の 0x90 0x3C コマンド)。
|
|
104
104
|
* 載っていなければ null。詳細の表では言っていないので undefined。
|
|
105
105
|
*/
|
|
@@ -124,10 +124,10 @@ export declare const PID_TIME = 20;
|
|
|
124
124
|
/**
|
|
125
125
|
* TDT / TOT のセクションから**放送の実時刻**を読む。別のテーブルなら null。
|
|
126
126
|
*
|
|
127
|
-
*
|
|
127
|
+
* 先頭 3 バイトのあとに MJD + BCD が 5 バイト。**TOT も同じ並び**で、後ろに
|
|
128
128
|
* 時差の記述子が付くだけなので同じに読める。
|
|
129
129
|
*
|
|
130
|
-
* データ放送 (`bml.ts` の `onTime`)
|
|
130
|
+
* データ放送 (`bml.ts` の `onTime`) が読んで、BML の時計にする
|
|
131
131
|
*/
|
|
132
132
|
export declare function parseTimeTable(section: Uint8Array): number | null;
|
|
133
133
|
/**
|
|
@@ -194,24 +194,24 @@ export declare class ScheduleProgress {
|
|
|
194
194
|
* **番号が飛ぶ。** 1 つの `table_id` が受け持つのは 4 日ぶんで、基本は
|
|
195
195
|
* `0x50` から、詳細は `0x58` から始まる。日本の放送は 8 日ぶんなので、
|
|
196
196
|
* 実際に流れてくるのは `0x50` `0x51` と `0x58` `0x59` あたりだけで、
|
|
197
|
-
* **`0x52`〜`0x57`
|
|
197
|
+
* **`0x52`〜`0x57` は永久に来ない**。
|
|
198
198
|
*
|
|
199
199
|
* `0x50` から `last_table_id` まで全部を待っていた頃は、詳細を積んでいる局が
|
|
200
200
|
* **一度も「揃った」にならず**、どのチャンネルも上限の 10 分 (denpa の `epgChannelTimeout`) まで開きっぱなしに
|
|
201
|
-
*
|
|
201
|
+
* なっていた (実機で、詳細の無い BS11 だけが早く閉じていた)。
|
|
202
202
|
*
|
|
203
|
-
* 見かけた表と、`last_table_id`
|
|
203
|
+
* 見かけた表と、`last_table_id` が指す表だけを見る。
|
|
204
204
|
*/
|
|
205
205
|
get complete(): boolean;
|
|
206
|
-
/**
|
|
206
|
+
/** その表でまだ来ていないセクション。セグメントの先頭すら来ていなければ、先頭の番号を数える */
|
|
207
207
|
private holes;
|
|
208
208
|
/**
|
|
209
209
|
* そのセグメントの時間帯がもう過ぎているか。**過ぎたものは待たない。**
|
|
210
210
|
*
|
|
211
|
-
* セグメントは 0:00 から 3 時間ずつの枠で、`table_id`
|
|
211
|
+
* セグメントは 0:00 から 3 時間ずつの枠で、`table_id` とセクション番号から
|
|
212
212
|
* それがいつの枠なのかが決まる。基本は `0x50` が当日 0:00 から 4 日ぶん、
|
|
213
213
|
* `0x51` がその次の 4 日ぶん。詳細 (`0x58`〜) も同じ並びをもう一度たどる。
|
|
214
|
-
*
|
|
214
|
+
* 終わった枠は放送されない (クラスの説明)。そのぶんの番組は、そこが未来だった数日前に取り込んである。
|
|
215
215
|
*/
|
|
216
216
|
private stale;
|
|
217
217
|
/**
|
|
@@ -281,11 +281,11 @@ export declare class EpgReader {
|
|
|
281
281
|
* p/f で「いま流れている」と言えるか。
|
|
282
282
|
*
|
|
283
283
|
* **`running_status` を当てにしきれない。** 4 (放送中) を入れてくる局も
|
|
284
|
-
* あれば、**0 (未定義) しか入れてこない局もある。** 実機の NHK は 74
|
|
284
|
+
* あれば、**0 (未定義) しか入れてこない局もある。** 実機の NHK は 74 セクション
|
|
285
285
|
* ぜんぶ 0 だった。4 だけを見ていると、そういう局では延長追従が丸ごと
|
|
286
286
|
* 効かなくなる (denpa の docs/data.md)。
|
|
287
287
|
*
|
|
288
|
-
* そこで 0
|
|
288
|
+
* そこで 0 のときは**セクションの番号で決める**。p/f は仕様で
|
|
289
289
|
* **section 0 が現在・section 1 が次**と決まっていて、こちらは局の都合で
|
|
290
290
|
* 変わらない。1 (まもなく) や 2 (停止中) は今までどおり入れない。
|
|
291
291
|
*/
|