@danything/arib 1.2.1 → 1.3.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/aribtext.js +3 -3
- package/dist/b24-tables.d.ts +7 -7
- package/dist/b24-tables.js +57 -57
- package/dist/eit.d.ts +6 -0
- package/dist/eit.js +29 -0
- package/dist/pes.d.ts +3 -3
- package/dist/pes.js +3 -3
- package/dist/service-filter.d.ts +1 -1
- package/dist/service-filter.js +1 -1
- package/dist/synth-av.d.ts +1 -1
- package/dist/synth-av.js +3 -3
- package/dist/synth-caption.js +2 -2
- package/dist/synth.d.ts +1 -1
- package/dist/synth.js +2 -2
- package/package.json +1 -1
package/dist/aribtext.js
CHANGED
|
@@ -44,8 +44,8 @@ const MOSAIC = { bytes: 1, kind: "blank" };
|
|
|
44
44
|
*/
|
|
45
45
|
const CHARSETS = new Map([
|
|
46
46
|
[0x42, KANJI],
|
|
47
|
-
[0x39, { bytes: 2, kind: "plane1" }], // JIS互換漢字1面
|
|
48
|
-
[0x3a, { bytes: 2, kind: "plane2" }], // JIS互換漢字2面
|
|
47
|
+
[0x39, { bytes: 2, kind: "plane1" }], // JIS 互換漢字 1 面
|
|
48
|
+
[0x3a, { bytes: 2, kind: "plane2" }], // JIS 互換漢字 2 面
|
|
49
49
|
[0x3b, KANJI], // 追加記号 (漢字集合と同じ表を引く)
|
|
50
50
|
[0x4a, ALNUM],
|
|
51
51
|
[0x30, HIRAGANA],
|
|
@@ -186,7 +186,7 @@ export function decodeAribText(data) {
|
|
|
186
186
|
if (byte <= 0x20 || byte === 0x7f || byte === 0xa0 || byte === 0xff) {
|
|
187
187
|
at++;
|
|
188
188
|
switch (byte) {
|
|
189
|
-
case 0x0d: // APR。改行。直後の LF は同じ1回として畳む
|
|
189
|
+
case 0x0d: // APR。改行。直後の LF は同じ 1 回として畳む
|
|
190
190
|
out += "\n";
|
|
191
191
|
if (data[at] === 0x0a)
|
|
192
192
|
at++;
|
package/dist/b24-tables.d.ts
CHANGED
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
* 名前で読んでフォントに入れる字を決める (`ADDITIONAL_ROWS`・`PLANE1_HIGH_ROWS` も。`aribtext-gaiji.ts`・`fold.ts` も同じ)。
|
|
12
12
|
*
|
|
13
13
|
* - 漢字は EUC-JP で読んだものと違うところだけ持つ (`KANJI_DIFF`。番組表は EUC-JP のまま読むので、
|
|
14
|
-
* 1区33点の 〜 / ~ などは字幕と番組表で違えてある。aribtext.ts の説明)。1〜84区は JIS X 0213:2004 の1面と
|
|
15
|
-
* 同じ字 (全角の形を選んだ点と、1区17点の  ̄ など libaribcaption のとおりの数点を除く)
|
|
16
|
-
* - JIS X 0213 の表 (2つのコードポイントの字・1面の 85〜94区・2面) は [scripts/jisx0213.ts](../scripts/jisx0213.ts) が
|
|
14
|
+
* 1 区 33 点の 〜 / ~ などは字幕と番組表で違えてある。aribtext.ts の説明)。1〜84 区は JIS X 0213:2004 の 1 面と
|
|
15
|
+
* 同じ字 (全角の形を選んだ点と、1 区 17 点の  ̄ など libaribcaption のとおりの数点を除く)
|
|
16
|
+
* - JIS X 0213 の表 (2 つのコードポイントの字・1 面の 85〜94 区・2 面) は [scripts/jisx0213.ts](../scripts/jisx0213.ts) が
|
|
17
17
|
* x0213.org の対応表から書く。手で直さない
|
|
18
18
|
* - U+FFFD は規格で空いているところ
|
|
19
19
|
*
|
|
@@ -41,11 +41,11 @@ export declare const JISX0201_HALF = "\uFF61\uFF62\uFF63\uFF64\uFF65\uFF66\uFF67
|
|
|
41
41
|
export declare const ALNUM_FULL = "\uFF01\uFF02\uFF03\uFF04\uFF05\uFF06\uFF07\uFF08\uFF09\uFF0A\uFF0B\uFF0C\uFF0D\uFF0E\uFF0F\uFF10\uFF11\uFF12\uFF13\uFF14\uFF15\uFF16\uFF17\uFF18\uFF19\uFF1A\uFF1B\uFF1C\uFF1D\uFF1E\uFF1F\uFF20\uFF21\uFF22\uFF23\uFF24\uFF25\uFF26\uFF27\uFF28\uFF29\uFF2A\uFF2B\uFF2C\uFF2D\uFF2E\uFF2F\uFF30\uFF31\uFF32\uFF33\uFF34\uFF35\uFF36\uFF37\uFF38\uFF39\uFF3A\uFF3B\uFFE5\uFF3D\uFF3E\uFF3F\uFF40\uFF41\uFF42\uFF43\uFF44\uFF45\uFF46\uFF47\uFF48\uFF49\uFF4A\uFF4B\uFF4C\uFF4D\uFF4E\uFF4F\uFF50\uFF51\uFF52\uFF53\uFF54\uFF55\uFF56\uFF57\uFF58\uFF59\uFF5A\uFF5B\uFF5C\uFF5D\uFFE3";
|
|
42
42
|
/** 同じものの半角 (中くらいのとき)。0x5C は ¥、0x7E は ‾ (番組表は ASCII のまま。バックスラッシュとチルダ) */
|
|
43
43
|
export declare const ALNUM_HALF = "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\u00A5]^_`abcdefghijklmnopqrstuvwxyz{|}\u203E";
|
|
44
|
-
/** 漢字の表の1・2区を、中くらいのときに半角へ寄せたもの */
|
|
44
|
+
/** 漢字の表の 1・2 区を、中くらいのときに半角へ寄せたもの */
|
|
45
45
|
export declare const KANJI_SYMBOLS_HALF = " \uFF64\uFF61,.\uFF65:;?!\uFF9E\uFF9F\u00B4`\u00A8^\u00AF_\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\uFF70\u2015\u2010/\\~\u2016|\u2026\u2025\u2018\u2019\u201C\u201D()\u3014\u3015[]{}\u3008\u3009\u300A\u300B\uFF62\uFF63\u300E\u300F\u3010\u3011+\u2212\u00B1\u00D7\u00F7=\u2260<>\u2266\u2267\u221E\u2234\u2642\u2640\u00B0\u2032\u2033\u2103\u00A5$\u00A2\u00A3%#&*@\u00A7\u2606\u2605\uFFEE\u25CF\u25CE\u25C7\u25C6\u25A1\uFFED\u25B3\u25B2\u25BD\u25BC\u203B\u3012\uFFEB\uFFE9\uFFEA\uFFEC\u3013'\"-~\u3033\u3034\u3035\u303B\u303C\u30FF\u309F\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229\u2284\u2285\u228A\u228B\u2209\u2205\u2305\u2306\u2227\u2228\u00AC\u21D2\u21D4\u2200\u2203\u2295\u2296\u2297\u2225\u2226\u2985\u2986\u3018\u3019\u3016\u3017\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C\u2262\u2243\u2245\u2248\u2276\u2277\u2194\u212B\u2030\u266F\u266D\u266A\u2020\u2021\u00B6\u266E\u266B\u266C\u2669\u25EF";
|
|
46
|
-
/** 漢字の表 (1〜84区) のうち、EUC-JP で読んだものと違うところ。[区×94+点 (0 から), そこから続く字] の並び。85区から先は `ADDITIONAL` */
|
|
46
|
+
/** 漢字の表 (1〜84 区) のうち、EUC-JP で読んだものと違うところ。[区×94+点 (0 から), そこから続く字] の並び。85 区から先は `ADDITIONAL` */
|
|
47
47
|
export declare const KANJI_DIFF: [number, string][];
|
|
48
|
-
/** 追加記号・追加漢字を1つの文字列にしたもの。(区 − 85) × 94 + (点 − 1) 番目のコードポイント */
|
|
48
|
+
/** 追加記号・追加漢字を 1 つの文字列にしたもの。(区 − 85) × 94 + (点 − 1) 番目のコードポイント */
|
|
49
49
|
export declare const ADDITIONAL: string;
|
|
50
50
|
/**
|
|
51
51
|
* JIS X 0213:2004 の1面で、2つのコードポイントで表す字 (半濁点の付いたかな・発音記号と、声調の組)。
|
|
@@ -59,7 +59,7 @@ export declare const PLANE1_HIGH: string;
|
|
|
59
59
|
*/
|
|
60
60
|
export declare const PLANE2: [number, string][];
|
|
61
61
|
/**
|
|
62
|
-
* 色の表 (CLUT)。8つの組 × 16色、RGBA の16進。後ろの4組 (65〜127) は 64 を引いた番号の色を半分透かしたもの (65〜72 だけは 0〜7 番の基本の色)。
|
|
62
|
+
* 色の表 (CLUT)。8 つの組 × 16 色、RGBA の 16 進。後ろの 4 組 (65〜127) は 64 を引いた番号の色を半分透かしたもの (65〜72 だけは 0〜7 番の基本の色)。
|
|
63
63
|
* libaribcaption の表は 101 番と 119 番の青が `09` になっていたが、
|
|
64
64
|
* 元の 37 番・55 番 (`55ff00`・`ff5500`) を透かしたものなので `00`
|
|
65
65
|
*/
|
package/dist/b24-tables.js
CHANGED
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
* 名前で読んでフォントに入れる字を決める (`ADDITIONAL_ROWS`・`PLANE1_HIGH_ROWS` も。`aribtext-gaiji.ts`・`fold.ts` も同じ)。
|
|
12
12
|
*
|
|
13
13
|
* - 漢字は EUC-JP で読んだものと違うところだけ持つ (`KANJI_DIFF`。番組表は EUC-JP のまま読むので、
|
|
14
|
-
* 1区33点の 〜 / ~ などは字幕と番組表で違えてある。aribtext.ts の説明)。1〜84区は JIS X 0213:2004 の1面と
|
|
15
|
-
* 同じ字 (全角の形を選んだ点と、1区17点の  ̄ など libaribcaption のとおりの数点を除く)
|
|
16
|
-
* - JIS X 0213 の表 (2つのコードポイントの字・1面の 85〜94区・2面) は [scripts/jisx0213.ts](../scripts/jisx0213.ts) が
|
|
14
|
+
* 1 区 33 点の 〜 / ~ などは字幕と番組表で違えてある。aribtext.ts の説明)。1〜84 区は JIS X 0213:2004 の 1 面と
|
|
15
|
+
* 同じ字 (全角の形を選んだ点と、1 区 17 点の  ̄ など libaribcaption のとおりの数点を除く)
|
|
16
|
+
* - JIS X 0213 の表 (2 つのコードポイントの字・1 面の 85〜94 区・2 面) は [scripts/jisx0213.ts](../scripts/jisx0213.ts) が
|
|
17
17
|
* x0213.org の対応表から書く。手で直さない
|
|
18
18
|
* - U+FFFD は規格で空いているところ
|
|
19
19
|
*
|
|
@@ -42,63 +42,63 @@ export const JISX0201_HALF = "。「」、・ヲァィゥェォャュョッー
|
|
|
42
42
|
export const ALNUM_FULL = "!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|} ̄";
|
|
43
43
|
/** 同じものの半角 (中くらいのとき)。0x5C は ¥、0x7E は ‾ (番組表は ASCII のまま。バックスラッシュとチルダ) */
|
|
44
44
|
export const ALNUM_HALF = "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|}‾";
|
|
45
|
-
/** 漢字の表の1・2区を、中くらいのときに半角へ寄せたもの */
|
|
45
|
+
/** 漢字の表の 1・2 区を、中くらいのときに半角へ寄せたもの */
|
|
46
46
|
export const KANJI_SYMBOLS_HALF = " 、。,.・:;?!゙゚´`¨^¯_ヽヾゝゞ〃仝々〆〇ー―‐/\\~‖|…‥‘’“”()〔〕[]{}〈〉《》「」『』【】+−±×÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓'\"-~〳〴〵〻〼ヿゟ∈∋⊆⊇⊂⊃∪∩⊄⊅⊊⊋∉∅⌅⌆∧∨¬⇒⇔∀∃⊕⊖⊗∥∦⦅⦆〘〙〖〗∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬≢≃≅≈≶≷↔ʼn♯♭♪†‡¶♮♫♬♩◯";
|
|
47
|
-
/** 漢字の表 (1〜84区) のうち、EUC-JP で読んだものと違うところ。[区×94+点 (0 から), そこから続く字] の並び。85区から先は `ADDITIONAL` */
|
|
47
|
+
/** 漢字の表 (1〜84 区) のうち、EUC-JP で読んだものと違うところ。[区×94+点 (0 から), そこから続く字] の並び。85 区から先は `ADDITIONAL` */
|
|
48
48
|
export const KANJI_DIFF = [
|
|
49
|
-
[32, "〜‖"], // 1区33点から
|
|
50
|
-
[60, "−"], // 1区61点から
|
|
51
|
-
[108, "'"-~〳〴〵〻〼ヿゟ"], // 2区15点から
|
|
52
|
-
[127, "⊄⊅⊊⊋∉∅⌅⌆"], // 2区34点から
|
|
53
|
-
[142, "⊕⊖⊗∥∦⦅⦆〘〙〖〗"], // 2区49点から
|
|
54
|
-
[168, "≢≃≅≈≶≷↔"], // 2区75点から
|
|
55
|
-
[183, "♮♫♬♩"], // 2区90点から
|
|
56
|
-
[188, "▷▶◁◀↗↘↖↙⇄⇨⇦⇧⇩⤴⤵"], // 3区1点から
|
|
57
|
-
[213, "⦿◉〽﹆﹅◦•"], // 3区26点から
|
|
58
|
-
[246, "∓ℵℏ㏋ℓ℧"], // 3区59点から
|
|
59
|
-
[278, "゠–⧺⧻"], // 3区91点から
|
|
60
|
-
[365, "ゔゕゖ"], // 4区84点から
|
|
61
|
-
[494, "♤♠♢♦♡♥♧♣"], // 6区25点から
|
|
62
|
-
[526, "ς⓵⓶⓷⓸⓹⓺⓻⓼⓽⓾☖☗〠☎☀☁☂☃♨▱ㇰㇱㇲㇳㇴㇵㇶㇷㇸㇹ"], // 6区57点から
|
|
63
|
-
[558, "ㇺㇻㇼㇽㇾㇿ"], // 6区89点から
|
|
64
|
-
[597, "⎾⎿⏀⏁⏂⏃⏄⏅⏆⏇⏈⏉⏊⏋⏌"], // 7区34点から
|
|
65
|
-
[645, "ヷヸヹヺ⋚⋛⅓⅔⅕✓⌘␣⏎"], // 7区82点から
|
|
66
|
-
[690, "㉑㉒㉓㉔㉕㉖㉗㉘㉙㉚㉛㉜㉝㉞㉟㊱㊲㊳㊴㊵㊶㊷㊸㊹㊺㊻㊼㊽㊾㊿"], // 8区33点から
|
|
67
|
-
[728, "◐◑◒◓‼⁇⁈⁉ǍǎǐḾḿǸǹǑǒǔǖǘǚǜ"], // 8区71点から
|
|
68
|
-
[752, "€ ¡¤¦©ª«®¯²³·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿĀĪŪĒŌāīūēōĄ˘ŁĽŚŠŞŤŹŽŻą˛łľśˇšşťź˝žżŔĂĹĆČĘĚĎŃŇŐŘŮŰŢŕăĺćčęěďđńňőřůűţ˙ĈĜĤĴŜŬĉĝĥĵŝŭɱʋɾʃʒɬɮɹʈɖɳɽʂʐɻɭɟɲʝʎɡŋɰʁħʕʔɦʘǂɓɗʄɠƓœŒɨʉɘɵəɜɞɐɯʊɤʌɔɑɒʍɥʢʡɕʑɺɧɚ"], // 9区1点から
|
|
69
|
-
[976, "ǽὰά"], // 11区37点から
|
|
70
|
-
[987, "ὲέ͡ˈˌːˑ̆‿̋́̄̀̏̌̂˥˦˧˨˩"], // 11区48点から
|
|
71
|
-
[1010, "̥̬̹̜̟̠̩̯̈̽˞̴̤̰̼̝̞̘̙̪̺̻̃̚❶❷❸❹❺❻❼❽❾❿⓫⓬⓭⓮⓯⓰⓱⓲⓳⓴ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅺⅻⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ㋐㋑㋒㋓㋔㋕㋖㋗㋘㋙㋚㋛㋜㋝㋞㋟㋠㋡㋢㋣㋺㋩㋥㋭㋬"], // 11区71点から
|
|
72
|
-
[1126, "⁑⁂"], // 12区93点から
|
|
73
|
-
[1158, "Ⅺ"], // 13区31点から
|
|
74
|
-
[1182, "Ⅻ"], // 13区55点から
|
|
75
|
-
[1207, "���"], // 13区80点から
|
|
76
|
-
[1211, "����"], // 13区84点から
|
|
77
|
-
[1217, "���❖☞俱𠀋㐂丨丯丰亍仡份仿伃伋你佈佉佖佟佪佬佾侊侔侗侮俉俠倁倂倎倘倧倮偀倻偁傔僌僲僐僦僧儆儃儋儞儵兊免兕兗㒵冝凃凊凞凢凮刁㓛刓刕剉剗剡劓勈勉勌勐勖勛勤勰勻匀匇匜卑卡卣卽厓厝厲吒吧呍咜呫呴呿咈咖咡咩哆哿唎唫唵啐啞喁喆喎喝喭嗎嘆嘈嘎嘻噉噶噦器噯噱噲嚙嚞嚩嚬嚳囉囊圊𡈽圡圯圳圴坰坷坼垜﨏𡌛垸埇埈埏埤埭埵埶埿堉塚塡塤塀塼墉增墨墩𡑮壒壎壔壚壠壩夌虁奝奭妋妒妤姃姒姝娓娣婧婭婷婾媄媞媧嫄𡢽嬙嬥剝"], // 13区90点から
|
|
78
|
-
[4375, "𠮟孁孖孽宓寘寬尒尞尣尫㞍屢層屮𡚴屺岏岟岣岪岺峋峐峒峴𡸴㟢崍崧﨑嵆嵇嵓嵊嵭嶁嶠嶤嶧嶸巋吞"], // 47区52点から
|
|
79
|
-
[7808, "噓巢帔帘幘幞庾廊廋廹开异弇弝弣弴弶弽彀彅彔彘彤彧彽徉徜徧徯徵德忉忞忡忩怍怔怘怳怵恇悔悝悞惋惔惕惝惸愜愫愰愷慨憍憎憼憹懲戢戾扃扖扚扯抅拄拖拼挊挘挹捃捥捼揥揭揵搐搔搢摹摑摠摭擎撾撿㐂𠅘份仿侚俉傜儞冼㔟匇卡卬詹𠮷呍咖咜咩唎啊噲囤圳圴塚墀姤娣婕寬﨑㟢庬弴彅德怗恵愰昤曈曙曺曻桒鿄椑椻橅檑櫛𣏌𣏾𣗄毱泠洮海涿淊淸渚潞濹灤𤋮𤋮煇燁爀玟玨珉珖琛琡琢琦琪琬琹瑋㻚畵疁睲䂓磈磠祇禮鿆䄃鿅秚稞筿簱䉤綋羡脘脺舘芮葛蓜蓬蕙藎蝕蟬蠋裵角諶跎辻迶郝鄧鄭醲鈳銈錡鍈閒雞餃饀髙鯖鷗麴麵"], // 84区7点から
|
|
49
|
+
[32, "〜‖"], // 1 区 33 点から
|
|
50
|
+
[60, "−"], // 1 区 61 点から
|
|
51
|
+
[108, "'"-~〳〴〵〻〼ヿゟ"], // 2 区 15 点から
|
|
52
|
+
[127, "⊄⊅⊊⊋∉∅⌅⌆"], // 2 区 34 点から
|
|
53
|
+
[142, "⊕⊖⊗∥∦⦅⦆〘〙〖〗"], // 2 区 49 点から
|
|
54
|
+
[168, "≢≃≅≈≶≷↔"], // 2 区 75 点から
|
|
55
|
+
[183, "♮♫♬♩"], // 2 区 90 点から
|
|
56
|
+
[188, "▷▶◁◀↗↘↖↙⇄⇨⇦⇧⇩⤴⤵"], // 3 区 1 点から
|
|
57
|
+
[213, "⦿◉〽﹆﹅◦•"], // 3 区 26 点から
|
|
58
|
+
[246, "∓ℵℏ㏋ℓ℧"], // 3 区 59 点から
|
|
59
|
+
[278, "゠–⧺⧻"], // 3 区 91 点から
|
|
60
|
+
[365, "ゔゕゖ"], // 4 区 84 点から
|
|
61
|
+
[494, "♤♠♢♦♡♥♧♣"], // 6 区 25 点から
|
|
62
|
+
[526, "ς⓵⓶⓷⓸⓹⓺⓻⓼⓽⓾☖☗〠☎☀☁☂☃♨▱ㇰㇱㇲㇳㇴㇵㇶㇷㇸㇹ"], // 6 区 57 点から
|
|
63
|
+
[558, "ㇺㇻㇼㇽㇾㇿ"], // 6 区 89 点から
|
|
64
|
+
[597, "⎾⎿⏀⏁⏂⏃⏄⏅⏆⏇⏈⏉⏊⏋⏌"], // 7 区 34 点から
|
|
65
|
+
[645, "ヷヸヹヺ⋚⋛⅓⅔⅕✓⌘␣⏎"], // 7 区 82 点から
|
|
66
|
+
[690, "㉑㉒㉓㉔㉕㉖㉗㉘㉙㉚㉛㉜㉝㉞㉟㊱㊲㊳㊴㊵㊶㊷㊸㊹㊺㊻㊼㊽㊾㊿"], // 8 区 33 点から
|
|
67
|
+
[728, "◐◑◒◓‼⁇⁈⁉ǍǎǐḾḿǸǹǑǒǔǖǘǚǜ"], // 8 区 71 点から
|
|
68
|
+
[752, "€ ¡¤¦©ª«®¯²³·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿĀĪŪĒŌāīūēōĄ˘ŁĽŚŠŞŤŹŽŻą˛łľśˇšşťź˝žżŔĂĹĆČĘĚĎŃŇŐŘŮŰŢŕăĺćčęěďđńňőřůűţ˙ĈĜĤĴŜŬĉĝĥĵŝŭɱʋɾʃʒɬɮɹʈɖɳɽʂʐɻɭɟɲʝʎɡŋɰʁħʕʔɦʘǂɓɗʄɠƓœŒɨʉɘɵəɜɞɐɯʊɤʌɔɑɒʍɥʢʡɕʑɺɧɚ"], // 9 区 1 点から
|
|
69
|
+
[976, "ǽὰά"], // 11 区 37 点から
|
|
70
|
+
[987, "ὲέ͡ˈˌːˑ̆‿̋́̄̀̏̌̂˥˦˧˨˩"], // 11 区 48 点から
|
|
71
|
+
[1010, "̥̬̹̜̟̠̩̯̈̽˞̴̤̰̼̝̞̘̙̪̺̻̃̚❶❷❸❹❺❻❼❽❾❿⓫⓬⓭⓮⓯⓰⓱⓲⓳⓴ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅺⅻⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ㋐㋑㋒㋓㋔㋕㋖㋗㋘㋙㋚㋛㋜㋝㋞㋟㋠㋡㋢㋣㋺㋩㋥㋭㋬"], // 11 区 71 点から
|
|
72
|
+
[1126, "⁑⁂"], // 12 区 93 点から
|
|
73
|
+
[1158, "Ⅺ"], // 13 区 31 点から
|
|
74
|
+
[1182, "Ⅻ"], // 13 区 55 点から
|
|
75
|
+
[1207, "���"], // 13 区 80 点から
|
|
76
|
+
[1211, "����"], // 13 区 84 点から
|
|
77
|
+
[1217, "���❖☞俱𠀋㐂丨丯丰亍仡份仿伃伋你佈佉佖佟佪佬佾侊侔侗侮俉俠倁倂倎倘倧倮偀倻偁傔僌僲僐僦僧儆儃儋儞儵兊免兕兗㒵冝凃凊凞凢凮刁㓛刓刕剉剗剡劓勈勉勌勐勖勛勤勰勻匀匇匜卑卡卣卽厓厝厲吒吧呍咜呫呴呿咈咖咡咩哆哿唎唫唵啐啞喁喆喎喝喭嗎嘆嘈嘎嘻噉噶噦器噯噱噲嚙嚞嚩嚬嚳囉囊圊𡈽圡圯圳圴坰坷坼垜﨏𡌛垸埇埈埏埤埭埵埶埿堉塚塡塤塀塼墉增墨墩𡑮壒壎壔壚壠壩夌虁奝奭妋妒妤姃姒姝娓娣婧婭婷婾媄媞媧嫄𡢽嬙嬥剝"], // 13 区 90 点から
|
|
78
|
+
[4375, "𠮟孁孖孽宓寘寬尒尞尣尫㞍屢層屮𡚴屺岏岟岣岪岺峋峐峒峴𡸴㟢崍崧﨑嵆嵇嵓嵊嵭嶁嶠嶤嶧嶸巋吞"], // 47 区 52 点から
|
|
79
|
+
[7808, "噓巢帔帘幘幞庾廊廋廹开异弇弝弣弴弶弽彀彅彔彘彤彧彽徉徜徧徯徵德忉忞忡忩怍怔怘怳怵恇悔悝悞惋惔惕惝惸愜愫愰愷慨憍憎憼憹懲戢戾扃扖扚扯抅拄拖拼挊挘挹捃捥捼揥揭揵搐搔搢摹摑摠摭擎撾撿㐂𠅘份仿侚俉傜儞冼㔟匇卡卬詹𠮷呍咖咜咩唎啊噲囤圳圴塚墀姤娣婕寬﨑㟢庬弴彅德怗恵愰昤曈曙曺曻桒鿄椑椻橅檑櫛𣏌𣏾𣗄毱泠洮海涿淊淸渚潞濹灤𤋮𤋮煇燁爀玟玨珉珖琛琡琢琦琪琬琹瑋㻚畵疁睲䂓磈磠祇禮鿆䄃鿅秚稞筿簱䉤綋羡脘脺舘芮葛蓜蓬蕙藎蝕蟬蠋裵角諶跎辻迶郝鄧鄭醲鈳銈錡鍈閒雞餃饀髙鯖鷗麴麵"], // 84 区 7 点から
|
|
80
80
|
];
|
|
81
81
|
/**
|
|
82
|
-
* 追加記号・追加漢字 (85〜94区)。1行が1区で、94 字ずつ (点の順)。ARIB STD-B24 表 7-19 / STD-B62 表 5-2。
|
|
82
|
+
* 追加記号・追加漢字 (85〜94 区)。1 行が 1 区で、94 字ずつ (点の順)。ARIB STD-B24 表 7-19 / STD-B62 表 5-2。
|
|
83
83
|
* 番組表の外字 (aribtext-gaiji.ts) もここを引く
|
|
84
84
|
*
|
|
85
85
|
* 4K8K 用の記号 (🆛〜🆬 U+1F19B〜1F1AC と 🈻 U+1F23B。STD-B62 表 5-3「EPG で使う追加記号」) は
|
|
86
86
|
* **区点が無いので入れない。** 規格は UCS の符号だけを決め (UTF-8 で送る MMT の番組表用)、
|
|
87
|
-
* STD-B24 表 7-19 の 90区85点〜・91区50点〜も空きのまま。denpa は8単位符号しか読まないので出てこない
|
|
87
|
+
* STD-B24 表 7-19 の 90 区 85 点〜・91 区 50 点〜も空きのまま。denpa は 8 単位符号しか読まないので出てこない
|
|
88
88
|
*/
|
|
89
89
|
const ADDITIONAL_ROWS = [
|
|
90
|
-
"㐂𠅘份仿侚俉傜儞冼㔟匇卡卬詹𠮷呍咖咜咩唎啊噲囤圳圴塚墀姤娣婕寬﨑㟢庬弴彅德怗恵愰昤曈曙曺曻桒鿄椑椻橅檑櫛𣏌𣏾𣗄毱泠洮海涿淊淸渚潞濹灤𤋮𤋮煇燁爀玟玨珉珖琛琡琢琦琪琬琹瑋㻚畵疁睲䂓磈磠祇禮鿆䄃", // 85区
|
|
91
|
-
"鿅秚稞筿簱䉤綋羡脘脺舘芮葛蓜蓬蕙藎蝕蟬蠋裵角諶跎辻迶郝鄧鄭醲鈳銈錡鍈閒雞餃饀髙鯖鷗麴麵���������������������������������������������������", // 86区
|
|
92
|
-
"����������������������������������������������������������������������������������������������", // 87区
|
|
93
|
-
"����������������������������������������������������������������������������������������������", // 88区
|
|
94
|
-
"����������������������������������������������������������������������������������������������", // 89区
|
|
95
|
-
"⛌⛍❗⛏⛐⛑�⛒⛕⛓⛔����🅿🆊��⛖⛗⛘⛙⛚⛛⛜⛝⛞⛟⛠⛡⭕㉈㉉㉊㉋㉌㉍㉎㉏����⒑⒒⒓🅊🅌🄿🅆🅋🈐🈑🈒🈓🅂🈔🈕🈖🅍🄱🄽⬛⬤🈗🈘🈙🈚🈛⚿🈜🈝🈞🈟🈠🈡🈢🈣🈤🈥🅎㊙🈀����������", // 90区
|
|
96
|
-
"⛣⭖⭗⭘⭙☓㊋〒⛨㉆㉅⛩࿖⛪⛫⛬♨⛭⛮⛯⚓✈⛰⛱⛲⛳⛴⛵🅗ⒹⓈ⛶🅟🆋🆍🆌🅹⛷⛸⛹⛺🅻☎⛻⛼⛽⛾🅼⛿���������������������������������������������", // 91区
|
|
97
|
-
"➡⬅⬆⬇⬯⬮年月日円㎡㎥㎝㎠㎤🄀⒈⒉⒊⒋⒌⒍⒎⒏⒐氏副元故前新🄁🄂🄃🄄🄅🄆🄇🄈🄉🄊㈳㈶㈲㈱㈹㉄▶◀〖〗⟐²³🄭🄬🄫㉇🆐🈦℻���", // 92区
|
|
98
|
-
"㈪㈫㈬㈭㈮㈯㈰㈷㍾㍽㍼㍻№℡〶⚾🉀🉁🉂🉃🉄🉅🉆🉇🉈🄪🈧🈨🈩🈔🈪🈫🈬🈭🈮🈯🈰🈱ℓ㎏㎐㏊㎞㎢㍱��½↉⅓⅔¼¾⅕⅖⅗⅘⅙⅚⅐⅛⅑⅒☀☁☂⛄☖☗⛉⛊♦♥♣♠⛋⨀‼⁉⛅☔⛆☃⛇⚡⛈�⚞⚟♬☎���", // 93区
|
|
99
|
-
"ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ⑰⑱⑲⑳⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿㉑㉒㉓㉔🄐🄑🄒🄓🄔🄕🄖🄗🄘🄙🄚🄛🄜🄝🄞🄟🄠🄡🄢🄣🄤🄥🄦🄧🄨🄩㉕㉖㉗㉘㉙㉚①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯❶❷❸❹❺❻❼❽❾❿⓫⓬㉛�", // 94区
|
|
90
|
+
"㐂𠅘份仿侚俉傜儞冼㔟匇卡卬詹𠮷呍咖咜咩唎啊噲囤圳圴塚墀姤娣婕寬﨑㟢庬弴彅德怗恵愰昤曈曙曺曻桒鿄椑椻橅檑櫛𣏌𣏾𣗄毱泠洮海涿淊淸渚潞濹灤𤋮𤋮煇燁爀玟玨珉珖琛琡琢琦琪琬琹瑋㻚畵疁睲䂓磈磠祇禮鿆䄃", // 85 区
|
|
91
|
+
"鿅秚稞筿簱䉤綋羡脘脺舘芮葛蓜蓬蕙藎蝕蟬蠋裵角諶跎辻迶郝鄧鄭醲鈳銈錡鍈閒雞餃饀髙鯖鷗麴麵���������������������������������������������������", // 86 区
|
|
92
|
+
"����������������������������������������������������������������������������������������������", // 87 区
|
|
93
|
+
"����������������������������������������������������������������������������������������������", // 88 区
|
|
94
|
+
"����������������������������������������������������������������������������������������������", // 89 区
|
|
95
|
+
"⛌⛍❗⛏⛐⛑�⛒⛕⛓⛔����🅿🆊��⛖⛗⛘⛙⛚⛛⛜⛝⛞⛟⛠⛡⭕㉈㉉㉊㉋㉌㉍㉎㉏����⒑⒒⒓🅊🅌🄿🅆🅋🈐🈑🈒🈓🅂🈔🈕🈖🅍🄱🄽⬛⬤🈗🈘🈙🈚🈛⚿🈜🈝🈞🈟🈠🈡🈢🈣🈤🈥🅎㊙🈀����������", // 90 区
|
|
96
|
+
"⛣⭖⭗⭘⭙☓㊋〒⛨㉆㉅⛩࿖⛪⛫⛬♨⛭⛮⛯⚓✈⛰⛱⛲⛳⛴⛵🅗ⒹⓈ⛶🅟🆋🆍🆌🅹⛷⛸⛹⛺🅻☎⛻⛼⛽⛾🅼⛿���������������������������������������������", // 91 区
|
|
97
|
+
"➡⬅⬆⬇⬯⬮年月日円㎡㎥㎝㎠㎤🄀⒈⒉⒊⒋⒌⒍⒎⒏⒐氏副元故前新🄁🄂🄃🄄🄅🄆🄇🄈🄉🄊㈳㈶㈲㈱㈹㉄▶◀〖〗⟐²³🄭🄬🄫㉇🆐🈦℻���", // 92 区
|
|
98
|
+
"㈪㈫㈬㈭㈮㈯㈰㈷㍾㍽㍼㍻№℡〶⚾🉀🉁🉂🉃🉄🉅🉆🉇🉈🄪🈧🈨🈩🈔🈪🈫🈬🈭🈮🈯🈰🈱ℓ㎏㎐㏊㎞㎢㍱��½↉⅓⅔¼¾⅕⅖⅗⅘⅙⅚⅐⅛⅑⅒☀☁☂⛄☖☗⛉⛊♦♥♣♠⛋⨀‼⁉⛅☔⛆☃⛇⚡⛈�⚞⚟♬☎���", // 93 区
|
|
99
|
+
"ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ⑰⑱⑲⑳⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿㉑㉒㉓㉔🄐🄑🄒🄓🄔🄕🄖🄗🄘🄙🄚🄛🄜🄝🄞🄟🄠🄡🄢🄣🄤🄥🄦🄧🄨🄩㉕㉖㉗㉘㉙㉚①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯❶❷❸❹❺❻❼❽❾❿⓫⓬㉛�", // 94 区
|
|
100
100
|
];
|
|
101
|
-
/** 追加記号・追加漢字を1つの文字列にしたもの。(区 − 85) × 94 + (点 − 1) 番目のコードポイント */
|
|
101
|
+
/** 追加記号・追加漢字を 1 つの文字列にしたもの。(区 − 85) × 94 + (点 − 1) 番目のコードポイント */
|
|
102
102
|
export const ADDITIONAL = ADDITIONAL_ROWS.join('');
|
|
103
103
|
// ここから JIS X 0213 の表 (packages/arib/scripts/jisx0213.ts が書く。手で直さない)
|
|
104
104
|
/**
|
|
@@ -183,7 +183,7 @@ export const PLANE2 = [
|
|
|
183
183
|
];
|
|
184
184
|
// ここまで JIS X 0213 の表
|
|
185
185
|
/**
|
|
186
|
-
* 色の表 (CLUT)。8つの組 × 16色、RGBA の16進。後ろの4組 (65〜127) は 64 を引いた番号の色を半分透かしたもの (65〜72 だけは 0〜7 番の基本の色)。
|
|
186
|
+
* 色の表 (CLUT)。8 つの組 × 16 色、RGBA の 16 進。後ろの 4 組 (65〜127) は 64 を引いた番号の色を半分透かしたもの (65〜72 だけは 0〜7 番の基本の色)。
|
|
187
187
|
* libaribcaption の表は 101 番と 119 番の青が `09` になっていたが、
|
|
188
188
|
* 元の 37 番・55 番 (`55ff00`・`ff5500`) を透かしたものなので `00`
|
|
189
189
|
*/
|
|
@@ -494,11 +494,11 @@ export const DRCS_REPLACE = new Map([
|
|
|
494
494
|
['9374173a2e4b7f1dcac75eccd5ee7e7f', 0x698a],
|
|
495
495
|
['ec7b2c805a5ba3d52c281ee2296b94d7', 0x8523],
|
|
496
496
|
['dedbee40c06e17b51932431dc8cd8334', 0x8fc2], // denpa: 一点しんにょうの「迂」。2026-10-10 時点の録画 58 本で表に無かったもの
|
|
497
|
-
['e806d1481cfa721da5f60413531f39bd', 0x1f4f1], // denpa: 携帯電話 📱 (36x36・4階調)。NHK総合 2026-10-11。録画 20 本 (字幕に字のあったのは 9 本) で表に無かったのはこれだけ
|
|
498
|
-
['d9b5d861024ce112c12fa5f155bb1af3', 0x1f50a], // denpa: 音の出ているスピーカー 🔊 (36x36・4階調)。テレビ朝日 2026-10-17 のアニメの字幕で1本に5回
|
|
499
|
-
['d1e6371a34eaf49154ea6a4d0e9064ac', 0x1f50a], // denpa: 音の出ているスピーカー 🔊。TBS 2026-10 のアニメの字幕で1本に22回 (テレビ朝日のものと画像が違う)
|
|
500
|
-
['22db8ff6ac75b60b76a15a6e9c42a5db', 0x1f4fa], // denpa: テレビ 📺。上と同じ番組で2回
|
|
501
|
-
['c42450812c184aee2ae01cc5e39ae957', 0x1f4fb], // denpa: ラジオ 📻 (72x72・16階調)。テレ東 2026-11-01 のアニメの字幕で1本に28回
|
|
502
|
-
['06cb56043b9c4006bcfbe07cc831feaf', 0x1f50a], // denpa: 音の出ているスピーカー 🔊 (72x72・16階調)。上と同じ番組で4回 (テレビ朝日・TBS のものと画像が違う)
|
|
503
|
-
['063c95566807d5e7b51ab706426bedf9', 0x1f4f1], // denpa: 携帯電話 📱 (72x72・16階調)。上と同じ番組で4回 (NHK総合のものと画像が違う)
|
|
497
|
+
['e806d1481cfa721da5f60413531f39bd', 0x1f4f1], // denpa: 携帯電話 📱 (36x36・4 階調)。NHK総合 2026-10-11。録画 20 本 (字幕に字のあったのは 9 本) で表に無かったのはこれだけ
|
|
498
|
+
['d9b5d861024ce112c12fa5f155bb1af3', 0x1f50a], // denpa: 音の出ているスピーカー 🔊 (36x36・4 階調)。テレビ朝日 2026-10-17 のアニメの字幕で 1 本に 5 回
|
|
499
|
+
['d1e6371a34eaf49154ea6a4d0e9064ac', 0x1f50a], // denpa: 音の出ているスピーカー 🔊。TBS 2026-10 のアニメの字幕で 1 本に 22 回 (テレビ朝日のものと画像が違う)
|
|
500
|
+
['22db8ff6ac75b60b76a15a6e9c42a5db', 0x1f4fa], // denpa: テレビ 📺。上と同じ番組で 2 回
|
|
501
|
+
['c42450812c184aee2ae01cc5e39ae957', 0x1f4fb], // denpa: ラジオ 📻 (72x72・16 階調)。テレ東 2026-11-01 のアニメの字幕で 1 本に 28 回
|
|
502
|
+
['06cb56043b9c4006bcfbe07cc831feaf', 0x1f50a], // denpa: 音の出ているスピーカー 🔊 (72x72・16 階調)。上と同じ番組で 4 回 (テレビ朝日・TBS のものと画像が違う)
|
|
503
|
+
['063c95566807d5e7b51ab706426bedf9', 0x1f4f1], // denpa: 携帯電話 📱 (72x72・16 階調)。上と同じ番組で 4 回 (NHK総合のものと画像が違う)
|
|
504
504
|
]);
|
package/dist/eit.d.ts
CHANGED
|
@@ -98,6 +98,12 @@ export interface EitEvent {
|
|
|
98
98
|
* 詳細の表 (0x58〜) には載らない。詳細だけ届いた回で消さないため (`EpgReader.merge`)
|
|
99
99
|
*/
|
|
100
100
|
series?: EitSeries | null;
|
|
101
|
+
/**
|
|
102
|
+
* CA契約情報記述子 (0xCB) の contract_verification_info。
|
|
103
|
+
* 有料放送の契約確認・復号判定に使う (B-CAS の 0x90 0x3C コマンド)。
|
|
104
|
+
* 載っていなければ null。詳細の表では言っていないので undefined。
|
|
105
|
+
*/
|
|
106
|
+
contractVerification?: Uint8Array | null;
|
|
101
107
|
}
|
|
102
108
|
export interface EitSection {
|
|
103
109
|
tableId: number;
|
package/dist/eit.js
CHANGED
|
@@ -31,6 +31,7 @@ const DESC_EXTENDED_EVENT = 0x4e;
|
|
|
31
31
|
const DESC_COMPONENT = 0x50;
|
|
32
32
|
const DESC_CONTENT = 0x54;
|
|
33
33
|
const DESC_AUDIO_COMPONENT = 0xc4;
|
|
34
|
+
const DESC_CA_CONTRACT_INFO = 0xcb;
|
|
34
35
|
const DESC_SERIES = 0xd5;
|
|
35
36
|
/** 自局の表か (p/f 0x4E と schedule 0x50〜0x5F)。ほかの TS の schedule (0x60〜0x6F) は下、他局の p/f (0x4F) は読まない */
|
|
36
37
|
function isEitActual(tableId) {
|
|
@@ -241,6 +242,27 @@ function readDescriptors(event, body) {
|
|
|
241
242
|
event.copyNever = isCopyNever(data);
|
|
242
243
|
break;
|
|
243
244
|
}
|
|
245
|
+
case DESC_CA_CONTRACT_INFO: {
|
|
246
|
+
if (data.length < 4)
|
|
247
|
+
break;
|
|
248
|
+
const caSystemId = (data[0] << 8) | data[1];
|
|
249
|
+
const numOfComponent = data[2] & 0x0f;
|
|
250
|
+
let at = 3 + numOfComponent;
|
|
251
|
+
if (at >= data.length)
|
|
252
|
+
break;
|
|
253
|
+
const cviLength = data[at];
|
|
254
|
+
at++;
|
|
255
|
+
if (at + cviLength <= data.length && cviLength > 0) {
|
|
256
|
+
const cvi = data.subarray(at, at + cviLength);
|
|
257
|
+
// B-CAS (0x0005) を優先。まだ無ければ拾う
|
|
258
|
+
if (caSystemId === 0x0005 ||
|
|
259
|
+
event.contractVerification === undefined ||
|
|
260
|
+
event.contractVerification === null) {
|
|
261
|
+
event.contractVerification = cvi;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
break;
|
|
265
|
+
}
|
|
244
266
|
/*
|
|
245
267
|
* series_descriptor (ARIB STD-B10 第 2 部)。
|
|
246
268
|
*
|
|
@@ -333,6 +355,9 @@ export function parseEit(section, options = {}) {
|
|
|
333
355
|
copyNever: tableId >= SCHEDULE_ACTUAL_EXTENDED ? null : false,
|
|
334
356
|
// シリーズも同じ。載っていなければ「シリーズではない」、詳細の表なら「言っていない」
|
|
335
357
|
...(tableId >= SCHEDULE_ACTUAL_EXTENDED ? {} : { series: null }),
|
|
358
|
+
...(tableId >= SCHEDULE_ACTUAL_EXTENDED
|
|
359
|
+
? {}
|
|
360
|
+
: { contractVerification: null }),
|
|
336
361
|
};
|
|
337
362
|
at += 12 + descriptorsLength;
|
|
338
363
|
if (body.length < descriptorsLength)
|
|
@@ -597,6 +622,10 @@ export class EpgReader {
|
|
|
597
622
|
...(event.series === undefined && old.series !== undefined
|
|
598
623
|
? { series: old.series }
|
|
599
624
|
: {}),
|
|
625
|
+
...(event.contractVerification === undefined &&
|
|
626
|
+
old.contractVerification !== undefined
|
|
627
|
+
? { contractVerification: old.contractVerification }
|
|
628
|
+
: {}),
|
|
600
629
|
});
|
|
601
630
|
}
|
|
602
631
|
/**
|
package/dist/pes.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* **1 局に絞った TS から、映像と音声の PES を取り出す** (denpa のライブを変換せずに送る経路。docs/stream.md#放送そのまま
|
|
2
|
+
* **1 局に絞った TS から、映像と音声の PES を取り出す** (denpa のライブを変換せずに送る経路。docs/stream.md#放送そのままmpeg-2を送る)。
|
|
3
3
|
*
|
|
4
4
|
* エンコードする経路ではここを ffmpeg がやっていた。変換せずに送ると TS がそのままブラウザへ来るので、
|
|
5
5
|
* 映像も音声も WASM のデコーダ (denpa の `wasm/decoder.c`) に渡す前に、
|
|
6
|
-
* こちらで PES に戻す。サーバが 1 局に絞ってある (`ServiceFilter`)
|
|
7
|
-
* 載っている局は 1
|
|
6
|
+
* こちらで PES に戻す。サーバが 1 局に絞ってある (`ServiceFilter`) ので PAT に
|
|
7
|
+
* 載っている局は 1 つだけで、その PMT を読んで映像 1 本と音声 (並んだ順) を取り出す。
|
|
8
8
|
*
|
|
9
9
|
* DOM も WASM も触らないので、ここだけ単体で確かめられる (`pes.test.ts`)。
|
|
10
10
|
*/
|
package/dist/pes.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* **1 局に絞った TS から、映像と音声の PES を取り出す** (denpa のライブを変換せずに送る経路。docs/stream.md#放送そのまま
|
|
2
|
+
* **1 局に絞った TS から、映像と音声の PES を取り出す** (denpa のライブを変換せずに送る経路。docs/stream.md#放送そのままmpeg-2を送る)。
|
|
3
3
|
*
|
|
4
4
|
* エンコードする経路ではここを ffmpeg がやっていた。変換せずに送ると TS がそのままブラウザへ来るので、
|
|
5
5
|
* 映像も音声も WASM のデコーダ (denpa の `wasm/decoder.c`) に渡す前に、
|
|
6
|
-
* こちらで PES に戻す。サーバが 1 局に絞ってある (`ServiceFilter`)
|
|
7
|
-
* 載っている局は 1
|
|
6
|
+
* こちらで PES に戻す。サーバが 1 局に絞ってある (`ServiceFilter`) ので PAT に
|
|
7
|
+
* 載っている局は 1 つだけで、その PMT を読んで映像 1 本と音声 (並んだ順) を取り出す。
|
|
8
8
|
*
|
|
9
9
|
* DOM も WASM も触らないので、ここだけ単体で確かめられる (`pes.test.ts`)。
|
|
10
10
|
*/
|
package/dist/service-filter.d.ts
CHANGED
|
@@ -67,7 +67,7 @@ export declare class ServiceFilter {
|
|
|
67
67
|
* **中継の番号 (transport_stream_id)。** PAT を読むまでは null。
|
|
68
68
|
*
|
|
69
69
|
* 絞るのに要るわけではありません。**データ放送が受信機に訊いてくる**ので
|
|
70
|
-
* 覚えておきます。テレ朝の TVerリンクは `browser.getProgramID(4)` で
|
|
70
|
+
* 覚えておきます。テレ朝の TVer リンクは `browser.getProgramID(4)` で
|
|
71
71
|
* これを取り、TVer のサーバへそのまま送る。`null` のまま渡すと文字の
|
|
72
72
|
* "null" が飛んで、あちらが断り、画面には `DT-RE` とだけ出ます
|
|
73
73
|
* ([server/live.ts](https://github.com/danything/denpa/blob/main/src/lib/server/live.ts) の `programInfo`)
|
package/dist/service-filter.js
CHANGED
|
@@ -138,7 +138,7 @@ export class ServiceFilter {
|
|
|
138
138
|
* **中継の番号 (transport_stream_id)。** PAT を読むまでは null。
|
|
139
139
|
*
|
|
140
140
|
* 絞るのに要るわけではありません。**データ放送が受信機に訊いてくる**ので
|
|
141
|
-
* 覚えておきます。テレ朝の TVerリンクは `browser.getProgramID(4)` で
|
|
141
|
+
* 覚えておきます。テレ朝の TVer リンクは `browser.getProgramID(4)` で
|
|
142
142
|
* これを取り、TVer のサーバへそのまま送る。`null` のまま渡すと文字の
|
|
143
143
|
* "null" が飛んで、あちらが断り、画面には `DT-RE` とだけ出ます
|
|
144
144
|
* ([server/live.ts](https://github.com/danything/denpa/blob/main/src/lib/server/live.ts) の `programInfo`)
|
package/dist/synth-av.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* **本物の MPEG-2 映像と AAC 音声を、ffmpeg 無しで組み立てる** (試験用)。
|
|
3
3
|
*
|
|
4
|
-
* denpa のライブを変換せずに送る経路 (docs/stream.md#放送そのまま
|
|
4
|
+
* denpa のライブを変換せずに送る経路 (docs/stream.md#放送そのままmpeg-2を送る) は、ブラウザが MPEG-2 をデコードして映像を出す
|
|
5
5
|
* ところまでが仕事で、そこを試すには**本当にデコードできる放送**が要る。偽エージェントの
|
|
6
6
|
* 放送は中身を 0xFF で埋めていて、デコードするものが無い。E2E のイメージには本物の ffmpeg も
|
|
7
7
|
* 入っていない (数十分かかる組み立てを避けている) ので、ここで小さく作る。
|
package/dist/synth-av.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* **本物の MPEG-2 映像と AAC 音声を、ffmpeg 無しで組み立てる** (試験用)。
|
|
3
3
|
*
|
|
4
|
-
* denpa のライブを変換せずに送る経路 (docs/stream.md#放送そのまま
|
|
4
|
+
* denpa のライブを変換せずに送る経路 (docs/stream.md#放送そのままmpeg-2を送る) は、ブラウザが MPEG-2 をデコードして映像を出す
|
|
5
5
|
* ところまでが仕事で、そこを試すには**本当にデコードできる放送**が要る。偽エージェントの
|
|
6
6
|
* 放送は中身を 0xFF で埋めていて、デコードするものが無い。E2E のイメージには本物の ffmpeg も
|
|
7
7
|
* 入っていない (数十分かかる組み立てを避けている) ので、ここで小さく作る。
|
|
@@ -141,7 +141,7 @@ export function mpeg2Frame(n, color = colorAt) {
|
|
|
141
141
|
bits.put(0, 1); // broken_link
|
|
142
142
|
// picture_header (6.2.3)
|
|
143
143
|
bits.startCode(0x00);
|
|
144
|
-
bits.put(0, 10); // temporal_reference (GOP ごとに1枚なので 0)
|
|
144
|
+
bits.put(0, 10); // temporal_reference (GOP ごとに 1 枚なので 0)
|
|
145
145
|
bits.put(1, 3); // picture_coding_type = I
|
|
146
146
|
bits.put(0xffff, 16); // vbv_delay
|
|
147
147
|
bits.put(0, 1); // extra_bit_picture
|
|
@@ -170,7 +170,7 @@ export function mpeg2Frame(n, color = colorAt) {
|
|
|
170
170
|
for (let col = 0; col < mbWidth; col++) {
|
|
171
171
|
bits.put(1, 1); // macroblock_address_increment = 1
|
|
172
172
|
bits.put(1, 1); // macroblock_type = intra
|
|
173
|
-
bits.put(1, 1); // dct_type = 1 (フィールド DCT: 輝度の上2ブロックが上のフィールド、下2つが下)
|
|
173
|
+
bits.put(1, 1); // dct_type = 1 (フィールド DCT: 輝度の上 2 ブロックが上のフィールド、下 2 つが下)
|
|
174
174
|
const [top, cb, cr] = color(col, row, n, 0);
|
|
175
175
|
const [bottom] = color(col, row, n, 1);
|
|
176
176
|
for (let i = 0; i < 4; i++) {
|
package/dist/synth-caption.js
CHANGED
|
@@ -48,7 +48,7 @@ export function management(options = {}) {
|
|
|
48
48
|
...languages.flatMap((code, tag) => [
|
|
49
49
|
(tag << 5) | 0x10, // 言語タグ / DMF 0000 (予約ビット 1)
|
|
50
50
|
...[...code].map((c) => c.charCodeAt(0)),
|
|
51
|
-
((formats[tag] ?? format) << 4) | 0x00, // 書式 (言語ごと。`formats` で替えられる) / TCS 0 (8単位符号) / ロールアップ無し
|
|
51
|
+
((formats[tag] ?? format) << 4) | 0x00, // 書式 (言語ごと。`formats` で替えられる) / TCS 0 (8 単位符号) / ロールアップ無し
|
|
52
52
|
]),
|
|
53
53
|
...u24(units.length),
|
|
54
54
|
...units,
|
|
@@ -87,7 +87,7 @@ export function drcsUnit(code, rows) {
|
|
|
87
87
|
0x41, // DRCS-1 の面 (上位) と
|
|
88
88
|
code, // 符号
|
|
89
89
|
1, // 字体の数
|
|
90
|
-
0x00, // 字体番号 0 / 方式 0000 (2階調)
|
|
90
|
+
0x00, // 字体番号 0 / 方式 0000 (2 階調)
|
|
91
91
|
0, // 階調 - 2
|
|
92
92
|
width,
|
|
93
93
|
height,
|
package/dist/synth.d.ts
CHANGED
|
@@ -119,7 +119,7 @@ export declare function packetize(pid: number, section: Uint8Array, counter?: nu
|
|
|
119
119
|
export declare function stream(...parts: Uint8Array[]): Uint8Array;
|
|
120
120
|
/** PCR を 1 つ運ぶだけのパケット */
|
|
121
121
|
export declare function pcrPacket(pid: number, seconds: number, counter?: number): Uint8Array;
|
|
122
|
-
/** 放送の実時刻 (TDT) を 1
|
|
122
|
+
/** 放送の実時刻 (TDT) を 1 パケットに。データ放送の時刻 (`BmlDecoder` の `currentTime`) はこれから作る */
|
|
123
123
|
export declare function tdtPacket(unixMs: number): Uint8Array;
|
|
124
124
|
/** PAT。サービス ID → PMT の PID */
|
|
125
125
|
export declare function patSection(programs: [number, number][], transportStreamId?: number): Uint8Array;
|
package/dist/synth.js
CHANGED
|
@@ -337,7 +337,7 @@ 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
|
}
|
|
@@ -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
|