首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用FFmpeg实现HLS

用FFmpeg实现HLS
EN

Stack Overflow用户
提问于 2015-08-10 20:14:38
回答 1查看 8.2K关注 0票数 2

我试图使用FFmpeg来实现HLS,用于转码+分段,但是在过去的一周里,我一直面临着一些困扰我的问题。

问题

Webserver目前接收正在录制的实时MP4片段,需要处理转码和分段。

当接收到mp4片段时,需要对它们进行编码。然后分割。如果我运行分段器(不管是ffmpeg还是apple纵隔器),那么每个mp4片段都会被单独当作VOD来处理,而且我无法将它们集成为更大的实时事件实现的一部分。

我想到了一个解决方案,每当我收到一个mp4片段时,我首先使用fmpeg将其与前面的片段连接起来,形成更大的mp4,然后将其传递给HLS。这也不起作用,因为每一次都必须重新分割整个流,而现有的TS片段被类似但在时间上移动的新片段所取代。

实现1

-re -i fragmentX.mp4 -b:v 118 k -b:a 32k -vcodec复制-preset:v非常快的-acodec aac -strict -2 -ac 2 -f mpegts -y fragmentX.ts

我自己管理m3u8清单,删除旧片段并追加新片段。

在验证流时,我发现它与EXT-X-DISCONTINUITY标记堆叠在一起,使流无法观察。

实现2

首先将最新片段与overall.mp4合并

-i "concat:newfragment.mp4|existing.mp4“-c复制overall.mp4

然后将该组合传递给ffmpeg进行HLS分割。

ffmpeg -re -i overall.mp4 -ac 2 -r 20 -vcodec libx264 -b:v 318 k -preset:v超高速-acodec aac -strict -2 -b:a 32k -hls_time 2 -hls_list_size 3 -hls_allow_cache 0 -hls_base_url /User/JosephKalash/Desktop/test/350/ -hls_segment_filename‘350/片段%03d.ts’-hls_flags -hls_segment_filename 350/index.m3u8

级联不是完美的,在那些碎片应该被缝合的地方有明显的小故障。分段替换旧的片段,并且每次调用ffmpeg时都重写清单,就好像它是一个新的HLS流一样。

我想不出怎样才能让它正常工作。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-06 23:13:16

通过依赖nginx rtmp模块来解决,这证明了适合于上面的实现。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31928333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档