MP4Box.js/ISOFile/setSegmentOptions
from MP4Box.js/ISOFile
setSegmentOptions
id
MP4Box.js/トラックIDです。
コードを読むと、この引数をMP4Box.js/getTrackByIdに渡して、対応するMP4Box.js/Box/trakを取得する処理があります
user
userって何?
わからない
ISOFile.jsとISOFile-write.jsで、extractedTrack(s)などのオブジェクトにそのまま代入されているだけ
予想では、サンプルに対するハンドラをonSamples1個しか設定できないので、userの値によってサンプルに対する処理を分けてもらおうという考えだと思う
全然関係ないけどDiscord.jsにはCollectorという概念があってですね
code:setSegmentOptions_1.ts
track.createSegmentCollector({ filter: (trak) => isValidTrak(trak) });
それを真似るとこういうAPIになるんですよ
でもMP4Box.jsは、どれだけSegmentやExtractionなどの追加要求をしても、それを処理できるのは onSegment や onSamples だけ
普通はsetExtractionOptionsを呼び出すときに、抽出されたSampleを処理するハンドラも渡せるようにすべきだと思いますけどね
まあでも現実には、ハンドラは1個しか設定できないので、処理を分ける方法が存在しないわけです
なので、userを使ってうまいこと分けてね、ってことなんじゃないかなあと思います
知らんけど
options
setSegmentOptionsやsetExtractionOptionsでは、次のような処理がされてるんです(コード読んだほうが早いよ)
1. MP4Box.js/getTrackByIdで trak オブジェクトを取得
2. setSegmentOptionsではfragTrack、setExtractionOptionsではextractTrackという名前のオブジェクトを生成する({})
3. fragTrack / extractTrackのプロパティを次のように設定する
id
id 引数をそのまま代入
user
user 引数をそのまま代入
trak
1.で取得した trak オブジェクトを代入
samples
[]に設定
nb_samples
100に設定
rapAlignment(setSegmentOptionsの場合)
trueに設定
4. optionsが渡されていた場合、fragTrack / extractTrack のプロパティを次のように上書きする
nb_samples
fragTrack.nb_samples = nb_samples
rapAlignment(setSegmentOptionsの場合)
fragTrack.rapAlignment = rapAlignmenet
5. 配列に fragTrack / extractTrack を追加
setSegmentOptions() では fragmentedTracks 配列に fragTrackを追加する
setExtractionOptions() では extractedTracks 配列に extractTrack を追加する
要約
optionsを渡すと、fragmentedTracks / extractedTracks に追加されるオブジェクトの一部の値を指定できるよ!