簡體   English   中英

Java mp4parser 片段序列不連續

[英]Java mp4parser fragment sequence discontinuity

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

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

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


日志來自ChunkFragmentM4sBuilderTest.java導致連接的測試輸出test-java-mp4parser.mp4似乎沒問題:

連接 init .mp4 和 fragment .m4s 沒問題

但是,當我使用 VLC 播放附帶的播放列表和片段時,我在日志中看到這些失敗:

mp4: Fragment sequence discontinuity detected 163497124 != 0

當 VLC 播放以下 DASH 播放列表時會發生此錯誤:

這是我的自定義片段構建器類的最新實現和附加說明:

Files.deleteIfExists(Path.of(m4sFilePath));
AACTrackImpl aacTrack=new AACTrackImpl(new FileDataSourceImpl(aacFilePath));
Movie movie=new Movie();
movie.addTrack(aacTrack);
Container mp4file=new ChunkFragmentM4sBuilder(seqNum).build(movie);
FileChannel fc=new FileOutputStream(m4sFilePath).getChannel();
mp4file.writeContainer(fc);
fc.close();

VLC 消息只是一個信息條目,而不是錯誤。 這是預期的,因為起始序列號對應於實時邊緣。

一旦實時邊緣超過所提供的 3 個片段的最后一個片段的時間,您就無法播放該清單。 您需要繼續生成與當前時間相對應的新段。

您可以通過使清單靜態化、添加段列表和修改起始編號來輕松測試這一點。


您的段看起來是自初始化的,但未聲明為自初始化,這會導致問題。 它還浪費帶寬,因為您已經提供了一個初始化段。

作為提醒,您應該:

  • 帶有ftypmoov的 init 段
  • 一系列帶有styp (可選)、 moofmdat的媒體片段

暫無
暫無

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

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