Javascript 如何在浏览器中将m3u8 URL转换为mp4可下载文件?
我正在写一个从网站下载视频的扩展。该网站有Javascript 如何在浏览器中将m3u8 URL转换为mp4可下载文件?,javascript,google-chrome-extension,mp4,converters,m3u8,Javascript,Google Chrome Extension,Mp4,Converters,M3u8,我正在写一个从网站下载视频的扩展。该网站有mp4文件和m3u8文件。我已经实现了下载直接mp4文件的部分。我坚持将m3u8文件转换为mp4。我尝试了很多js软件包,但有很多依赖项,即使在使用browserfy后也失败了 当前popup.js文件 函数加载视频列表(回调){ chrome.storage.sync.get(['courseID'],函数(结果){ 如果(result.courseID!=“未定义”){ $.ajax({ 键入:“GET”, url:“http://localhost
mp4
文件和m3u8
文件。我已经实现了下载直接mp4
文件的部分。我坚持将m3u8
文件转换为mp4
。我尝试了很多js软件包,但有很多依赖项,即使在使用browserfy
后也失败了
当前popup.js文件
函数加载视频列表(回调){
chrome.storage.sync.get(['courseID'],函数(结果){
如果(result.courseID!=“未定义”){
$.ajax({
键入:“GET”,
url:“http://localhost:80/get_videos_list/“+result.courseID,
跨域:是的,
成功:功能(响应){
document.getElementById(“加载图标”).style.display='none';
document.getElementById(“视频列表”).style.display='block';
document.getElementById(“videos_list”).style.padding='10px';
对于(变量i=0;i
handleDownloadButton
函数创建用于下载直接mp4
文件的按钮。我需要实现一个类似的函数,名为handleDownloadB
unction loadvideoList(callback){
chrome.storage.sync.get(['courseID'], function(result) {
if(result.courseID != 'undefined'){
$.ajax({
type: 'GET',
url: "http://localhost:80/get_videos_list/"+result.courseID,
crossDomain: true,
success: function(response) {
document.getElementById("loading_icon").style.display='none';
document.getElementById("videos_list").style.display='block';
document.getElementById("videos_list").style.padding='10px';
for(var i = 0; i < response.video_list.length; i++){
if(response.video_list[i].type == 'mp4'){
handleDownloadButton(response.video_list[i]);
}else{
// ************ HERE ***************
handleDownloadButton-m3u8Tomp4(response.video_list[i].video_url)
}
}
},
error: function (err) {
alert("unexpected error occured: "+err.code);
console.log(err);
}
});
}else{
document.getElementById("videos_list").style.display='none';
document.getElementById("videos_list").style.padding='0';
}
});
}
function handleDownloadButton(json_vid){
var node = document.createElement("DIV");
// node.style.marginBottom = "5px"
var t = document.createElement('p');
t.textContent = json_vid.file_name;
t.style.width ="240px";
node.appendChild(t);
node.style.padding = "5px";
var downloadBtn = document.createElement("BUTTON");
downloadBtn.style.cssFloat = "right";
downloadBtn.className = "btn btn-primary btn-sm download_btn";
downloadBtn.innerHTML = "Download";
// downloadBtn.value = json_vid.video_url;
node.appendChild(downloadBtn);
downloadBtn.id = json_vid.video_id;
document.getElementById("videos_list").appendChild(node);
var progress_bar = document.createElement("DIV");
progress_bar.className = "progress_container";
node.appendChild(progress_bar);
var moving_bar = document.createElement("DIV");
moving_bar.className = "progress_bar";
progress_bar.appendChild(moving_bar);
moving_bar.id = json_vid.video_id+"bar";
$(function(){
$(`#${json_vid.video_id}`).click(function(){
$(`#${json_vid.video_id}`).attr("disabled", true);
// alert(json_vid.video_url);
var that = this;
var page_url = json_vid.video_url;
var req = new XMLHttpRequest();
req.open("GET", page_url, true);
// req.withCredentials = true;
req.addEventListener("progress", function (evt) {
if(evt.lengthComputable) {
var percentComplete = evt.loaded / evt.total;
// document.getElementById("download_stat").innerHTML = percentComplete;
// console.log(percentComplete);
document.getElementById(json_vid.video_id+"bar").style.width = `${percentComplete*100}%`;
document.getElementById(json_vid.video_id).textContent = `${(percentComplete*100).toFixed(2)}%`;
}
}, false);
req.responseType = "blob";
req.onreadystatechange = function () {
if (req.readyState === 4 && req.status === 200) {
var filename = $(that).data('filename');
if (typeof window.chrome !== 'undefined') {
// Chrome version
$(`#${json_vid.video_id}`).attr("disabled", false);
$(`#${json_vid.video_id}`).attr("onclick", "").unbind("click");
document.getElementById(json_vid.video_id).textContent = 'Save';
$(function(){
$(`#${json_vid.video_id}`).click(function(){
// alert("download is ready");
var link = document.createElement('a');
// link.text = "download is ready";
// document.getElementById("videos_list").appendChild(link);
link.href = window.URL.createObjectURL(req.response);
link.download = json_vid.file_name;
link.click();
});
});
} else if (typeof window.navigator.msSaveBlob !== 'undefined') {
// IE version
var blob = new Blob([req.response], { type: 'application/force-download' });
window.navigator.msSaveBlob(blob, filename);
} else {
// Firefox version
var file = new File([req.response], filename, { type: 'application/force-download' });
window.open(URL.createObjectURL(file));
}
}
};
req.send();
});
});
}