Embed: added hls.js player
This commit is contained in:
		
							parent
							
								
									97f040cefd
								
							
						
					
					
						commit
						dac00f6555
					
				
					 8 changed files with 171 additions and 2 deletions
				
			
		| 
						 | 
					@ -617,11 +617,13 @@ add_executable(MistOutHTTP
 | 
				
			||||||
  generated/webrtc.js.h
 | 
					  generated/webrtc.js.h
 | 
				
			||||||
  generated/mews.js.h
 | 
					  generated/mews.js.h
 | 
				
			||||||
  generated/flv.js.h
 | 
					  generated/flv.js.h
 | 
				
			||||||
 | 
					  generated/hlsjs.js.h
 | 
				
			||||||
  generated/player_dash.js.h
 | 
					  generated/player_dash.js.h
 | 
				
			||||||
  generated/player_dash_lic.js.h
 | 
					  generated/player_dash_lic.js.h
 | 
				
			||||||
  generated/player_video.js.h
 | 
					  generated/player_video.js.h
 | 
				
			||||||
  generated/player_webrtc.js.h
 | 
					  generated/player_webrtc.js.h
 | 
				
			||||||
  generated/player_flv.js.h
 | 
					  generated/player_flv.js.h
 | 
				
			||||||
 | 
					  generated/player_hlsjs.js.h
 | 
				
			||||||
  generated/skin_default.css.h
 | 
					  generated/skin_default.css.h
 | 
				
			||||||
  generated/skin_dev.css.h
 | 
					  generated/skin_dev.css.h
 | 
				
			||||||
  generated/skin_videojs.css.h
 | 
					  generated/skin_videojs.css.h
 | 
				
			||||||
| 
						 | 
					@ -729,6 +731,10 @@ add_custom_command(OUTPUT generated/flv.js.h
 | 
				
			||||||
  COMMAND ./sourcery ${SOURCE_DIR}/embed/min/wrappers/flv.js flv_js generated/flv.js.h
 | 
					  COMMAND ./sourcery ${SOURCE_DIR}/embed/min/wrappers/flv.js flv_js generated/flv.js.h
 | 
				
			||||||
  DEPENDS sourcery ${SOURCE_DIR}/embed/min/wrappers/flv.js
 | 
					  DEPENDS sourcery ${SOURCE_DIR}/embed/min/wrappers/flv.js
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					add_custom_command(OUTPUT generated/hlsjs.js.h
 | 
				
			||||||
 | 
					  COMMAND ./sourcery ${SOURCE_DIR}/embed/min/wrappers/hlsjs.js hlsjs_js generated/hlsjs.js.h
 | 
				
			||||||
 | 
					  DEPENDS sourcery ${SOURCE_DIR}/embed/min/wrappers/hlsjs.js
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
# players
 | 
					# players
 | 
				
			||||||
add_custom_command(OUTPUT generated/player_dash_lic.js.h
 | 
					add_custom_command(OUTPUT generated/player_dash_lic.js.h
 | 
				
			||||||
  COMMAND ./sourcery ${SOURCE_DIR}/embed/players/dash.js.license.js player_dash_lic_js generated/player_dash_lic.js.h
 | 
					  COMMAND ./sourcery ${SOURCE_DIR}/embed/players/dash.js.license.js player_dash_lic_js generated/player_dash_lic.js.h
 | 
				
			||||||
| 
						 | 
					@ -750,6 +756,10 @@ add_custom_command(OUTPUT generated/player_flv.js.h
 | 
				
			||||||
  COMMAND ./sourcery ${SOURCE_DIR}/embed/players/flv.min.js player_flv_js generated/player_flv.js.h
 | 
					  COMMAND ./sourcery ${SOURCE_DIR}/embed/players/flv.min.js player_flv_js generated/player_flv.js.h
 | 
				
			||||||
  DEPENDS sourcery ${SOURCE_DIR}/embed/players/flv.min.js
 | 
					  DEPENDS sourcery ${SOURCE_DIR}/embed/players/flv.min.js
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					add_custom_command(OUTPUT generated/player_hlsjs.js.h
 | 
				
			||||||
 | 
					  COMMAND ./sourcery ${SOURCE_DIR}/embed/players/hls.js player_hlsjs_js generated/player_hlsjs.js.h
 | 
				
			||||||
 | 
					  DEPENDS sourcery ${SOURCE_DIR}/embed/players/hls.js
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
# css
 | 
					# css
 | 
				
			||||||
add_custom_command(OUTPUT generated/skin_default.css.h
 | 
					add_custom_command(OUTPUT generated/skin_default.css.h
 | 
				
			||||||
  COMMAND ./sourcery ${SOURCE_DIR}/embed/min/skins/default.css skin_default_css generated/skin_default.css.h
 | 
					  COMMAND ./sourcery ${SOURCE_DIR}/embed/min/skins/default.css skin_default_css generated/skin_default.css.h
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										1
									
								
								embed/min/wrappers/hlsjs.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								embed/min/wrappers/hlsjs.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					mistplayers.hlsjs={name:"HLS.js player",mimes:["html5/application/vnd.apple.mpegurl","html5/application/vnd.apple.mpegurl;version=7"],priority:MistUtil.object.keys(mistplayers).length+1,isMimeSupported:function(e){return this.mimes.indexOf(e)==-1?false:true},isBrowserSupported:function(e,t,s){if(location.protocol!=MistUtil.http.url.split(t.url).protocol){s.log("HTTP/HTTPS mismatch for this source");return false}return true},player:function(){},scriptsrc:function(e){return e+"/hlsjs.js"}};var p=mistplayers.hlsjs.player;p.prototype=new MistPlayer;p.prototype.build=function(e,t){var s=this;var l=document.createElement("video");l.setAttribute("playsinline","");var r=["autoplay","loop","poster"];for(var i in r){var o=r[i];if(e.options[o]){l.setAttribute(o,e.options[o]===true?"":e.options[o])}}if(e.options.muted){l.muted=true}if(e.info.type=="live"){l.loop=false}if(e.options.controls=="stock"){l.setAttribute("controls","")}l.setAttribute("crossorigin","anonymous");this.setSize=function(e){l.style.width=e.width+"px";l.style.height=e.height+"px"};this.api=l;e.player.api.unload=function(){if(e.player.hls){e.player.hls.destroy();e.player.hls=false;e.log("hls.js instance disposed")}};function n(t){e.player.hls=new Hls({maxBufferLength:15,maxMaxBufferLength:60});e.player.hls.attachMedia(l);e.player.hls.on(Hls.Events.MEDIA_ATTACHED,function(){console.log("video and hls.js are now bound together !");e.player.hls.loadSource(t);e.player.hls.on(Hls.Events.MANIFEST_PARSED,function(e,t){console.log("manifest loaded, found "+t.levels.length+" quality level")})})}e.player.api.setSource=function(t){if(!e.player.hls){return}if(e.player.hls.url!=t){e.player.hls.destroy();n(t)}};e.player.api.setSubtitle=function(e){var t=l.getElementsByTagName("track");for(var s=t.length-1;s>=0;s--){l.removeChild(t[s])}if(e){var r=document.createElement("track");l.appendChild(r);r.kind="subtitles";r.label=e.label;r.srclang=e.lang;r.src=e.src;r.setAttribute("default","")}};function a(){n(e.source.url)}if("Hls"in window){a()}else{var p=e.urlappend(mistplayers.hlsjs.scriptsrc(e.options.host));MistUtil.scripts.insert(p,{onerror:function(t){var s="Failed to load hlsjs.js";if(t.message){s+=": "+t.message}e.showError(s)},onload:a},e)}t(l)};
 | 
				
			||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
						 | 
					@ -46,6 +46,8 @@ echo "    Minimizing wrappers.."
 | 
				
			||||||
  terser -mn -o min/wrappers/mews.js -- wrappers/mews.js
 | 
					  terser -mn -o min/wrappers/mews.js -- wrappers/mews.js
 | 
				
			||||||
  echo "      Minimizing flv.js";
 | 
					  echo "      Minimizing flv.js";
 | 
				
			||||||
  terser -mn -o min/wrappers/flv.js -- wrappers/flv.js
 | 
					  terser -mn -o min/wrappers/flv.js -- wrappers/flv.js
 | 
				
			||||||
 | 
					  echo "      Minimizing hls.js";
 | 
				
			||||||
 | 
					  terser -mn -o min/wrappers/hlsjs.js -- wrappers/hlsjs.js
 | 
				
			||||||
echo "    Done.";
 | 
					echo "    Done.";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
echo "  Minimizing CSS..";
 | 
					echo "  Minimizing CSS..";
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										2
									
								
								embed/players/hls.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								embed/players/hls.js
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										127
									
								
								embed/wrappers/hlsjs.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										127
									
								
								embed/wrappers/hlsjs.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,127 @@
 | 
				
			||||||
 | 
					mistplayers.hlsjs = {
 | 
				
			||||||
 | 
					  name: "HLS.js player",
 | 
				
			||||||
 | 
					  mimes: ["html5/application/vnd.apple.mpegurl","html5/application/vnd.apple.mpegurl;version=7"],
 | 
				
			||||||
 | 
					  priority: MistUtil.object.keys(mistplayers).length + 1,
 | 
				
			||||||
 | 
					  isMimeSupported: function (mimetype) {
 | 
				
			||||||
 | 
					    return (this.mimes.indexOf(mimetype) == -1 ? false : true);
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  isBrowserSupported: function (mimetype,source,MistVideo) {
 | 
				
			||||||
 | 
					    //check for http/https mismatch
 | 
				
			||||||
 | 
					    if (location.protocol != MistUtil.http.url.split(source.url).protocol) {
 | 
				
			||||||
 | 
					      MistVideo.log("HTTP/HTTPS mismatch for this source");
 | 
				
			||||||
 | 
					      return false;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return true;
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  player: function(){},
 | 
				
			||||||
 | 
					  scriptsrc: function(host) { return host+"/hlsjs.js"; }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					var p = mistplayers.hlsjs.player;
 | 
				
			||||||
 | 
					p.prototype = new MistPlayer();
 | 
				
			||||||
 | 
					p.prototype.build = function (MistVideo,callback) {
 | 
				
			||||||
 | 
					  var me = this;
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  var video = document.createElement("video");
 | 
				
			||||||
 | 
					  video.setAttribute("playsinline",""); //iphones. effin' iphones.
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  //apply options
 | 
				
			||||||
 | 
					  var attrs = ["autoplay","loop","poster"];
 | 
				
			||||||
 | 
					  for (var i in attrs) {
 | 
				
			||||||
 | 
					    var attr = attrs[i];
 | 
				
			||||||
 | 
					    if (MistVideo.options[attr]) {
 | 
				
			||||||
 | 
					      video.setAttribute(attr,(MistVideo.options[attr] === true ? "" : MistVideo.options[attr]));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  if (MistVideo.options.muted) {
 | 
				
			||||||
 | 
					    video.muted = true; //don't use attribute because of Chrome bug
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  if (MistVideo.info.type == "live") {
 | 
				
			||||||
 | 
					    video.loop = false;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  if (MistVideo.options.controls == "stock") {
 | 
				
			||||||
 | 
					    video.setAttribute("controls","");
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  video.setAttribute("crossorigin","anonymous");
 | 
				
			||||||
 | 
					  this.setSize = function(size){
 | 
				
			||||||
 | 
					    video.style.width = size.width+"px";
 | 
				
			||||||
 | 
					    video.style.height = size.height+"px";
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  this.api = video;
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  MistVideo.player.api.unload = function(){
 | 
				
			||||||
 | 
					    if (MistVideo.player.hls) {
 | 
				
			||||||
 | 
					      MistVideo.player.hls.destroy();
 | 
				
			||||||
 | 
					      MistVideo.player.hls = false;
 | 
				
			||||||
 | 
					      MistVideo.log("hls.js instance disposed");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  function init(url) {
 | 
				
			||||||
 | 
					    MistVideo.player.hls = new Hls({
 | 
				
			||||||
 | 
					      maxBufferLength: 15,
 | 
				
			||||||
 | 
					      maxMaxBufferLength: 60
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    MistVideo.player.hls.attachMedia(video);
 | 
				
			||||||
 | 
					    MistVideo.player.hls.on(Hls.Events.MEDIA_ATTACHED, function () {
 | 
				
			||||||
 | 
					      console.log("video and hls.js are now bound together !");
 | 
				
			||||||
 | 
					      //hls.loadSource("https://cattop/mist/cmaf/live/v9.m3u8");
 | 
				
			||||||
 | 
					      //hls.loadSource("https://mira:4433/cmaf/live/v9.m3u8");
 | 
				
			||||||
 | 
					      MistVideo.player.hls.loadSource(url);
 | 
				
			||||||
 | 
					      MistVideo.player.hls.on(Hls.Events.MANIFEST_PARSED, function (event, data) {
 | 
				
			||||||
 | 
					        console.log("manifest loaded, found " + data.levels.length + " quality level");
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  MistVideo.player.api.setSource = function(url) {
 | 
				
			||||||
 | 
					    if (!MistVideo.player.hls) { return; }
 | 
				
			||||||
 | 
					    if (MistVideo.player.hls.url != url) {
 | 
				
			||||||
 | 
					      MistVideo.player.hls.destroy();
 | 
				
			||||||
 | 
					      init(url);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  MistVideo.player.api.setSubtitle = function(trackmeta) {
 | 
				
			||||||
 | 
					    //remove previous subtitles
 | 
				
			||||||
 | 
					    var tracks = video.getElementsByTagName("track");
 | 
				
			||||||
 | 
					    for (var i = tracks.length - 1; i >= 0; i--) {
 | 
				
			||||||
 | 
					      video.removeChild(tracks[i]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (trackmeta) { //if the chosen track exists
 | 
				
			||||||
 | 
					      //add the new one
 | 
				
			||||||
 | 
					      var track = document.createElement("track");
 | 
				
			||||||
 | 
					      video.appendChild(track);
 | 
				
			||||||
 | 
					      track.kind = "subtitles";
 | 
				
			||||||
 | 
					      track.label = trackmeta.label;
 | 
				
			||||||
 | 
					      track.srclang = trackmeta.lang;
 | 
				
			||||||
 | 
					      track.src = trackmeta.src;
 | 
				
			||||||
 | 
					      track.setAttribute("default","");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  function onHLSjsLoad(){
 | 
				
			||||||
 | 
					    init(MistVideo.source.url);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  if ("Hls" in window) {
 | 
				
			||||||
 | 
					    onHLSjsLoad();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  else {
 | 
				
			||||||
 | 
					    //load the videojs player
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    var scripturl = MistVideo.urlappend(mistplayers.hlsjs.scriptsrc(MistVideo.options.host));
 | 
				
			||||||
 | 
					    MistUtil.scripts.insert(scripturl,{
 | 
				
			||||||
 | 
					      onerror: function(e){
 | 
				
			||||||
 | 
					        var msg = "Failed to load hlsjs.js";
 | 
				
			||||||
 | 
					        if (e.message) { msg += ": "+e.message; }
 | 
				
			||||||
 | 
					        MistVideo.showError(msg);
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      onload: onHLSjsLoad
 | 
				
			||||||
 | 
					    },MistVideo);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  callback(video);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
mistplayers.html5 = {
 | 
					mistplayers.html5 = {
 | 
				
			||||||
  name: "HTML5 video player",
 | 
					  name: "HTML5 video player",
 | 
				
			||||||
  mimes: ["html5/application/vnd.apple.mpegurl","html5/video/mp4","html5/video/ogg","html5/video/webm","html5/audio/mp3","html5/audio/webm","html5/audio/ogg","html5/audio/wav"],
 | 
					  mimes: ["html5/application/vnd.apple.mpegurl","html5/application/vnd.apple.mpegurl;version=7","html5/video/mp4","html5/video/ogg","html5/video/webm","html5/audio/mp3","html5/audio/webm","html5/audio/ogg","html5/audio/wav"],
 | 
				
			||||||
  priority: MistUtil.object.keys(mistplayers).length + 1,
 | 
					  priority: MistUtil.object.keys(mistplayers).length + 1,
 | 
				
			||||||
  isMimeSupported: function (mimetype) {
 | 
					  isMimeSupported: function (mimetype) {
 | 
				
			||||||
    return (MistUtil.array.indexOf(this.mimes,mimetype) == -1 ? false : true);
 | 
					    return (MistUtil.array.indexOf(this.mimes,mimetype) == -1 ? false : true);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -130,6 +130,7 @@ namespace Mist{
 | 
				
			||||||
    capa["url_match"].append("/dashjs.js");
 | 
					    capa["url_match"].append("/dashjs.js");
 | 
				
			||||||
    capa["url_match"].append("/webrtc.js");
 | 
					    capa["url_match"].append("/webrtc.js");
 | 
				
			||||||
    capa["url_match"].append("/flv.js");
 | 
					    capa["url_match"].append("/flv.js");
 | 
				
			||||||
 | 
					    capa["url_match"].append("/hlsjs.js");
 | 
				
			||||||
    capa["url_match"].append("/skins/default.css");
 | 
					    capa["url_match"].append("/skins/default.css");
 | 
				
			||||||
    capa["url_match"].append("/skins/dev.css");
 | 
					    capa["url_match"].append("/skins/dev.css");
 | 
				
			||||||
    capa["url_match"].append("/skins/videojs.css");
 | 
					    capa["url_match"].append("/skins/videojs.css");
 | 
				
			||||||
| 
						 | 
					@ -142,6 +143,7 @@ namespace Mist{
 | 
				
			||||||
    capa["optional"]["wrappers"]["default"] = "";
 | 
					    capa["optional"]["wrappers"]["default"] = "";
 | 
				
			||||||
    capa["optional"]["wrappers"]["type"] = "ord_multi_sel";
 | 
					    capa["optional"]["wrappers"]["type"] = "ord_multi_sel";
 | 
				
			||||||
    capa["optional"]["wrappers"]["allowed"].append("html5");
 | 
					    capa["optional"]["wrappers"]["allowed"].append("html5");
 | 
				
			||||||
 | 
					    capa["optional"]["wrappers"]["allowed"].append("hlsjs");
 | 
				
			||||||
    capa["optional"]["wrappers"]["allowed"].append("videojs");
 | 
					    capa["optional"]["wrappers"]["allowed"].append("videojs");
 | 
				
			||||||
    capa["optional"]["wrappers"]["allowed"].append("dashjs");
 | 
					    capa["optional"]["wrappers"]["allowed"].append("dashjs");
 | 
				
			||||||
    capa["optional"]["wrappers"]["allowed"].append("webrtc");
 | 
					    capa["optional"]["wrappers"]["allowed"].append("webrtc");
 | 
				
			||||||
| 
						 | 
					@ -897,6 +899,11 @@ namespace Mist{
 | 
				
			||||||
          response.append((char *)flv_js, (size_t)flv_js_len);
 | 
					          response.append((char *)flv_js, (size_t)flv_js_len);
 | 
				
			||||||
          used = true;
 | 
					          used = true;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        if (it->asStringRef() == "hlsjs"){
 | 
				
			||||||
 | 
					          #include "hlsjs.js.h"
 | 
				
			||||||
 | 
					          response.append((char*)hlsjs_js, (size_t)hlsjs_js_len);
 | 
				
			||||||
 | 
					          used = true;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        if (!used){WARN_MSG("Unknown player type: %s", it->asStringRef().c_str());}
 | 
					        if (!used){WARN_MSG("Unknown player type: %s", it->asStringRef().c_str());}
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1034,6 +1041,26 @@ namespace Mist{
 | 
				
			||||||
#include "player_flv.js.h"
 | 
					#include "player_flv.js.h"
 | 
				
			||||||
      response.append((char *)player_flv_js, (size_t)player_flv_js_len);
 | 
					      response.append((char *)player_flv_js, (size_t)player_flv_js_len);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      H.SetBody(response);
 | 
				
			||||||
 | 
					      H.SendResponse("200", "OK", myConn);
 | 
				
			||||||
 | 
					      H.Clean();
 | 
				
			||||||
 | 
					      return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (H.url == "/hlsjs.js"){
 | 
				
			||||||
 | 
					      std::string response;
 | 
				
			||||||
 | 
					      H.Clean();
 | 
				
			||||||
 | 
					      H.SetHeader("Server", "MistServer/" PACKAGE_VERSION);
 | 
				
			||||||
 | 
					      H.setCORSHeaders();
 | 
				
			||||||
 | 
					      H.SetHeader("Content-Type", "application/javascript");
 | 
				
			||||||
 | 
					      if (method == "OPTIONS" || method == "HEAD"){
 | 
				
			||||||
 | 
					        H.SendResponse("200", "OK", myConn);
 | 
				
			||||||
 | 
					        H.Clean();
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      #include "player_hlsjs.js.h"
 | 
				
			||||||
 | 
					      response.append((char*)player_hlsjs_js, (size_t)player_hlsjs_js_len);
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
      H.SetBody(response);
 | 
					      H.SetBody(response);
 | 
				
			||||||
      H.SendResponse("200", "OK", myConn);
 | 
					      H.SendResponse("200", "OK", myConn);
 | 
				
			||||||
      H.Clean();
 | 
					      H.Clean();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue