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
相关文章