Merge branch 'development' into LTS_development
This commit is contained in:
commit
c926637aec
62 changed files with 9123 additions and 49744 deletions
|
@ -123,9 +123,12 @@ namespace Mist {
|
|||
capa["url_match"].append("/info_$.js");
|
||||
capa["url_match"].append("/json_$.js");
|
||||
capa["url_match"].append("/player.js");
|
||||
capa["url_match"].append("/player.css");
|
||||
capa["url_match"].append("/videojs.js");
|
||||
capa["url_match"].append("/dashjs.js");
|
||||
capa["url_match"].append("/webrtc.js");
|
||||
capa["url_match"].append("/skins/default.css");
|
||||
capa["url_match"].append("/skins/dev.css");
|
||||
capa["url_match"].append("/skins/videojs.css");
|
||||
capa["url_match"].append("/embed_$.js");
|
||||
capa["url_match"].append("/flashplayer.swf");
|
||||
capa["url_match"].append("/oldflashplayer.swf");
|
||||
|
@ -133,15 +136,11 @@ namespace Mist {
|
|||
capa["optional"]["wrappers"]["help"] = "Which players are attempted and in what order.";
|
||||
capa["optional"]["wrappers"]["default"] = "";
|
||||
capa["optional"]["wrappers"]["type"] = "ord_multi_sel";
|
||||
/*capa["optional"]["wrappers"]["allowed"].append("theoplayer");
|
||||
capa["optional"]["wrappers"]["allowed"].append("jwplayer");*/
|
||||
capa["optional"]["wrappers"]["allowed"].append("html5");
|
||||
capa["optional"]["wrappers"]["allowed"].append("videojs");
|
||||
capa["optional"]["wrappers"]["allowed"].append("dashjs");
|
||||
//capa["optional"]["wrappers"]["allowed"].append("polytrope"); //currently borked
|
||||
capa["optional"]["wrappers"]["allowed"].append("webrtc");
|
||||
capa["optional"]["wrappers"]["allowed"].append("flash_strobe");
|
||||
capa["optional"]["wrappers"]["allowed"].append("silverlight");
|
||||
capa["optional"]["wrappers"]["allowed"].append("img");
|
||||
capa["optional"]["wrappers"]["option"] = "--wrappers";
|
||||
capa["optional"]["wrappers"]["short"] = "w";
|
||||
cfg->addConnectorOptions(8080, capa);
|
||||
|
@ -326,6 +325,10 @@ namespace Mist {
|
|||
}
|
||||
/*LTS-END*/
|
||||
std::string uAgent = H.GetHeader("User-Agent");
|
||||
|
||||
std::string devSkin = "";
|
||||
if (H.GetVar("dev").size()) { devSkin = ",skin:\"dev\""; }
|
||||
|
||||
H.Clean();
|
||||
H.SetHeader("Content-Type", "text/html");
|
||||
H.SetHeader("Server", "MistServer/" PACKAGE_VERSION);
|
||||
|
@ -339,7 +342,7 @@ namespace Mist {
|
|||
std::string hlsUrl = "/hls/"+streamName+"/index.m3u8";
|
||||
std::string mp4Url = "/"+streamName+".mp4";
|
||||
|
||||
H.SetBody("<!DOCTYPE html><html><head><title>"+streamName+"</title><style>body{color:white;background:black;}</style></head><body><div class=mistvideo id=\""+streamName+"\"><noscript><video controls autoplay><source src=\""+hlsUrl+"\" type=\"application/vnd.apple.mpegurl\"><source src=\""+mp4Url+"\" type=\"video/mp4\"><a href=\""+hlsUrl+"\">Click here to play the video [Apple]</a><br><a href=\""+mp4Url+"\">Click here to play the video [MP4]</a></video></noscript><script src=\"player.js\"></script><script>mistPlay('"+streamName+"',{host:'"+fullURL.getUrl()+"',target:document.getElementById('"+streamName+"')})</script></div></body></html>");
|
||||
H.SetBody("<!DOCTYPE html><html><head><title>"+streamName+"</title><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"><style>html{margin:0;padding:0;display:table;width:100%;height:100%;}body{color:white;background:#0f0f0f;margin:0;padding:0;display:table-cell;vertical-align:middle;text-align:center}body>div>div{text-align:left;}</style></head><body><div class=mistvideo id=\""+streamName+"\"><noscript><video controls autoplay><source src=\""+hlsUrl+"\" type=\"application/vnd.apple.mpegurl\"><source src=\""+mp4Url+"\" type=\"video/mp4\"><a href=\""+hlsUrl+"\">Click here to play the video [Apple]</a><br><a href=\""+mp4Url+"\">Click here to play the video [MP4]</a></video></noscript><script src=\"player.js\"></script><script>mistPlay('"+streamName+"',{host:'"+fullURL.getUrl()+"',target:document.getElementById('"+streamName+"')"+devSkin+"})</script></div></body></html>");
|
||||
if ((uAgent.find("iPad") != std::string::npos) || (uAgent.find("iPod") != std::string::npos) || (uAgent.find("iPhone") != std::string::npos)) {
|
||||
H.SetHeader("Location",hlsUrl);
|
||||
H.SendResponse("307", "HLS redirect", myConn);
|
||||
|
@ -613,7 +616,7 @@ namespace Mist {
|
|||
return;
|
||||
}
|
||||
|
||||
if ((H.url.length() > 9 && H.url.substr(0, 6) == "/info_" && H.url.substr(H.url.length() - 3, 3) == ".js") || (H.url.length() > 10 && H.url.substr(0, 7) == "/embed_" && H.url.substr(H.url.length() - 3, 3) == ".js") || (H.url.length() > 9 && H.url.substr(0, 6) == "/json_" && H.url.substr(H.url.length() - 3, 3) == ".js")){
|
||||
if ((H.url.length() > 9 && H.url.substr(0, 6) == "/info_" && H.url.substr(H.url.length() - 3, 3) == ".js") || (H.url.length() > 9 && H.url.substr(0, 6) == "/json_" && H.url.substr(H.url.length() - 3, 3) == ".js")){
|
||||
if (websocketHandler()){return;}
|
||||
std::string reqHost = HTTP::URL(H.GetHeader("Host")).host;
|
||||
std::string useragent = H.GetVar("ua");
|
||||
|
@ -645,24 +648,13 @@ namespace Mist {
|
|||
}else{
|
||||
response = json_resp.toString();
|
||||
}
|
||||
if (rURL.substr(0, 7) == "/embed_" && !json_resp.isMember("error")){
|
||||
#include "embed.js.h"
|
||||
response.append("\n(");
|
||||
if (embed_js[embed_js_len - 2] == ';'){//check if we have a trailing ;\n or just \n
|
||||
response.append((char*)embed_js, (size_t)embed_js_len - 2); //remove trailing ";\n" from xxd conversion
|
||||
}else{
|
||||
response.append((char*)embed_js, (size_t)embed_js_len - 1); //remove trailing "\n" from xxd conversion
|
||||
}
|
||||
response.append("(\"" + streamName + "\"));\n");
|
||||
}
|
||||
H.SetBody(response);
|
||||
H.SendResponse("200", "OK", myConn);
|
||||
H.Clean();
|
||||
return;
|
||||
} //embed code generator
|
||||
|
||||
|
||||
if (H.url == "/player.js"){
|
||||
if ((H.url == "/player.js") || ((H.url.substr(0, 7) == "/embed_") && (H.url.length() > 10) && (H.url.substr(H.url.length() - 3, 3) == ".js"))){
|
||||
HTTP::URL fullURL(H.GetHeader("Host"));
|
||||
if (!fullURL.protocol.size()){
|
||||
fullURL.protocol = getProtocolForPort(fullURL.getPort());
|
||||
|
@ -681,7 +673,7 @@ namespace Mist {
|
|||
H.Clean();
|
||||
H.SetHeader("Server", "MistServer/" PACKAGE_VERSION);
|
||||
H.setCORSHeaders();
|
||||
H.SetHeader("Content-Type", "application/javascript");
|
||||
H.SetHeader("Content-Type", "application/javascript; charset=utf-8");
|
||||
if(method == "OPTIONS" || method == "HEAD"){
|
||||
H.SendResponse("200", "OK", myConn);
|
||||
H.Clean();
|
||||
|
@ -689,8 +681,10 @@ namespace Mist {
|
|||
}
|
||||
|
||||
response.append("if (typeof mistoptions == 'undefined') { mistoptions = {}; }\nif (!('host' in mistoptions)) { mistoptions.host = '"+fullURL.getUrl()+"'; }\n");
|
||||
#include "core.js.h"
|
||||
response.append((char*)core_js, (size_t)core_js_len);
|
||||
|
||||
#include "player.js.h"
|
||||
response.append((char*)player_js, (size_t)player_js_len);
|
||||
|
||||
jsonForEach(config->getOption("wrappers",true),it){
|
||||
bool used = false;
|
||||
if (it->asStringRef() == "html5"){
|
||||
|
@ -703,26 +697,6 @@ namespace Mist {
|
|||
response.append((char*)flash_strobe_js, (size_t)flash_strobe_js_len);
|
||||
used = true;
|
||||
}
|
||||
if (it->asStringRef() == "silverlight"){
|
||||
#include "silverlight.js.h"
|
||||
response.append((char*)silverlight_js, (size_t)silverlight_js_len);
|
||||
used = true;
|
||||
}
|
||||
if (it->asStringRef() == "theoplayer"){
|
||||
#include "theoplayer.js.h"
|
||||
response.append((char*)theoplayer_js, (size_t)theoplayer_js_len);
|
||||
used = true;
|
||||
}
|
||||
if (it->asStringRef() == "jwplayer"){
|
||||
#include "jwplayer.js.h"
|
||||
response.append((char*)jwplayer_js, (size_t)jwplayer_js_len);
|
||||
used = true;
|
||||
}
|
||||
if (it->asStringRef() == "polytrope"){
|
||||
#include "polytrope.js.h"
|
||||
response.append((char*)polytrope_js, (size_t)polytrope_js_len);
|
||||
used = true;
|
||||
}
|
||||
if (it->asStringRef() == "dashjs"){
|
||||
#include "dashjs.js.h"
|
||||
response.append((char*)dash_js, (size_t)dash_js_len);
|
||||
|
@ -733,9 +707,9 @@ namespace Mist {
|
|||
response.append((char*)video_js, (size_t)video_js_len);
|
||||
used = true;
|
||||
}
|
||||
if (it->asStringRef() == "img"){
|
||||
#include "img.js.h"
|
||||
response.append((char*)img_js, (size_t)img_js_len);
|
||||
if (it->asStringRef() == "webrtc"){
|
||||
#include "webrtc.js.h"
|
||||
response.append((char*)webrtc_js, (size_t)webrtc_js_len);
|
||||
used = true;
|
||||
}
|
||||
if (!used) {
|
||||
|
@ -743,6 +717,10 @@ namespace Mist {
|
|||
}
|
||||
}
|
||||
|
||||
if ((rURL.substr(0, 7) == "/embed_") && (rURL.length() > 10) && (rURL.substr(rURL.length() - 3, 3) == ".js")){
|
||||
response.append("var container = document.createElement(\"div\");\ncontainer.id = \""+streamName+"\";\ndocument.write(container.outerHTML);\nmistPlay(\""+streamName+"\",{target:document.getElementById(\""+streamName+"\")});");
|
||||
}
|
||||
|
||||
H.SetBody(response);
|
||||
H.SendResponse("200", "OK", myConn);
|
||||
H.Clean();
|
||||
|
@ -750,8 +728,9 @@ namespace Mist {
|
|||
|
||||
}
|
||||
|
||||
if (H.url == "/player.css"){
|
||||
if (H.url.substr(0, 7) == "/skins/"){
|
||||
std::string response;
|
||||
std::string url = H.url;
|
||||
H.Clean();
|
||||
H.SetHeader("Server", "MistServer/" PACKAGE_VERSION);
|
||||
H.setCORSHeaders();
|
||||
|
@ -762,8 +741,24 @@ namespace Mist {
|
|||
return;
|
||||
}
|
||||
|
||||
#include "mist.css.h"
|
||||
response.append((char*)mist_css, (size_t)mist_css_len);
|
||||
if (url == "/skins/default.css") {
|
||||
#include "skin_default.css.h"
|
||||
response.append((char*)skin_default_css, (size_t)skin_default_css_len);
|
||||
}
|
||||
else if (url == "/skins/dev.css") {
|
||||
#include "skin_dev.css.h"
|
||||
response.append((char*)skin_dev_css, (size_t)skin_dev_css_len);
|
||||
}
|
||||
else if (url == "/skins/videojs.css") {
|
||||
#include "skin_videojs.css.h"
|
||||
response.append((char*)skin_videojs_css, (size_t)skin_videojs_css_len);
|
||||
}
|
||||
else {
|
||||
H.SetBody("Unknown stylesheet: "+url);
|
||||
H.SendResponse("404", "Unknown stylesheet", myConn);
|
||||
H.Clean();
|
||||
return;
|
||||
}
|
||||
|
||||
H.SetBody(response);
|
||||
H.SendResponse("200", "OK", myConn);
|
||||
|
@ -782,10 +777,8 @@ namespace Mist {
|
|||
return;
|
||||
}
|
||||
|
||||
#include "playervideo.js.h"
|
||||
response.append((char*)playervideo_js, (size_t)playervideo_js_len);
|
||||
#include "playerhlsvideo.js.h"
|
||||
response.append((char*)playerhlsvideo_js, (size_t)playerhlsvideo_js_len);
|
||||
#include "player_video.js.h"
|
||||
response.append((char*)player_video_js, (size_t)player_video_js_len);
|
||||
|
||||
H.SetBody(response);
|
||||
H.SendResponse("200", "OK", myConn);
|
||||
|
@ -804,10 +797,30 @@ namespace Mist {
|
|||
return;
|
||||
}
|
||||
|
||||
#include "playerdashlic.js.h"
|
||||
response.append((char*)playerdashlic_js, (size_t)playerdashlic_js_len);
|
||||
#include "playerdash.js.h"
|
||||
response.append((char*)playerdash_js, (size_t)playerdash_js_len);
|
||||
#include "player_dash_lic.js.h"
|
||||
response.append((char*)player_dash_lic_js, (size_t)player_dash_lic_js_len);
|
||||
#include "player_dash.js.h"
|
||||
response.append((char*)player_dash_js, (size_t)player_dash_js_len);
|
||||
|
||||
H.SetBody(response);
|
||||
H.SendResponse("200", "OK", myConn);
|
||||
H.Clean();
|
||||
return;
|
||||
}
|
||||
if (H.url == "/webrtc.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_webrtc.js.h"
|
||||
response.append((char*)player_webrtc_js, (size_t)player_webrtc_js_len);
|
||||
|
||||
H.SetBody(response);
|
||||
H.SendResponse("200", "OK", myConn);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue