当前位置: 首页 > 知识库问答 >
问题:

用ffmpeg处理mkv文件时的流式传输

常朗
2023-03-14
    null
    null

但问题是我想以编程的方式完成这个任务。

我实际上想做的是:

步骤

但正如我所提到的,Firefox对MKV说不。

所以我尝试了hls的东西,但我不能完全得到命令来生成流,也不能在飞行中播放。

我是在命令行上开始的

ffmpeg -i ../stream.mkv -hls_list_size 0 -acodec copy -vcodec copy file.m3u8
<html>
    <title>Welcome</title>
    <body>
        <script src="./hls.js"></script>
        <video id="video" width="400" controls></video>
        <script>
            var video = document.getElementById('video');
            if(Hls.isSupported()) {
                var hls = new Hls();
                hls.loadSource('file.m3u8');
                hls.attachMedia(video);
                hls.on(Hls.Events.MANIFEST_PARSED,function() {
                    video.play();
                });
            } else if (video.canPlayType('application/vnd.apple.mpegurl')) {
                video.src = 'file.m3u8';
                video.addEventListener('loadedmetadata',function() {
                    video.play();
                });
            }
        </script>
    </body>
</html>

所以我想再做一次

  • 我要请求服务器播放视频文件
  • 它生成一个子进程FFmpeg,该进程执行代码转换
  • 向客户端发送流
  • 客户端应该能够搜索到底,并且应该播放该内容。

共有1个答案

夏嘉德
2023-03-14

这个问题其实很难。Plex之所以能够作弊,是因为文件是专门为每个用户打包的,而且在很大程度上,Plex控制着播放器。

Plex的基本工作方式:

对该文件进行预分析,并生成完整的清单。代码转换在文件开始时被启动,并在本地缓存段。如果发生寻道(请求的段未在本地缓存),则取消代码转换,并在请求的段的偏移量处开始新的打开,播放机使其缓存的任何段无效。

 类似资料:
  • 问题内容: 在寻找了一个不错的库来用Java播放视频之后,我感到很困惑。周围的每个人都在尖叫着不要使用JMF,因为它已经过时,旧了并且需要用户安装它。其他替代方法(例如VLCJ)如果可行,则看起来不错,但仍然相对不稳定并且依赖大量的本机代码,并且在处理方面DVD,好像在免费图书馆中可以找到的灰尘! 当前选项: 现在JavaFX 2势头强劲,这是我一直在认真考虑的问题(因此在这里提出了我的问题),但

  • 你想处理一个由用户上传的文件,比如你正在建设一个类似Instagram的网站,你需要存储用户拍摄的照片。这种需求该如何实现呢? 要使表单能够上传文件,首先第一步就是要添加form的enctype属性,enctype属性有如下三种情况: application/x-www-form-urlencoded 表示在发送前编码所有字符(默认) multipart/form-data 不对字符

  • 问题内容: 我有一个200MB的文件,想通过下载提供给用户。但是,由于我们希望用户仅下载一次此文件,因此我们这样做: 强制下载。但是,这意味着整个文件必须加载到内存中,这通常不起作用。我们如何以每块kb的速度将文件流式传输给他们? 问题答案: 尝试这样的事情

  • 我正在发送视频帧的形式的JPEG图像到我的服务器上的RMTP流。在服务器端,我希望将流(ip+端口)连接到ffmpeg,这样它就可以从流中获取图像,并从中创建视频流。 实际上,我的服务器正在监听一个IP和端口来接收帧。这部分完成了。我遇到的问题是如何使用FFMPEG将这些帧转换成视频流。谁能告诉我如何做到这一点吗?我知道是我应该使用的,但我在Google上没有找到它的语法和文档。

  • 问题内容: 我最近刚开始玩go,所以我还是菜鸟,对不起,如果我犯了太多错误。我已经尝试解决了很长时间,但我只是不明白发生了什么。在我的main.go文件中,我有一个主要功能: 处理程序函数如下所示: 我知道这不是服务网站的最佳方法提交功能如下所示: 问题是,当执行Submit 函数时,它是并且是一个空字符串,如果r.FormFile返回以下错误,它将继续执行直到第一个: 我不明白为什么r.Meth

  • 用Flask处理非常大的文件上传(1 GB+)的最佳方式是什么? 我的应用程序基本上接受多个文件,为它们分配一个唯一的文件号,然后根据用户选择的位置将其保存在服务器上。 我们如何运行文件上传作为一个后台任务,这样用户就不会有浏览器旋转1小时,而是可以立即进入下一页? null