rtsp2web 1.1.1 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -6,8 +6,12 @@
6
6
  [refer](./refer) 是一个小的独立的 `demo` 程序,学习它对你有很大的帮助(都有注释的)。
7
7
 
8
8
  # how to use
9
- `npm i rtsp2web`
9
+ 1、 安装依赖
10
+ ```
11
+ npm i rtsp2web
12
+ ```
10
13
 
14
+ 2、 创建一个新建 `js` 文件(例如:`main.js`)
11
15
  ```js
12
16
  // main.js
13
17
  const RTSP2web = require('rtsp2web')
@@ -19,8 +23,9 @@ new RTSP2web({
19
23
  })
20
24
  ```
21
25
 
22
- 运行 `node main.js`
26
+ 3、 运行 `node main.js`,启动视频流转码服务
23
27
 
28
+ 4、 在页面中播放视频
24
29
  ```html
25
30
  // index.html
26
31
  <!DOCTYPE html>
@@ -41,19 +46,20 @@ new RTSP2web({
41
46
  var rtsp2 = 'rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mp4'
42
47
  window.onload = () => {
43
48
  // 将rtsp视频流地址进行btoa处理一下
44
- new JSMpeg.Player("ws://localhost:9999/flv?url="+btoa(rtsp1), {
49
+ new JSMpeg.Player("ws://localhost:9999/rtsp?url="+btoa(rtsp1), {
45
50
  canvas : document.getElementById("canvas_1")
46
51
  })
47
- new JSMpeg.Player("ws://localhost:9999/flv?url="+btoa(rtsp2), {
52
+ new JSMpeg.Player("ws://localhost:9999/rtsp?url="+btoa(rtsp2), {
48
53
  canvas : document.getElementById("canvas_2")
49
54
  })
50
55
  }
51
56
  </script>
52
57
  </html>
53
58
  ```
54
- 打开 `index.html`。
55
59
 
56
- 详情参考例子:[https://github.com/Neveryu/rtsp2web/tree/master/example](https://github.com/Neveryu/rtsp2web/tree/master/example)
60
+ > PS: 在页面中播放视频,需要依赖 `jsmpeg.js` 工具包
61
+
62
+ 详细参考例子:[https://github.com/Neveryu/rtsp2web/tree/master/example](https://github.com/Neveryu/rtsp2web/tree/master/example)
57
63
 
58
64
  # donate
59
65
  If you think rtsp2web help you. maybe you can donate a litter. :beers::beers:
package/dist/rtsp2web.js CHANGED
@@ -146,6 +146,10 @@ function _createSuper(Derived) {
146
146
  };
147
147
  }
148
148
 
149
+ function _readOnlyError(name) {
150
+ throw new TypeError("\"" + name + "\" is read-only");
151
+ }
152
+
149
153
  function _toConsumableArray(arr) {
150
154
  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
151
155
  }
@@ -4762,7 +4766,7 @@ WebSocket.WebSocketServer = WebSocket.Server;
4762
4766
 
4763
4767
  var ws = WebSocket;
4764
4768
 
4765
- var version = "1.1.1";
4769
+ var version = "2.2.0";
4766
4770
 
4767
4771
  /*!
4768
4772
  * name: main.js
@@ -4780,7 +4784,13 @@ var child = require('child_process');
4780
4784
  var events = require('events');
4781
4785
 
4782
4786
  var url = require('url');
4783
- var WebSocketServer = ws.Server;
4787
+ var WebSocketServer = ws.Server; // 默认的ffmpeg路径(一般正常安装的ffmpeg,名称(路径)是:ffmpeg)
4788
+
4789
+ var FFmpegPath = 'ffmpeg'; // 默认的端口
4790
+
4791
+ var defaultPort = 9999; // 默认的视频视口框架大小
4792
+
4793
+ var videoSize = '1920x1080';
4784
4794
  /**
4785
4795
  * 用于创建一个新的视频转码流类
4786
4796
  */
@@ -4790,6 +4800,7 @@ var Mpeg2Muxer = /*#__PURE__*/function (_events$EventEmitter) {
4790
4800
 
4791
4801
  var _super = _createSuper(Mpeg2Muxer);
4792
4802
 
4803
+ // 额外的 ffmpeg 参数
4793
4804
  function Mpeg2Muxer(options) {
4794
4805
  var _this;
4795
4806
 
@@ -4806,7 +4817,7 @@ var Mpeg2Muxer = /*#__PURE__*/function (_events$EventEmitter) {
4806
4817
  _defineProperty(_assertThisInitialized(_this), "inputStreamStarted", false);
4807
4818
 
4808
4819
  _this.options = options;
4809
- _this.ffmpegPath = options.ffmpegPath;
4820
+ _this.ffmpegPath = options.ffmpegPath || FFmpegPath;
4810
4821
  _this.url = options.url;
4811
4822
  _this.ffmpegOptions = options.ffmpegOptions;
4812
4823
 
@@ -4837,6 +4848,13 @@ var Mpeg2Muxer = /*#__PURE__*/function (_events$EventEmitter) {
4837
4848
  this.stream = child.spawn(this.ffmpegPath, this.spawnOptions, {
4838
4849
  detached: false
4839
4850
  });
4851
+ this.stream.on('error', function (code, signal) {
4852
+ console.error('启动ffmpeg时出错,请确保你安装了ffmpeg,然后检查路径或者命令参数');
4853
+ });
4854
+ this.stream.on('close', function (code, signal) {
4855
+ console.log('ffmpeg关闭,code:', code);
4856
+ return _this2.emit('exitWithError');
4857
+ });
4840
4858
  this.inputStreamStarted = true;
4841
4859
  this.stream.stdout.on('data', function (data) {
4842
4860
  return _this2.emit('mpeg2data', data);
@@ -4910,7 +4928,7 @@ var Channel = /*#__PURE__*/function () {
4910
4928
  "-stats": "",
4911
4929
  // 没有必要值的选项使用空字符串
4912
4930
  "-r": 20,
4913
- "-s": "1920x1080",
4931
+ "-s": videoSize,
4914
4932
  "-b:v": "2000k"
4915
4933
  },
4916
4934
  url: this.config.url,
@@ -4918,6 +4936,11 @@ var Channel = /*#__PURE__*/function () {
4918
4936
  });
4919
4937
  this.mpeg2Muxer.stream = this.mpeg2Muxer.instance.stream;
4920
4938
  this.mpeg2Muxer.instance.on('mpeg2data', function (data) {
4939
+ /**
4940
+ * 【广播数据】
4941
+ * rtsp视频流实时转帧之后,当前视频流通道实时进行广播
4942
+ * 将图像数据广播给它的所有client(也就是它的每个ws句柄)
4943
+ */
4921
4944
  _this3.broadcast(data); // this.mpeg2Muxer.data = data
4922
4945
 
4923
4946
  });
@@ -5009,13 +5032,20 @@ var RTSP2web = /*#__PURE__*/function () {
5009
5032
 
5010
5033
  _defineProperty(this, "channels", []);
5011
5034
 
5012
- // RTSP2web是入口类,在入口类中对视频通道进行空闲检测
5035
+ // 用户可以自定义分辨率
5036
+ if (config && config.videoSize) {
5037
+ if (config.videoSize.includes('x')) {
5038
+ config.videoSize, _readOnlyError("videoSize");
5039
+ }
5040
+ } // RTSP2web是入口类,在入口类中对视频通道进行空闲检测
5041
+
5042
+
5013
5043
  setInterval(function () {
5014
5044
  return _this5.checkFree();
5015
5045
  }, 10000); // 创建websocket服务器,监听在${port}端口
5016
5046
 
5017
5047
  this.wss = new WebSocketServer({
5018
- port: config ? config.port || 9999 : 9999
5048
+ port: config ? config.port || defaultPort : defaultPort
5019
5049
  });
5020
5050
  /**
5021
5051
  * Event: 'connection'成功握手连接时触发
@@ -5039,7 +5069,7 @@ var RTSP2web = /*#__PURE__*/function () {
5039
5069
  });
5040
5070
  }
5041
5071
 
5042
- console.log('ws连接成功');
5072
+ console.log('一个新的client(ws句柄)连接成功');
5043
5073
  });
5044
5074
  }
5045
5075
  /**
@@ -5080,6 +5110,15 @@ var RTSP2web = /*#__PURE__*/function () {
5080
5110
 
5081
5111
  return null;
5082
5112
  }
5113
+ /**
5114
+ * 创建一个视频通道
5115
+ * @Author Author
5116
+ * @DateTime 2022-05-06T14:40:28+0800
5117
+ * @param {[type]} data [description]
5118
+ * @param {[type]} ws [description]
5119
+ * @return {[type]} [description]
5120
+ */
5121
+
5083
5122
  }, {
5084
5123
  key: "createChannel",
5085
5124
  value: function createChannel(data, ws) {