【问题标题】:FFMPEG HLS streaming and transcoding on the fly to HTML player - video duration changes while transcodingFFMPEG HLS 流式传输和动态转码到 HTML 播放器 - 转码时视频持续时间发生变化
【发布时间】:2019-08-19 22:31:45
【问题描述】:

我正在尝试制作视频流服务器并直接从网络浏览器观看视频。这个想法是让服务器从远程服务器流式传输视频,在本地服务器上用不同的音频格式转码,然后立即流式传输到客户端(这是我需要它运行的特定方式)。 这是我当前使用的 FFMPEG 代码:

ffmpeg -i "url" -c:v copy -c:a aac -ac 2 -f hls -hls_time 60 -hls_playlist_type event -hls_flags independent_segments out.m3u8

HLS 流通过 hls.js 附加到 HTML 播放器,并且可以正常工作。但是,视频持续时间在视频被转码时不断变化。我曾尝试使用 $('video').duration = 120; 这样的 JS 更改视频持续时间,但没有成功。

如何让播放器显示视频文件持续时间而不是流当前转码时间?

我也计划实施视频搜索,但我一无所知。目前的思路是向服务器发送搜索时间,终止ffmpeg,从特定时间开始。但是,我认为播放器可能会在加载时卡住,如果不重新加载就无法开始播放。

【问题讨论】:

  • 您找到解决方案了吗?在这一点上,我想我可能必须构建自己的视频控件。

标签: html video ffmpeg http-live-streaming hls.js


【解决方案1】:

Ffmpeg 无法在它们在磁盘上之前将段写入清单。如果您不希望在媒体准备期间出现“live like”行为,则需要等待 ffmpeg 完成。

【讨论】:

  • 还有其他选择吗?例如,webtor.io 使用 hls 流式传输视频并正确显示持续时间。我不知道他们使用哪种方法进行即时转码。
  • 关于如何做到这一点的答案对于单个堆栈溢出帖子来说太长了。它涉及在文件中定位帧计时,将它们转换为文件偏移量,将其转换为 .torrent 文件中的片段,并在浏览器中以 javascript 动态重新打包媒体。它可以发送媒体缓冲区的持续时间并禁用搜索。
  • 我知道他们使用 hls 并在服务器上进行转码。我仍然需要解决这个问题。如果你知道答案,我很乐意阅读它
  • 正如我之前所说,答案对于单个 stackoverflow 帖子来说太复杂了。即时转码是一个非常困难的问题。特别是对于音频。我在 mux.com 创建了即时转码器。它有数千行代码。
猜你喜欢
  • 2020-09-06
  • 2013-04-21
  • 1970-01-01
  • 1970-01-01
  • 2017-07-15
  • 1970-01-01
  • 2020-01-24
  • 2011-06-29
  • 2021-08-04
相关资源
最近更新 更多