@flashphoner/websdk 2.0.228 → 2.0.230

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.
Files changed (29) hide show
  1. package/docTemplate/README.md +1 -1
  2. package/examples/demo/dependencies/js/utils.js +39 -0
  3. package/examples/demo/streaming/hls-js-player/hls-js-player.html +1 -0
  4. package/examples/demo/streaming/hls-js-player/hls-js-player.js +21 -17
  5. package/examples/demo/streaming/hls-js-player/hls.js +25012 -25818
  6. package/examples/demo/streaming/hls-js-player/hls.min.js +2 -2
  7. package/examples/demo/streaming/hls-native/hls-native.html +1 -0
  8. package/examples/demo/streaming/hls-native/hls-native.js +5 -1
  9. package/examples/demo/streaming/hls-player/hls-player.html +1 -0
  10. package/examples/demo/streaming/hls-player/hls-player.js +39 -4
  11. package/examples/demo/streaming/hls-player/player-page.html +2 -0
  12. package/examples/demo/streaming/hls-player/video-js.css +59 -43
  13. package/examples/demo/streaming/hls-player/video.js +6028 -3743
  14. package/examples/demo/streaming/hls-player/video.min.js +8 -9
  15. package/flashphoner-no-flash.js +2 -2
  16. package/flashphoner-no-flash.min.js +2 -2
  17. package/flashphoner-no-webrtc.js +2 -2
  18. package/flashphoner-no-webrtc.min.js +2 -2
  19. package/flashphoner-no-wsplayer.js +2 -2
  20. package/flashphoner-no-wsplayer.min.js +2 -2
  21. package/flashphoner-room-api.js +3 -3
  22. package/flashphoner-room-api.min.js +3 -3
  23. package/flashphoner-temasys-flash-websocket-without-adapterjs.js +2 -2
  24. package/flashphoner-temasys-flash-websocket.js +2 -2
  25. package/flashphoner-temasys-flash-websocket.min.js +1 -1
  26. package/flashphoner.js +2 -2
  27. package/flashphoner.min.js +2 -2
  28. package/package.json +1 -1
  29. package/src/media-source-media-provider.js +3 -3
@@ -6,6 +6,7 @@
6
6
  <link rel="stylesheet" href="../../dependencies/bootstrap/css/bootstrap.css">
7
7
  <link rel="stylesheet" href="hls-native.css">
8
8
  <title>HLS Native Player Minimal</title>
9
+ <script type="text/javascript" src="../../../../flashphoner.js"></script>
9
10
  <script type="text/javascript" src="../../dependencies/jquery/jquery-1.12.0.js"></script>
10
11
  <script type="text/javascript" src="../../dependencies/jquery/jquery-ui.js"></script>
11
12
  <script type="text/javascript" src="../../dependencies/js/utils.js"></script>
@@ -1,3 +1,4 @@
1
+ var Browser = Flashphoner.Browser;
1
2
  var remoteVideo = null;
2
3
 
3
4
  function loadPlayerPage() {
@@ -10,6 +11,10 @@ function initPage() {
10
11
  $("#applyBtn").prop('disabled', false).text("Play").off('click').click(playBtnClick);
11
12
  remoteVideo = document.getElementById('remoteVideo');
12
13
  remoteVideo.style ="background-color: lightgrey;";
14
+ if (Browser.isSafariWebRTC() && Browser.isiOS()) {
15
+ // iOS hack when using standard controls to leave fullscreen mode
16
+ setWebkitFullscreenHandlers(remoteVideo);
17
+ }
13
18
  }
14
19
 
15
20
  function playBtnClick() {
@@ -32,7 +37,6 @@ function playBtnClick() {
32
37
  }
33
38
  else {
34
39
  $("#notifyFlash").text("Your browser doesn't support native HLS playback");
35
- cleanRemoteVideo();
36
40
  }
37
41
  }
38
42
  }
@@ -7,6 +7,7 @@
7
7
  <link rel="stylesheet" href="hls-player.css">
8
8
  <link rel="stylesheet" href="video-js.css">
9
9
  <title>HLS VideoJS Player Minimal</title>
10
+ <script type="text/javascript" src="../../../../flashphoner.js"></script>
10
11
  <script type="text/javascript" src="../../dependencies/jquery/jquery-1.12.0.js"></script>
11
12
  <script type="text/javascript" src="../../dependencies/jquery/jquery-ui.js"></script>
12
13
  <script type="text/javascript" src="../../dependencies/js/utils.js"></script>
@@ -1,3 +1,4 @@
1
+ var Browser = Flashphoner.Browser;
1
2
  var player = null;
2
3
 
3
4
  function loadPlayerPage() {
@@ -10,7 +11,7 @@ function initPage() {
10
11
  $("#applyBtn").prop('disabled', false).text("Play").off('click').click(playBtnClick);
11
12
  var remoteVideo = document.getElementById('remoteVideo');
12
13
  remoteVideo.className = "video-js vjs-default-skin";
13
- player = videojs(remoteVideo);
14
+ player = initVideoJsPlayer(remoteVideo);
14
15
  }
15
16
 
16
17
  function playBtnClick() {
@@ -23,12 +24,23 @@ function playBtnClick() {
23
24
  if (key.length > 0 && token.length > 0) {
24
25
  videoSrc += "?" + key + "=" + token;
25
26
  }
27
+ player.on('loadedmetadata', function() {
28
+ console.log("Play with VideoJs");
29
+ player.play();
30
+ });
31
+ player.on('error', function() {
32
+ var error = player.error();
33
+ // Stop on error
34
+ stopBtnClick();
35
+ if (error && error.code == error.MEDIA_ERR_DECODE) {
36
+ // Restart playback in case of decode error
37
+ playBtnClick();
38
+ }
39
+ });
26
40
  player.src({
27
41
  src: videoSrc,
28
42
  type: "application/vnd.apple.mpegurl"
29
43
  });
30
- console.log("Play with VideoJs");
31
- player.play();
32
44
  onStarted();
33
45
  }
34
46
  }
@@ -76,8 +88,10 @@ function createRemoteVideo(parent) {
76
88
  remoteVideo.autoplay="autoplay";
77
89
  remoteVideo.type="application/vnd.apple.mpegurl";
78
90
  remoteVideo.className = "video-js vjs-default-skin";
91
+ remoteVideo.setAttribute("playsinline","");
92
+ remoteVideo.setAttribute("webkit-playsinline","");
79
93
  parent.appendChild(remoteVideo);
80
- player = videojs(remoteVideo);
94
+ player = initVideoJsPlayer(remoteVideo);
81
95
  }
82
96
 
83
97
 
@@ -109,3 +123,24 @@ function highlightInput(input) {
109
123
  function removeHighlight(input) {
110
124
  input.closest('.form-group').removeClass("has-error");
111
125
  }
126
+
127
+ function initVideoJsPlayer(video) {
128
+ var videoJsPlayer = videojs(video);
129
+ console.log("Using VideoJs " + videojs.VERSION);
130
+ if (Browser.isSafariWebRTC() && Browser.isiOS()) {
131
+ // iOS hack when using standard controls to leave fullscreen mode
132
+ var videoTag = getActualVideoTag();
133
+ if(videoTag) {
134
+ setWebkitFullscreenHandlers(videoTag);
135
+ }
136
+ }
137
+ return videoJsPlayer;
138
+ }
139
+
140
+ function getActualVideoTag() {
141
+ var videos = document.querySelectorAll("video");
142
+ if (videos && videos.length > 0) {
143
+ return videos[0];
144
+ }
145
+ return null;
146
+ }
@@ -60,6 +60,8 @@
60
60
  <video id="remoteVideo" width="852" height="480"
61
61
  controls="controls"
62
62
  autoplay="autoplay"
63
+ playsinline="playsinline"
64
+ webkit-playsinline="webkit-playsinline"
63
65
  type="application/vnd.apple.mpegurl"></video>
64
66
  </div>
65
67
  </div>
@@ -384,26 +384,33 @@
384
384
  .video-js.vjs-1-1 {
385
385
  width: 100%;
386
386
  max-width: 100%;
387
+ }
388
+
389
+ .video-js.vjs-fluid:not(.vjs-audio-only-mode),
390
+ .video-js.vjs-16-9:not(.vjs-audio-only-mode),
391
+ .video-js.vjs-4-3:not(.vjs-audio-only-mode),
392
+ .video-js.vjs-9-16:not(.vjs-audio-only-mode),
393
+ .video-js.vjs-1-1:not(.vjs-audio-only-mode) {
387
394
  height: 0;
388
395
  }
389
396
 
390
- .video-js.vjs-16-9 {
397
+ .video-js.vjs-16-9:not(.vjs-audio-only-mode) {
391
398
  padding-top: 56.25%;
392
399
  }
393
400
 
394
- .video-js.vjs-4-3 {
401
+ .video-js.vjs-4-3:not(.vjs-audio-only-mode) {
395
402
  padding-top: 75%;
396
403
  }
397
404
 
398
- .video-js.vjs-9-16 {
405
+ .video-js.vjs-9-16:not(.vjs-audio-only-mode) {
399
406
  padding-top: 177.7777777778%;
400
407
  }
401
408
 
402
- .video-js.vjs-1-1 {
409
+ .video-js.vjs-1-1:not(.vjs-audio-only-mode) {
403
410
  padding-top: 100%;
404
411
  }
405
412
 
406
- .video-js.vjs-fill {
413
+ .video-js.vjs-fill:not(.vjs-audio-only-mode) {
407
414
  width: 100%;
408
415
  height: 100%;
409
416
  }
@@ -416,6 +423,10 @@
416
423
  height: 100%;
417
424
  }
418
425
 
426
+ .video-js.vjs-audio-only-mode .vjs-tech {
427
+ display: none;
428
+ }
429
+
419
430
  body.vjs-full-window {
420
431
  padding: 0;
421
432
  margin: 0;
@@ -751,7 +762,8 @@ body.vjs-full-window {
751
762
  background-color: rgba(43, 51, 63, 0.7);
752
763
  }
753
764
 
754
- .vjs-has-started .vjs-control-bar {
765
+ .vjs-has-started .vjs-control-bar,
766
+ .vjs-audio-only-mode .vjs-control-bar {
755
767
  display: flex;
756
768
  visibility: visible;
757
769
  opacity: 1;
@@ -771,9 +783,11 @@ body.vjs-full-window {
771
783
  display: none !important;
772
784
  }
773
785
 
774
- .vjs-audio.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar {
786
+ .vjs-audio.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar,
787
+ .vjs-audio-only-mode.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar {
775
788
  opacity: 1;
776
789
  visibility: visible;
790
+ pointer-events: auto;
777
791
  }
778
792
 
779
793
  .vjs-has-started.vjs-no-flex .vjs-control-bar {
@@ -790,6 +804,12 @@ body.vjs-full-window {
790
804
  flex: none;
791
805
  }
792
806
 
807
+ .video-js .vjs-control.vjs-visible-text {
808
+ width: auto;
809
+ padding-left: 1em;
810
+ padding-right: 1em;
811
+ }
812
+
793
813
  .vjs-button > .vjs-icon-placeholder:before {
794
814
  font-size: 1.8em;
795
815
  line-height: 1.67;
@@ -805,7 +825,7 @@ body.vjs-full-window {
805
825
  text-shadow: 0em 0em 1em white;
806
826
  }
807
827
 
808
- .video-js .vjs-control-text {
828
+ .video-js *:not(.vjs-visible-text) > .vjs-control-text {
809
829
  border: 0;
810
830
  clip: rect(0 0 0 0);
811
831
  height: 1px;
@@ -1227,18 +1247,16 @@ body.vjs-full-window {
1227
1247
  height: 100%;
1228
1248
  }
1229
1249
 
1230
- .vjs-has-started .vjs-poster {
1250
+ .vjs-has-started .vjs-poster,
1251
+ .vjs-using-native-controls .vjs-poster {
1231
1252
  display: none;
1232
1253
  }
1233
1254
 
1234
- .vjs-audio.vjs-has-started .vjs-poster {
1255
+ .vjs-audio.vjs-has-started .vjs-poster,
1256
+ .vjs-has-started.vjs-audio-poster-mode .vjs-poster {
1235
1257
  display: block;
1236
1258
  }
1237
1259
 
1238
- .vjs-using-native-controls .vjs-poster {
1239
- display: none;
1240
- }
1241
-
1242
1260
  .video-js .vjs-live-control {
1243
1261
  display: flex;
1244
1262
  align-items: flex-start;
@@ -1346,6 +1364,7 @@ body.vjs-full-window {
1346
1364
  pointer-events: none;
1347
1365
  }
1348
1366
 
1367
+ .video-js.vjs-controls-disabled .vjs-text-track-display,
1349
1368
  .video-js.vjs-user-inactive.vjs-playing .vjs-text-track-display {
1350
1369
  bottom: 1em;
1351
1370
  }
@@ -1372,6 +1391,7 @@ video::-webkit-media-text-track-display {
1372
1391
  transform: translateY(-3em);
1373
1392
  }
1374
1393
 
1394
+ .video-js.vjs-controls-disabled video::-webkit-media-text-track-display,
1375
1395
  .video-js.vjs-user-inactive.vjs-playing video::-webkit-media-text-track-display {
1376
1396
  transform: translateY(-1.5em);
1377
1397
  }
@@ -1380,10 +1400,18 @@ video::-webkit-media-text-track-display {
1380
1400
  cursor: pointer;
1381
1401
  flex: none;
1382
1402
  }
1403
+ .video-js.vjs-audio-only-mode .vjs-picture-in-picture-control {
1404
+ display: none;
1405
+ }
1406
+
1383
1407
  .video-js .vjs-fullscreen-control {
1384
1408
  cursor: pointer;
1385
1409
  flex: none;
1386
1410
  }
1411
+ .video-js.vjs-audio-only-mode .vjs-fullscreen-control {
1412
+ display: none;
1413
+ }
1414
+
1387
1415
  .vjs-playback-rate > .vjs-menu-button,
1388
1416
  .vjs-playback-rate .vjs-playback-rate-value {
1389
1417
  position: absolute;
@@ -1539,10 +1567,18 @@ video::-webkit-media-text-track-display {
1539
1567
  border-top-color: #73859f;
1540
1568
  }
1541
1569
  }
1570
+ .video-js.vjs-audio-only-mode .vjs-captions-button {
1571
+ display: none;
1572
+ }
1573
+
1542
1574
  .vjs-chapters-button .vjs-menu ul {
1543
1575
  width: 24em;
1544
1576
  }
1545
1577
 
1578
+ .video-js.vjs-audio-only-mode .vjs-descriptions-button {
1579
+ display: none;
1580
+ }
1581
+
1546
1582
  .video-js .vjs-subs-caps-button + .vjs-menu .vjs-captions-menu-item .vjs-menu-item-text .vjs-icon-placeholder {
1547
1583
  vertical-align: middle;
1548
1584
  display: inline-block;
@@ -1556,6 +1592,10 @@ video::-webkit-media-text-track-display {
1556
1592
  line-height: inherit;
1557
1593
  }
1558
1594
 
1595
+ .video-js.vjs-audio-only-mode .vjs-subs-caps-button {
1596
+ display: none;
1597
+ }
1598
+
1559
1599
  .video-js .vjs-audio-button + .vjs-menu .vjs-main-desc-menu-item .vjs-menu-item-text .vjs-icon-placeholder {
1560
1600
  vertical-align: middle;
1561
1601
  display: inline-block;
@@ -1574,57 +1614,33 @@ video::-webkit-media-text-track-display {
1574
1614
  .video-js.vjs-layout-small .vjs-duration,
1575
1615
  .video-js.vjs-layout-small .vjs-remaining-time,
1576
1616
  .video-js.vjs-layout-small .vjs-playback-rate,
1577
- .video-js.vjs-layout-small .vjs-chapters-button,
1578
- .video-js.vjs-layout-small .vjs-descriptions-button,
1579
- .video-js.vjs-layout-small .vjs-captions-button,
1580
- .video-js.vjs-layout-small .vjs-subtitles-button,
1581
- .video-js.vjs-layout-small .vjs-audio-button,
1582
1617
  .video-js.vjs-layout-small .vjs-volume-control, .video-js.vjs-layout-x-small .vjs-current-time,
1583
1618
  .video-js.vjs-layout-x-small .vjs-time-divider,
1584
1619
  .video-js.vjs-layout-x-small .vjs-duration,
1585
1620
  .video-js.vjs-layout-x-small .vjs-remaining-time,
1586
1621
  .video-js.vjs-layout-x-small .vjs-playback-rate,
1587
- .video-js.vjs-layout-x-small .vjs-chapters-button,
1588
- .video-js.vjs-layout-x-small .vjs-descriptions-button,
1589
- .video-js.vjs-layout-x-small .vjs-captions-button,
1590
- .video-js.vjs-layout-x-small .vjs-subtitles-button,
1591
- .video-js.vjs-layout-x-small .vjs-audio-button,
1592
1622
  .video-js.vjs-layout-x-small .vjs-volume-control, .video-js.vjs-layout-tiny .vjs-current-time,
1593
1623
  .video-js.vjs-layout-tiny .vjs-time-divider,
1594
1624
  .video-js.vjs-layout-tiny .vjs-duration,
1595
1625
  .video-js.vjs-layout-tiny .vjs-remaining-time,
1596
1626
  .video-js.vjs-layout-tiny .vjs-playback-rate,
1597
- .video-js.vjs-layout-tiny .vjs-chapters-button,
1598
- .video-js.vjs-layout-tiny .vjs-descriptions-button,
1599
- .video-js.vjs-layout-tiny .vjs-captions-button,
1600
- .video-js.vjs-layout-tiny .vjs-subtitles-button,
1601
- .video-js.vjs-layout-tiny .vjs-audio-button,
1602
1627
  .video-js.vjs-layout-tiny .vjs-volume-control {
1603
- display: none !important;
1628
+ display: none;
1604
1629
  }
1605
- .video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal:hover,
1606
- .video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal:active,
1607
- .video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active, .video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal:hover,
1608
- .video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal:active,
1609
- .video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active, .video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal:hover,
1610
- .video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal:active,
1611
- .video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active {
1630
+ .video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal:hover, .video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal:active, .video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active, .video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover, .video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal:hover, .video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal:active, .video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active, .video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover, .video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal:hover, .video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal:active, .video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active, .video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover {
1612
1631
  width: auto;
1613
1632
  width: initial;
1614
1633
  }
1615
- .video-js.vjs-layout-x-small:not(.vjs-liveui) .vjs-subs-caps-button, .video-js.vjs-layout-x-small:not(.vjs-live) .vjs-subs-caps-button, .video-js.vjs-layout-tiny .vjs-subs-caps-button {
1634
+ .video-js.vjs-layout-x-small .vjs-progress-control, .video-js.vjs-layout-tiny .vjs-progress-control {
1616
1635
  display: none;
1617
1636
  }
1618
- .video-js.vjs-layout-x-small.vjs-liveui .vjs-custom-control-spacer, .video-js.vjs-layout-tiny .vjs-custom-control-spacer {
1637
+ .video-js.vjs-layout-x-small .vjs-custom-control-spacer {
1619
1638
  flex: auto;
1620
1639
  display: block;
1621
1640
  }
1622
- .video-js.vjs-layout-x-small.vjs-liveui.vjs-no-flex .vjs-custom-control-spacer, .video-js.vjs-layout-tiny.vjs-no-flex .vjs-custom-control-spacer {
1641
+ .video-js.vjs-layout-x-small.vjs-no-flex .vjs-custom-control-spacer {
1623
1642
  width: auto;
1624
1643
  }
1625
- .video-js.vjs-layout-x-small.vjs-liveui .vjs-progress-control, .video-js.vjs-layout-tiny .vjs-progress-control {
1626
- display: none;
1627
- }
1628
1644
 
1629
1645
  .vjs-modal-dialog.vjs-text-track-settings {
1630
1646
  background-color: #2B333F;