Greasy Fork is available in English.

Discussions » تطوير

想问一下各位大佬一个HLS的问题

§
Posted: 17-07-2021

如题,想问一下那些HLS流式传输视频(我也不懂,反正就是m3u8了,很多ts文件,我是小白),我可以在前端页面拦截到这些ts文件的响应内容,请问一下各位大佬,有纯前端的方法来把这些内容组合起来变为一个大的文件转为BLOB生成一个下载链接吗?找了很多都是要ffmpeg或者nodejs来做的。

§
Posted: 27-07-2021

合并和原生下载是很简单的问题,但是这会吃很多内存,因为你所有的拼接都在内存里完成,要拼完了才能一起下载,而浏览器对内存占用是有一定限制的。 基本API就一个

const blob = new Blob([blob1, blob2, blob3, ...]);
const a = document.createElement('a');
a.href = URL.createObjectURL(blob);
a.download = 'download.ts';
a.click();

虽然不知道你拦截到的是什么东西,但是一般的流和XHR返回都可以简单转化为blob,参考工程这里有一个,https://github.com/liqi0816/bilitwin 虽然总体结构挺大而且有些年头没更新了,不过blob转换和拼接原理就那样。里面也有flv的拼接,不过ts应该是不需要解析的,直接丢到数组里创建新的可以

用ffmpeg主要是因为它可以直接输出到文件流不用吃一堆内存也不受浏览器限制

§
Posted: 30-07-2021

合并和原生下载是很简单的问题,但是这会吃很多内存,因为你所有的拼接都在内存里完成,要拼完了才能一起下载,而浏览器对内存占用是有一定限制的。
基本API就一个

const blob = new Blob([blob1, blob2, blob3, ...]);
const a = document.createElement('a');
a.href = URL.createObjectURL(blob);
a.download = 'download.ts';
a.click();

虽然不知道你拦截到的是什么东西,但是一般的流和XHR返回都可以简单转化为blob,参考工程这里有一个,https://github.com/liqi0816/bilitwin 虽然总体结构挺大而且有些年头没更新了,不过blob转换和拼接原理就那样。里面也有flv的拼接,不过ts应该是不需要解析的,直接丢到数组里创建新的可以

用ffmpeg主要是因为它可以直接输出到文件流不用吃一堆内存也不受浏览器限制

非常感谢您,我大概了解了。

Post reply

تسجيل الدخول إلى مرحلة ما بعد الرد.