IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> node js 生成视频链接 -> 正文阅读

[JavaScript知识库]node js 生成视频链接

参考:https://blog.csdn.net/liuyaqi1993/article/details/76560401

Readable Stream:可读流是对可消费的数据源进行的抽象,比如fs.createReadStream
Writable Stream:可写流是对流的目的地(destination)的抽象,destination运允许数据写入,比如fs.createWriteStream
Duplex Stream:双工流是同时实现了 Readable 和 Writable 接口的流,既能写又能读。比如TCP socket
Transform Stream:交换流本质上是一种Duplex流,可以将其看成输入Writable流,输出的是Readable流,也可以称之为“通过流”(through streams)。比如zlib streams。

文件流

var http = require("http");
//文件处理
var fs = require("fs");
// req 路由监听空 res 上下文函数
var server = http.createServer((req, res) => {
  // 公共请求头
  res.writeHead(200, {
    // "Content-Type": "text/html;chaset=UTF-8",
    "Content-Type": "image/png",
    //设置允许跨域的域名,*代表允许任意域名跨域
    "Access-Control-Allow-Origin": "*",
  });
  // 路由监控
  if (req.url == "/fang") {
    res.end("fang");
  } else if (req.url == "/yuan") {
    res.end("yuan");
  } else {
    // res.end("404");
    // res.end("<a href='/fang'>fang</a><br><a href='yuan'>yuan</a>");
    // fs.readFile(path,’binary’, function (err, file) { })的参数多了一个’binary’,以二进制流的方式读取。
    // res.write(file,’binary’); response也以二进制流的方式向浏览器输出。
     fs.readFile("./1.mp4", "binary", function (err, file) {
      if (err) {
        console.log(err);
        return;
      } else {
        res.write(file, "binary");
        res.end();
      }
    });
  }
});
server.listen(3000, "127.0.0.1", (res) => {
  console.log("http://127.0.0.1:3000/");
});

视频流

//文件处理
var fs = require("fs");
var express = require("express");
var router = express();

//服务端
router.get("/video", function (req, res, next) {
  //   let head = { "Content-Type": "video/mp4" };  video.ogv
  let head = { "Content-Type": "video/*" };
  //需要设置HTTP HEAD
  res.writeHead(200, head);
  //使用pipe
  fs.createReadStream("./1.mp4").pipe(res);
});
router.listen(3000);

分段流

//文件处理
var fs = require("fs");
var express = require("express");
var router = express();

//服务端
router.get("/video", function (req, res, next) {
  let path = "./1.mp4";
  let stat = fs.statSync(path);
  let fileSize = stat.size;
  let range = req.headers.range;
  // fileSize 3332038

  if (range) {
    //有range头才使用206状态码

    let parts = range.replace(/bytes=/, "").split("-");
    let start = parseInt(parts[0], 10);
    let end = parts[1] ? parseInt(parts[1], 10) : start + 999999;
    // end 在最后取值为 fileSize - 1
    end = end > fileSize - 1 ? fileSize - 1 : end;

    let chunksize = end - start + 1;
    let file = fs.createReadStream(path, { start, end });
    let head = {
      "Content-Range": `bytes ${start}-${end}/${fileSize}`,
      "Accept-Ranges": "bytes",
        "Content-Length": chunksize,
      "Content-Type": "video/mp4",
    };
    res.writeHead(206, head);
    file.pipe(res);
  } else {
    let head = {
     "Content-Length": fileSize,
      "Content-Type": "video/mp4",
    };
    res.writeHead(200, head);
    fs.createReadStream(path).pipe(res);
  }
});

router.listen(3000);

前端


<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">


<head>
    <style>
        body {
            background: black;
            color: #CCCCCC;
        }

        #c2 {
            background-image: url('foo.png');
            background-repeat: no-repeat;
        }

        div {
            float: left;
            border: 1px solid #444444;
            padding: 10px;
            margin: 10px;
            background: #3B3B3B;
        }
    </style>

</head>

<body>
    <div>
        <video id="video" src="http://127.0.0.1:3000/video" controls="true" />
    </div>
    <div>
        <canvas id="c1" width="160" height="96" />
        <canvas id="c2" width="160" height="96" />
    </div>
    <script src="index.js"></script>
    <script>
        processor.doLoad()
    </script>
</body>

</html>
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-30 12:28:21  更:2021-10-30 12:30:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/12 8:54:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码