rtsp2web 2.0.0 → 2.1.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
@@ -4762,7 +4762,7 @@ WebSocket.WebSocketServer = WebSocket.Server;
4762
4762
 
4763
4763
  var ws = WebSocket;
4764
4764
 
4765
- var version = "2.0.0";
4765
+ var version = "2.1.0";
4766
4766
 
4767
4767
  /*!
4768
4768
  * name: main.js
@@ -4780,7 +4780,13 @@ var child = require('child_process');
4780
4780
  var events = require('events');
4781
4781
 
4782
4782
  var url = require('url');
4783
- var WebSocketServer = ws.Server;
4783
+ var WebSocketServer = ws.Server; // 默认的ffmpeg路径(一般正常安装的ffmpeg,名称(路径)是:ffmpeg)
4784
+
4785
+ var FFmpegPath = 'ffmpeg'; // 默认的端口
4786
+
4787
+ var defaultPort = 9999; // 默认的视频视口框架大小
4788
+
4789
+ var videoSize = '1920x1080';
4784
4790
  /**
4785
4791
  * 用于创建一个新的视频转码流类
4786
4792
  */
@@ -4790,6 +4796,7 @@ var Mpeg2Muxer = /*#__PURE__*/function (_events$EventEmitter) {
4790
4796
 
4791
4797
  var _super = _createSuper(Mpeg2Muxer);
4792
4798
 
4799
+ // 额外的 ffmpeg 参数
4793
4800
  function Mpeg2Muxer(options) {
4794
4801
  var _this;
4795
4802
 
@@ -4806,7 +4813,7 @@ var Mpeg2Muxer = /*#__PURE__*/function (_events$EventEmitter) {
4806
4813
  _defineProperty(_assertThisInitialized(_this), "inputStreamStarted", false);
4807
4814
 
4808
4815
  _this.options = options;
4809
- _this.ffmpegPath = options.ffmpegPath;
4816
+ _this.ffmpegPath = options.ffmpegPath || FFmpegPath;
4810
4817
  _this.url = options.url;
4811
4818
  _this.ffmpegOptions = options.ffmpegOptions;
4812
4819
 
@@ -4837,6 +4844,13 @@ var Mpeg2Muxer = /*#__PURE__*/function (_events$EventEmitter) {
4837
4844
  this.stream = child.spawn(this.ffmpegPath, this.spawnOptions, {
4838
4845
  detached: false
4839
4846
  });
4847
+ this.stream.on('error', function (code, signal) {
4848
+ console.error('启动ffmpeg时出错,请确保你安装了ffmpeg,然后检查路径或者命令参数');
4849
+ });
4850
+ this.stream.on('close', function (code, signal) {
4851
+ console.log('ffmpeg关闭,code:', code);
4852
+ return _this2.emit('exitWithError');
4853
+ });
4840
4854
  this.inputStreamStarted = true;
4841
4855
  this.stream.stdout.on('data', function (data) {
4842
4856
  return _this2.emit('mpeg2data', data);
@@ -4910,7 +4924,7 @@ var Channel = /*#__PURE__*/function () {
4910
4924
  "-stats": "",
4911
4925
  // 没有必要值的选项使用空字符串
4912
4926
  "-r": 20,
4913
- "-s": "1920x1080",
4927
+ "-s": videoSize,
4914
4928
  "-b:v": "2000k"
4915
4929
  },
4916
4930
  url: this.config.url,
@@ -4918,6 +4932,11 @@ var Channel = /*#__PURE__*/function () {
4918
4932
  });
4919
4933
  this.mpeg2Muxer.stream = this.mpeg2Muxer.instance.stream;
4920
4934
  this.mpeg2Muxer.instance.on('mpeg2data', function (data) {
4935
+ /**
4936
+ * 【广播数据】
4937
+ * rtsp视频流实时转帧之后,当前视频流通道实时进行广播
4938
+ * 将图像数据广播给它的所有client(也就是它的每个ws句柄)
4939
+ */
4921
4940
  _this3.broadcast(data); // this.mpeg2Muxer.data = data
4922
4941
 
4923
4942
  });
@@ -5015,7 +5034,7 @@ var RTSP2web = /*#__PURE__*/function () {
5015
5034
  }, 10000); // 创建websocket服务器,监听在${port}端口
5016
5035
 
5017
5036
  this.wss = new WebSocketServer({
5018
- port: config ? config.port || 9999 : 9999
5037
+ port: config ? config.port || defaultPort : defaultPort
5019
5038
  });
5020
5039
  /**
5021
5040
  * Event: 'connection'成功握手连接时触发
@@ -5039,7 +5058,7 @@ var RTSP2web = /*#__PURE__*/function () {
5039
5058
  });
5040
5059
  }
5041
5060
 
5042
- console.log('ws连接成功');
5061
+ console.log('一个新的client(ws句柄)连接成功');
5043
5062
  });
5044
5063
  }
5045
5064
  /**
@@ -5080,6 +5099,15 @@ var RTSP2web = /*#__PURE__*/function () {
5080
5099
 
5081
5100
  return null;
5082
5101
  }
5102
+ /**
5103
+ * 创建一个视频通道
5104
+ * @Author Author
5105
+ * @DateTime 2022-05-06T14:40:28+0800
5106
+ * @param {[type]} data [description]
5107
+ * @param {[type]} ws [description]
5108
+ * @return {[type]} [description]
5109
+ */
5110
+
5083
5111
  }, {
5084
5112
  key: "createChannel",
5085
5113
  value: function createChannel(data, ws) {