From f77431d5a3523d3d131a3f4573ae19eee00346d9 Mon Sep 17 00:00:00 2001 From: Ramkoemar Date: Wed, 13 Sep 2017 14:13:47 +0200 Subject: [PATCH] ts-exec --- src/output/output_httpts.cpp | 33 +++++++++++++++++++++++++++++++++ src/output/output_httpts.h | 2 +- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/output/output_httpts.cpp b/src/output/output_httpts.cpp index cab1c7a8..07aff62d 100644 --- a/src/output/output_httpts.cpp +++ b/src/output/output_httpts.cpp @@ -3,10 +3,42 @@ #include #include #include +#include namespace Mist{ OutHTTPTS::OutHTTPTS(Socket::Connection & conn) : TSOutput(conn){ sendRepeatingHeaders = 500;//PAT/PMT every 500ms (DVB spec) + + if(config->getString("target").substr(0,10) == "ts-exec://"){ + std::string input = config->getString("target").substr(10); + char *args[128]; + uint8_t argCnt = 0; + char *startCh = 0; + for (char *i = (char *)input.c_str(); i <= input.data() + input.size(); ++i){ + if (!*i){ + if (startCh){args[argCnt++] = startCh;} + break; + } + if (*i == ' '){ + if (startCh){ + args[argCnt++] = startCh; + startCh = 0; + *i = 0; + } + }else{ + if (!startCh){startCh = i;} + } + } + args[argCnt] = 0; + + int fin = -1; + Util::Procs::StartPiped(args, &fin, 0, 0); + myConn = Socket::Connection(fin, -1); + + wantRequest = false; + parseData = true; + INFO_MSG("ts exec stream"); + } } OutHTTPTS::~OutHTTPTS(){} @@ -41,6 +73,7 @@ namespace Mist{ capa["methods"][0u]["type"] = "html5/video/mpeg"; capa["methods"][0u]["priority"] = 1ll; capa["push_urls"].append("/*.ts"); + capa["push_urls"].append("ts-exec://*"); JSON::Value opt; opt["arg"] = "string"; diff --git a/src/output/output_httpts.h b/src/output/output_httpts.h index 1013da7d..aa9d2e1b 100644 --- a/src/output/output_httpts.h +++ b/src/output/output_httpts.h @@ -12,7 +12,7 @@ namespace Mist { void initialSeek(); private: bool isRecording(); - bool isFileTarget(){return isRecording();} + bool isFileTarget(){return isRecording() && config->getString("target").substr(0,10) != "ts-exec://" ;} }; }