每隔几秒钟,我就会从服务器接收到一段很长的音频文件。我想对这些块进行分段,并创建一个m3u8播放列表来在浏览器中播放音频。
我可以创建m3u8文件,并每隔几秒钟将片段附加到该文件,直到我收到最后一个块,该文件可以在浏览器中播放。问题是,ffmpeg向m3u8文件添加了#EXT-X-DISCONTINUITY标签,这会给音频添加短暂的静默时间,并且浏览器中的播放听起来并不流畅。
有没有办法告诉ffmpeg,我所有的独立文件实际上属于同一个位置(相同的源代码和编码),并且不再添加#EXT-X-DISCONTINUITY标记?或者,有没有办法避免这个标签添加的短静默时间?或者,有没有其他方法可以尝试从独立文件创建流畅的音频流?
我的最终m3u8文件:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:2
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:EVENT
#EXTINF:1.792000,
http://localhost:9000/aacf6dc4-9f3e-4f76-86b6-3e0f01a65d88000000.ts
#EXT-X-DISCONTINUITY
#EXTINF:1.792000,
http://localhost:9000/aacf6dc4-9f3e-4f76-86b6-3e0f01a65d88000001.ts
...
#EXT-X-DISCONTINUITY
#EXTINF:1.792000,
http://localhost:9000/aacf6dc4-9f3e-4f76-86b6-3e0f01a65d88000006.ts
#EXT-X-ENDLIST我的ffmpeg命令:
# create the playlist
ffmpeg -y -i <chunk.flac> -hls_playlist_type event -hls_base_url http://localhost:9000/ -hls_segment_filename <segment> -hls_time 2 -hls_flags omit_endlist playlist.m3u8
# append to playlist
ffmpeg -y -i <chunk.flac> -hls_playlist_type event -hls_base_url http://localhost:9000/ -hls_segment_filename <segment> -hls_time 2 -hls_flags omit_endlist+append_list playlist.m3u8
# finish the playlist
ffmpeg -y -i <chunk.flac> -hls_playlist_type event -hls_base_url http://localhost:9000/ -hls_segment_filename <segment> -hls_time 2 -hls_flags append_list playlist.m3u8发布于 2020-08-26 22:19:24
我看了libavformat/hlsenc.c的代码
if (hls->flags & HLS_APPEND_LIST) {
parse_playlist(s, vs->m3u8_name, vs);
vs->discontinuity = 1;只要使用append_list,就会插入一个不连续点。除非您添加一个选项并修补#EXT-X-DISCONTINUITY -我认为您无法避免使用ffmpeg标记。
但是您可以使用一个简单的命令行对播放列表进行后处理:
grep -v "#EXT-X-DISCONTINUITY" playlist.m3u8 > temp; mv temp playlist.m3u8https://stackoverflow.com/questions/63592822
复制相似问题