此用例是一种服务,它手动地将一系列未压缩的.wav媒体段编码成.m4s片段,通过MPEG-破折号进行广播,使用ffmpeg将.wav压缩到.aac,并使用sannies/mp4解析器将aac音频组装成.m4s媒体片段。
我创建这个公共GitHub项目是为了完整地再现这个问题。
例如,下面是定制的ChunkFragmentM4sBuilder.java类。
这个日志来自ChunkFragmentM4sBuilderTest.java,它导致连接的测试输出test-java-mp4parser.mp4似乎没有问题:

但是,当我使用VLC播放附带的播放列表和片段时,我会在日志中看到以下故障:
mp4: Fragment sequence discontinuity detected 163497124 != 0当VLC播放以下破折号播放列表时,会发生此错误:
下面是我的自定义片段构建器类的最新实现和其他注意事项:
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();发布于 2021-10-23 15:20:01
VLC消息只是一个信息条目,而不是一个错误。这是预期的,因为起始序列号对应于活边。
你不能回放该显化,一旦现场边缘过去的时间,最后一段提供的3。您需要继续生成与当前时间相对应的新段。
您可以通过使清单静态、添加段列表和修改开始号来轻松测试这一点。
您的段看起来是自初始化的,但没有这样声明,这将导致问题。它还浪费带宽,因为您已经提供了初始化段。
作为提醒,你应该有:
ftyp和moov的init段styp (可选)、moof、mdat的一系列媒体片段https://stackoverflow.com/questions/69686039
复制相似问题