本文介紹了Java mp4解析器片段序列不連續的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
此使用案例是一項服務,它手動將一系列未壓縮的.wav媒體段編碼為.m4s片段以通過mpeg-dash進行廣播,并使用ffmpeg將.wav壓縮為.aac,并使用sannies/mp4parser將AAC音頻組裝為.m4s媒體片段。
我創建了this public GitHub project以完整復制該問題。
例如,下面是自定義ChunkFragmentM4sBuilder.java類。
這log是
來自ChunkFragmentM4sBuilderTest.java,其結果是
連接的測試輸出test-java-mp4parser.mp4顯示為
沒事:
但是,當我使用VLC播放發送的播放列表和片段時,我在日志中看到以下故障:
mp4: Fragment sequence discontinuity detected 163497124 != 0
當VLC播放以下短劃線播放列表時發生此錯誤:
test5.mpd
test5-128k-163497124.m4s
test5-128k-163497125.m4s
test5-128k-163497126.m4s
test5-128k-IS.mp4
下面是我的自定義片段生成器類的最新實現和其他注意事項:
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();
ChunkFragmentM4sBuilderTest.log.txt
test5-128k-IS.mp4
test-java-mp4parser.mp4
vlc
推薦答案消息只是一個信息條目,不是錯誤。這是預期的,因為起始序列號對應于活動邊緣。
一旦實時邊緣超過了所提供的3個片段中的最后一個片段的時間,您就不能播放該清單。您需要繼續生成與當前時間對應的新段。
您可以通過將清單設置為靜態、添加段列表并修改起始編號來輕松測試此功能。
您的段看起來是自初始化的,但并未聲明為自初始化,這將導致問題。它還會浪費帶寬,因為您已經提供了一個初始化段。
提醒您:
包含ftyp
和moov
的初始化段
一系列styp
(可選)、moof
、mdat
這篇關于Java mp4解析器片段序列不連續的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,