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