簡體   English   中英

用於創建單個 .m4s 片段的 Java mp4parser

[英]Java mp4parser to create a single .m4s fragment

此用例是一項服務,它手動將一系列未壓縮的 .wav 媒體片段編碼為.m4s片段以通過MPEG-DASH進行廣播,使用ffmpeg將 .wav 壓縮為 .aac 並使用sannies/mp4parser將 aac 音頻組裝成.m4s片段。 m4s媒體片段。

我創建了這個公共 GitHub 項目來完整重現這個問題。

例如,這里是自定義CustomFragmentMp4Builder.java類。

我們能夠使用序列號(索引)指定這個單個 .m4s 片段至關重要,我們將為每個媒體段手動增加該序列號

目標是構建一個包含框類型SegmentTypeBoxSegmentIndexBoxMovieFragmentBox.m4s片段。 作為參考,我使用mp4parser檢查了通過ffmpeg -f hls生成的.m4s片段。 此規范可在此處作為 .yaml 文件使用

我的實現創建了一個沒有錯誤的 MP4。 但是,當單元測試嘗試讀取 ChunkMp4Builder 剛剛寫入臨時文件夾的文件時:

java.lang.RuntimeException: A cast to int has gone wrong. Please contact the mp4parser discussion group (3724673092)
    at org.mp4parser.tools.CastUtils.l2i(CastUtils.java:30)
    at org.mp4parser.support.AbstractBox.parse(AbstractBox.java:97)
    at org.mp4parser.AbstractBoxParser.parseBox(AbstractBoxParser.java:116)
    at org.mp4parser.BasicContainer.initContainer(BasicContainer.java:107)
    at org.mp4parser.IsoFile.<init>(IsoFile.java:57)
    at org.mp4parser.IsoFile.<init>(IsoFile.java:52)
    at com.charneykaye.TestBase.getMp4Boxes(TestBase.java:116)
    at com.charneykaye.CustomFragmentMp4BuilderTest.run(CustomFragmentMp4BuilderTest.java:78)

預期的框類型SegmentTypeBoxSegmentIndexBoxMovieFragmentBox確實出現在輸出中:

預期的框類型 SegmentTypeBox、SegmentIndexBox 和 MovieFragmentBox 確實出現在輸出中

但是,在文件末尾會出現一個未知類型的框:

文件末尾似乎出現了一個未知類型的框。

由於mdat原子大小不正確,您的m4s段無效。

例如在test5-128k-151304042.m4smdat被標記為長度為 16 字節,但末尾有數據,文件大小為 164884。

然后解析器嘗試讀取無效的偏移量。 avc5不是原子而是字符串“Lavc58.54.100”的一部分。 讀取為 3724673100 的長度也是無效的並且大於 32 位整數的最大值,因此無效轉換為 int。

十六進制轉儲


在您的實施中,您有:

ParsableBox moov = createMovieFragmentBox(movie);
isoFile.addBox(moov);
List<SampleSizeBox> stszs = Path.getPaths(moov, "trak/mdia/minf/stbl/stsz");
// ...

protected MovieFragmentBox createMovieFragmentBox(Movie movie) {
    MovieFragmentBox mfb = new MovieFragmentBox();
    // ...
}

這不是moov原子,而是moof 那里沒有stsz ,樣本大小的總和為 0,因此mdat的總計算大小為 16 + 0。

moov應該在初始化段中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM