@danything/arib 2.3.0 → 2.3.1

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 CHANGED
@@ -9,7 +9,8 @@
9
9
  - ARIB STD-B24 の 8 単位符号 (JIS X 0213 の 1 面・2 面まで) と ARIB 外字を文字列にする (`aribtext`、`aribtext-gaiji`)
10
10
  - 字幕は STD-B24 の字幕文を、字の置き場所まで決めた JSON にする (`b24caption`、形式は `caption-text`)
11
11
  - データ放送は DSM-CC のカルーセルからモジュールとファイルを組み立てる (`dsmcc`、`multipart`、`bml`、形式は `bml-protocol`)
12
- - Hybridcast の AIT を読む (`ait`)。1 つの局だけを抜き出す (`service-filter`)
12
+ - Hybridcast の AIT を読む (`ait`)
13
+ - 1 つの局だけを TS のまま抜き出す (`service-filter`)
13
14
  - 4K の放送 (MMT/TLV。ARIB STD-B32・B60) の土台として、TLV パケットの切り出し (`tlv`)、IP とヘッダー圧縮した IP から UDP の中身を取り出す処理 (`tlv-ip`)、MMTP のヘッダーとスクランブルの印、信号メッセージの分割と集約 (`mmtp`)
14
15
  - 4K の放送の表は、TLV-NIT・PLT・MPT・MH-SDT・MH-TOT (`mmt-si`)。局の一覧と、局ごとの CA_system_id (MPT のアクセス制御記述子) をそろえて読む `TlvServiceReader` もここ (TS の `psi` の `ServiceReader` に当たる)。番組表の MH-EIT は TS と同じ形式の番組にする (`mh-eit`)。1 つの局だけを TLV のまま抜き出す (`mmt-service-filter`)
15
16
  - 4K の放送の映像 (HEVC)・音声 (AAC)・字幕 (TTML) のアクセスユニットを、MPT の記述子から付けた PTS・DTS (90 kHz) と一緒に取り出す (`mmt-media`)。音声は LATM を外した AAC のフレームと AudioSpecificConfig、映像は NAL ユニットの並び。字幕の TTML は、TS の字幕と同じ字幕の文字の配置にする (`ttml`)。スクランブルの復号は無い
@@ -42,7 +42,7 @@ export interface MpuExtendedTimestamp {
42
42
  * MPU 拡張タイムスタンプ記述子を読む。次のものは DTS を進められないので、空を返す (その MPU は時刻が分からないものとして捨てる)
43
43
  *
44
44
  * - timescale を持たないもの (MPU のメタデータの mdhd を見る、の意味)。放送ではメタデータを送らない
45
- * - pts_offset を持たないもの (pts_offset_type 0)。コマの長さが分からない
45
+ * - pts_offset を持たないもの (pts_offset_type 0) と、予約の種類 3。コマの長さが分からない
46
46
  */
47
47
  export declare function parseMpuExtendedTimestamps(body: Uint8Array): MpuExtendedTimestamp[];
48
48
  /** アクセスユニットの時刻 (90 kHz) */
package/dist/mmt-media.js CHANGED
@@ -59,13 +59,13 @@ export function parseMpuTimestamps(body) {
59
59
  * MPU 拡張タイムスタンプ記述子を読む。次のものは DTS を進められないので、空を返す (その MPU は時刻が分からないものとして捨てる)
60
60
  *
61
61
  * - timescale を持たないもの (MPU のメタデータの mdhd を見る、の意味)。放送ではメタデータを送らない
62
- * - pts_offset を持たないもの (pts_offset_type 0)。コマの長さが分からない
62
+ * - pts_offset を持たないもの (pts_offset_type 0) と、予約の種類 3。コマの長さが分からない
63
63
  */
64
64
  export function parseMpuExtendedTimestamps(body) {
65
65
  if (body.length < 5 || (body[0] & 0x01) === 0)
66
66
  return [];
67
67
  const offsetType = (body[0] >> 1) & 0x03;
68
- if (offsetType === 0)
68
+ if (offsetType !== 1 && offsetType !== 2)
69
69
  return [];
70
70
  const timescale = u32(body, 1);
71
71
  let at = 5;
@@ -456,11 +456,15 @@ export class MmtMediaReader {
456
456
  // 時刻の無いもの (MPU 全体で 1 つ) は sample_number が無いので 0 とする
457
457
  const sample = timed ? u32(unit, 4) : 0;
458
458
  const body = unit.subarray(timed ? TIMED_HEADER : ITEM_HEADER);
459
- if (fragmentation === WHOLE || fragmentation === FIRST) {
460
- if (track.sample !== null && sample !== track.sample)
461
- yield* this.finish(track);
462
- track.sample = sample;
459
+ /*
460
+ * sample_number が変わったら、途中の断片でも前のアクセスユニットを閉じる。先頭の断片が欠けたアクセスユニットも
461
+ * 1 つと数えないと、MPU の何番目か (`index`) がずれて、その MPU の残りのコマに違う時刻が付く
462
+ */
463
+ if (track.sample !== null && sample !== track.sample) {
464
+ yield* this.finish(track);
465
+ track.fragment = null;
463
466
  }
467
+ track.sample = sample;
464
468
  // 中身は届いたチャンクの一部を指すので、持ち越すものはコピーする (`TlvStream`)
465
469
  if (fragmentation === WHOLE) {
466
470
  this.keep(track, body.slice());
package/dist/ttml.js CHANGED
@@ -10,7 +10,7 @@
10
10
  * 縦書き・アニメーション (set) は読まない
11
11
  */
12
12
  import { CAPTION_TEXT_VERSION, } from "./caption-text.js";
13
- import { CLOCK } from "./mmt-media.js";
13
+ import { CLOCK } from "./pes.js";
14
14
  const ENTITIES = {
15
15
  lt: "<",
16
16
  gt: ">",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@danything/arib",
3
- "version": "2.3.0",
3
+ "version": "2.3.1",
4
4
  "description": "日本のデジタル放送 (ARIB) の TS と MMT/TLV を読む: PSI・PES・EIT・ARIB の文字・字幕・データ放送、TLV・MMTP・MMT-SI・MH-EIT",
5
5
  "license": "MIT",
6
6
  "repository": {