Tweaked (default) output verbosity levels to be more sensible and less spammy.
This commit is contained in:
parent
58847705eb
commit
0e02766e2b
8 changed files with 64 additions and 124 deletions
|
@ -53,7 +53,7 @@ namespace Buffer {
|
|||
|
||||
void handleUser(void * v_usr){
|
||||
user * usr = (user*)v_usr;
|
||||
#if DEBUG >= 4
|
||||
#if DEBUG >= 5
|
||||
std::cerr << "Thread launched for user " << usr->MyStr << ", socket number " << usr->S.getSocket() << std::endl;
|
||||
#endif
|
||||
|
||||
|
|
|
@ -90,24 +90,28 @@ namespace Connector_HTTP {
|
|||
}
|
||||
|
||||
/// Handles requests without associated handler, displaying a nice friendly error message.
|
||||
void Handle_None(HTTP::Parser & H, Socket::Connection * conn){
|
||||
long long int Handle_None(HTTP::Parser & H, Socket::Connection * conn){
|
||||
H.Clean();
|
||||
H.SetHeader("Server", "mistserver/" PACKAGE_VERSION "/" + Util::Config::libver);
|
||||
H.SetBody(
|
||||
"<!DOCTYPE html><html><head><title>Unsupported Media Type</title></head><body><h1>Unsupported Media Type</h1>The server isn't quite sure what you wanted to receive from it.</body></html>");
|
||||
long long int ret = Util::getMS();
|
||||
conn->SendNow(H.BuildResponse("415", "Unsupported Media Type"));
|
||||
return ret;
|
||||
}
|
||||
|
||||
void Handle_Timeout(HTTP::Parser & H, Socket::Connection * conn){
|
||||
long long int Handle_Timeout(HTTP::Parser & H, Socket::Connection * conn){
|
||||
H.Clean();
|
||||
H.SetHeader("Server", "mistserver/" PACKAGE_VERSION "/" + Util::Config::libver);
|
||||
H.SetBody(
|
||||
"<!DOCTYPE html><html><head><title>Gateway timeout</title></head><body><h1>Gateway timeout</h1>Though the server understood your request and attempted to handle it, somehow handling it took longer than it should. Your request has been cancelled - please try again later.</body></html>");
|
||||
long long int ret = Util::getMS();
|
||||
conn->SendNow(H.BuildResponse("504", "Gateway Timeout"));
|
||||
return ret;
|
||||
}
|
||||
|
||||
/// Handles internal requests.
|
||||
void Handle_Internal(HTTP::Parser & H, Socket::Connection * conn){
|
||||
long long int Handle_Internal(HTTP::Parser & H, Socket::Connection * conn){
|
||||
|
||||
std::string url = H.getUrl();
|
||||
|
||||
|
@ -117,8 +121,9 @@ namespace Connector_HTTP {
|
|||
H.SetHeader("Server", "mistserver/" PACKAGE_VERSION "/" + Util::Config::libver);
|
||||
H.SetBody(
|
||||
"<?xml version=\"1.0\"?><!DOCTYPE cross-domain-policy SYSTEM \"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd\"><cross-domain-policy><allow-access-from domain=\"*\" /><site-control permitted-cross-domain-policies=\"all\"/></cross-domain-policy>");
|
||||
long long int ret = Util::getMS();
|
||||
conn->SendNow(H.BuildResponse("200", "OK"));
|
||||
return;
|
||||
return ret;
|
||||
} //crossdomain.xml
|
||||
|
||||
if (url == "/clientaccesspolicy.xml"){
|
||||
|
@ -127,8 +132,9 @@ namespace Connector_HTTP {
|
|||
H.SetHeader("Server", "mistserver/" PACKAGE_VERSION "/" + Util::Config::libver);
|
||||
H.SetBody(
|
||||
"<?xml version=\"1.0\" encoding=\"utf-8\"?><access-policy><cross-domain-access><policy><allow-from http-methods=\"*\" http-request-headers=\"*\"><domain uri=\"*\"/></allow-from><grant-to><resource path=\"/\" include-subpaths=\"true\"/></grant-to></policy></cross-domain-access></access-policy>");
|
||||
long long int ret = Util::getMS();
|
||||
conn->SendNow(H.BuildResponse("200", "OK"));
|
||||
return;
|
||||
return ret;
|
||||
} //clientaccesspolicy.xml
|
||||
|
||||
if ((url.length() > 9 && url.substr(0, 6) == "/info_" && url.substr(url.length() - 3, 3) == ".js")
|
||||
|
@ -192,15 +198,16 @@ namespace Connector_HTTP {
|
|||
response.append("(\"" + streamname + "\"));\n");
|
||||
}
|
||||
H.SetBody(response);
|
||||
long long int ret = Util::getMS();
|
||||
conn->SendNow(H.BuildResponse("200", "OK"));
|
||||
return;
|
||||
return ret;
|
||||
} //embed code generator
|
||||
|
||||
Handle_None(H, conn); //anything else doesn't get handled
|
||||
return Handle_None(H, conn); //anything else doesn't get handled
|
||||
}
|
||||
|
||||
/// Handles requests without associated handler, displaying a nice friendly error message.
|
||||
void Handle_Through_Connector(HTTP::Parser & H, Socket::Connection * conn, std::string & connector){
|
||||
long long int Handle_Through_Connector(HTTP::Parser & H, Socket::Connection * conn, std::string & connector){
|
||||
//create a unique ID based on a hash of the user agent and host, followed by the stream name and connector
|
||||
std::string uid = Secure::md5(H.GetHeader("User-Agent") + conn->getHost()) + "_" + H.GetVar("stream") + "_" + connector;
|
||||
H.SetHeader("X-Stream", H.GetVar("stream"));
|
||||
|
@ -222,7 +229,7 @@ namespace Connector_HTTP {
|
|||
std::cout << "Created new connection " << uid << std::endl;
|
||||
#endif
|
||||
}else{
|
||||
#if DEBUG >= 4
|
||||
#if DEBUG >= 5
|
||||
std::cout << "Re-using connection " << uid << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
@ -241,8 +248,7 @@ namespace Connector_HTTP {
|
|||
tthread::lock_guard<tthread::mutex> guard(connconn[uid]->in_use);
|
||||
//if the server connection is dead, handle as timeout.
|
||||
if ( !connconn.count(uid) || !connconn[uid]->conn->connected()){
|
||||
Handle_Timeout(H, conn);
|
||||
return;
|
||||
return Handle_Timeout(H, conn);
|
||||
}
|
||||
//forward the original request
|
||||
connconn[uid]->conn->SendNow(request);
|
||||
|
@ -270,8 +276,7 @@ namespace Connector_HTTP {
|
|||
//keep trying unless the timeout triggers
|
||||
if (timeout++ > 4000){
|
||||
std::cout << "[20s timeout triggered]" << std::endl;
|
||||
Handle_Timeout(H, conn);
|
||||
return;
|
||||
return Handle_Timeout(H, conn);
|
||||
}else{
|
||||
Util::sleep(5);
|
||||
}
|
||||
|
@ -279,9 +284,9 @@ namespace Connector_HTTP {
|
|||
}
|
||||
if ( !connconn.count(uid) || !connconn[uid]->conn->connected() || !conn->connected()){
|
||||
//failure, disconnect and sent error to user
|
||||
Handle_Timeout(H, conn);
|
||||
return;
|
||||
return Handle_Timeout(H, conn);
|
||||
}else{
|
||||
long long int ret = Util::getMS();
|
||||
//success, check type of response
|
||||
if (H.GetHeader("Content-Length") != ""){
|
||||
//known length - simply re-send the request with added headers and continue
|
||||
|
@ -311,6 +316,7 @@ namespace Connector_HTTP {
|
|||
delete myConn;
|
||||
conn->close();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -383,11 +389,12 @@ namespace Connector_HTTP {
|
|||
}
|
||||
if (Client.Read(conn->Received().get())){
|
||||
std::string handler = getHTTPType(Client);
|
||||
long long int startms = Util::getMS();
|
||||
#if DEBUG >= 4
|
||||
std::cout << "Received request: " << Client.getUrl() << " (" << conn->getSocket() << ") => " << handler << " (" << Client.GetVar("stream")
|
||||
<< ")" << std::endl;
|
||||
long long int startms = Util::getMS();
|
||||
#endif
|
||||
long long int midms = 0;
|
||||
bool closeConnection = false;
|
||||
if (Client.GetHeader("Connection") == "close"){
|
||||
closeConnection = true;
|
||||
|
@ -395,15 +402,16 @@ namespace Connector_HTTP {
|
|||
|
||||
if (handler == "none" || handler == "internal"){
|
||||
if (handler == "internal"){
|
||||
Handle_Internal(Client, conn);
|
||||
midms = Handle_Internal(Client, conn);
|
||||
}else{
|
||||
Handle_None(Client, conn);
|
||||
midms = Handle_None(Client, conn);
|
||||
}
|
||||
}else{
|
||||
Handle_Through_Connector(Client, conn, handler);
|
||||
midms = Handle_Through_Connector(Client, conn, handler);
|
||||
}
|
||||
#if DEBUG >= 4
|
||||
std::cout << "Completed request (" << conn->getSocket() << ") " << handler << " in " << (Util::getMS() - startms) << " ms" << std::endl;
|
||||
long long int nowms = Util::getMS();
|
||||
std::cout << "Completed request " << conn->getSocket() << " " << handler << " in " << (midms - startms) << " ms (processing) / " << (nowms - midms) << " ms (transfer)" << std::endl;
|
||||
#endif
|
||||
if (closeConnection){
|
||||
break;
|
||||
|
|
|
@ -137,7 +137,7 @@ namespace Connector_HTTP {
|
|||
}
|
||||
}
|
||||
if (HTTP_R.Read(conn.Received().get())){
|
||||
#if DEBUG >= 4
|
||||
#if DEBUG >= 5
|
||||
std::cout << "Received request: " << HTTP_R.getUrl() << std::endl;
|
||||
#endif
|
||||
conn.setHost(HTTP_R.GetHeader("X-Origin"));
|
||||
|
@ -192,9 +192,6 @@ namespace Connector_HTTP {
|
|||
std::string manifest = BuildIndex(streamname, Strm.metadata);
|
||||
HTTP_S.SetBody(manifest);
|
||||
conn.SendNow(HTTP_S.BuildResponse("200", "OK"));
|
||||
#if DEBUG >= 3
|
||||
printf("Sent index\n");
|
||||
#endif
|
||||
pending_manifest = false;
|
||||
}else{
|
||||
pending_manifest = true;
|
||||
|
@ -226,7 +223,7 @@ namespace Connector_HTTP {
|
|||
continue;
|
||||
}
|
||||
ss.setBlocking(false);
|
||||
#if DEBUG >= 3
|
||||
#if DEBUG >= 5
|
||||
fprintf(stderr, "Everything connected, starting to send video data...\n");
|
||||
#endif
|
||||
inited = true;
|
||||
|
@ -250,9 +247,6 @@ namespace Connector_HTTP {
|
|||
HTTP_S.SetHeader("Connection", "keep-alive");
|
||||
HTTP_S.SetBody(manifest);
|
||||
conn.SendNow(HTTP_S.BuildResponse("200", "OK"));
|
||||
#if DEBUG >= 3
|
||||
printf("Sent manifest\n");
|
||||
#endif
|
||||
pending_manifest = false;
|
||||
}
|
||||
if ( !receive_marks && Strm.metadata.isMember("length")){
|
||||
|
@ -260,13 +254,7 @@ namespace Connector_HTTP {
|
|||
}
|
||||
if ((Strm.getPacket(0).isMember("keyframe") && !receive_marks) || Strm.lastType() == DTSC::PAUSEMARK){
|
||||
TSBuf.flush();
|
||||
#if DEBUG >= 4
|
||||
fprintf(stderr, "Received a %s fragment of %i bytes.\n", Strm.getPacket(0)["datatype"].asString().c_str(), TSBuf.str().size());
|
||||
#endif
|
||||
if (Flash_RequestPending > 0 && TSBuf.str().size()){
|
||||
#if DEBUG >= 3
|
||||
fprintf(stderr, "Sending a fragment...");
|
||||
#endif
|
||||
HTTP_S.Clean();
|
||||
HTTP_S.protocol = "HTTP/1.1";
|
||||
HTTP_S.SetHeader("Content-Type", "video/mp2t");
|
||||
|
@ -278,9 +266,6 @@ namespace Connector_HTTP {
|
|||
TSBuf.str("");
|
||||
Flash_RequestPending--;
|
||||
PacketNumber = 0;
|
||||
#if DEBUG >= 3
|
||||
fprintf(stderr, "Done\n");
|
||||
#endif
|
||||
}
|
||||
TSBuf.str("");
|
||||
}
|
||||
|
@ -367,9 +352,6 @@ namespace Connector_HTTP {
|
|||
std::string manifest = BuildIndex(streamname, Strm.metadata);
|
||||
HTTP_S.SetBody(manifest);
|
||||
conn.SendNow(HTTP_S.BuildResponse("200", "OK"));
|
||||
#if DEBUG >= 3
|
||||
printf("Sent index\n");
|
||||
#endif
|
||||
pending_manifest = false;
|
||||
}
|
||||
}
|
||||
|
@ -381,17 +363,8 @@ namespace Connector_HTTP {
|
|||
conn.close();
|
||||
ss.SendNow(conn.getStats("HTTP_Live").c_str());
|
||||
ss.close();
|
||||
#if DEBUG >= 1
|
||||
fprintf(stderr, "User %i disconnected.\n", conn.getSocket());
|
||||
if (inited){
|
||||
fprintf(stderr, "Status was: inited\n");
|
||||
}else{
|
||||
if (ready4data){
|
||||
fprintf(stderr, "Status was: ready4data\n");
|
||||
}else{
|
||||
fprintf(stderr, "Status was: connected\n");
|
||||
}
|
||||
}
|
||||
#if DEBUG >= 5
|
||||
fprintf(stderr, "HLS: User %i disconnected.\n", conn.getSocket());
|
||||
#endif
|
||||
return 0;
|
||||
} //Connector_HTTP_Dynamic main function
|
||||
|
@ -415,7 +388,7 @@ int main(int argc, char ** argv){
|
|||
if (myid == 0){ //if new child, start MAINHANDLER
|
||||
return Connector_HTTP::Connector_HTTP_Live(S);
|
||||
}else{ //otherwise, do nothing or output debugging text
|
||||
#if DEBUG >= 3
|
||||
#if DEBUG >= 5
|
||||
fprintf(stderr, "Spawned new process %i for socket %i\n", (int)myid, S.getSocket());
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -55,7 +55,7 @@ namespace Connector_HTTP {
|
|||
}
|
||||
}
|
||||
if (HTTP_R.Read(conn.Received().get())){
|
||||
#if DEBUG >= 4
|
||||
#if DEBUG >= 5
|
||||
std::cout << "Received request: " << HTTP_R.getUrl() << std::endl;
|
||||
#endif
|
||||
conn.setHost(HTTP_R.GetHeader("X-Origin"));
|
||||
|
@ -133,9 +133,6 @@ namespace Connector_HTTP {
|
|||
cmd << "s " << seek_sec << "\n";
|
||||
ss.SendNow(cmd.str().c_str());
|
||||
}
|
||||
#if DEBUG >= 3
|
||||
fprintf(stderr, "Everything connected, starting to send video data...\n");
|
||||
#endif
|
||||
ss.SendNow("p\n");
|
||||
inited = true;
|
||||
}
|
||||
|
@ -173,9 +170,6 @@ namespace Connector_HTTP {
|
|||
}
|
||||
}
|
||||
progressive_has_sent_header = true;
|
||||
#if DEBUG >= 1
|
||||
fprintf(stderr, "Sent progressive FLV header\n");
|
||||
#endif
|
||||
}
|
||||
if ( !isMP3){
|
||||
tag.DTSCLoader(Strm);
|
||||
|
@ -219,7 +213,7 @@ int main(int argc, char ** argv){
|
|||
if (myid == 0){ //if new child, start MAINHANDLER
|
||||
return Connector_HTTP::Connector_HTTP_Progressive(S);
|
||||
}else{ //otherwise, do nothing or output debugging text
|
||||
#if DEBUG >= 3
|
||||
#if DEBUG >= 5
|
||||
fprintf(stderr, "Spawned new process %i for socket %i\n", (int)myid, S.getSocket());
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -132,7 +132,7 @@ namespace Connector_HTTP {
|
|||
}
|
||||
}
|
||||
if (HTTP_R.Read(conn.Received().get())){
|
||||
#if DEBUG >= 4
|
||||
#if DEBUG >= 5
|
||||
std::cout << "Received request: " << HTTP_R.getUrl() << std::endl;
|
||||
#endif
|
||||
conn.setHost(HTTP_R.GetHeader("X-Origin"));
|
||||
|
@ -167,9 +167,6 @@ namespace Connector_HTTP {
|
|||
}
|
||||
tempStr = tempStr.substr(tempStr.find("(") + 1);
|
||||
ReqFragment = atoll(tempStr.substr(0, tempStr.find(")")).c_str());
|
||||
#if DEBUG >= 4
|
||||
printf("Quality: %s, Time %d\n", Quality.c_str(), (ReqFragment / 10000));
|
||||
#endif
|
||||
std::stringstream sstream;
|
||||
sstream << "s " << (ReqFragment / 10000) << "\no \n";
|
||||
ss.SendNow(sstream.str().c_str());
|
||||
|
@ -183,9 +180,6 @@ namespace Connector_HTTP {
|
|||
std::string manifest = BuildManifest(streamname, Strm.metadata);
|
||||
HTTP_S.SetBody(manifest);
|
||||
conn.SendNow(HTTP_S.BuildResponse("200", "OK"));
|
||||
#if DEBUG >= 3
|
||||
printf("Sent manifest\n");
|
||||
#endif
|
||||
pending_manifest = false;
|
||||
}else{
|
||||
pending_manifest = true;
|
||||
|
@ -217,9 +211,6 @@ namespace Connector_HTTP {
|
|||
continue;
|
||||
}
|
||||
ss.setBlocking(false);
|
||||
#if DEBUG >= 3
|
||||
fprintf(stderr, "Everything connected, starting to send video data...\n");
|
||||
#endif
|
||||
inited = true;
|
||||
}
|
||||
unsigned int now = Util::epoch();
|
||||
|
@ -236,9 +227,6 @@ namespace Connector_HTTP {
|
|||
std::string manifest = BuildManifest(streamname, Strm.metadata);
|
||||
HTTP_S.SetBody(manifest);
|
||||
conn.SendNow(HTTP_S.BuildResponse("200", "OK"));
|
||||
#if DEBUG >= 3
|
||||
printf("Sent manifest\n");
|
||||
#endif
|
||||
pending_manifest = false;
|
||||
}
|
||||
if (Strm.lastType() == DTSC::PAUSEMARK){
|
||||
|
@ -246,9 +234,6 @@ namespace Connector_HTTP {
|
|||
fprintf(stderr, "Received a %s fragment of %i bytes.\n", Strm.getPacket(0)["datatype"].asString().c_str(), FlashBufSize);
|
||||
#endif
|
||||
if (Flash_RequestPending > 0 && FlashBufSize){
|
||||
#if DEBUG >= 3
|
||||
fprintf(stderr, "Sending a fragment...");
|
||||
#endif
|
||||
//static std::string btstrp;
|
||||
//btstrp = GenerateBootstrap(streamname, Strm.metadata, ReqFragment, FlashBufTime, Strm.getPacket(0)["time"]);
|
||||
HTTP_S.Clean();
|
||||
|
@ -350,9 +335,6 @@ namespace Connector_HTTP {
|
|||
FlashBuf.pop_front();
|
||||
}
|
||||
Flash_RequestPending--;
|
||||
#if DEBUG >= 3
|
||||
fprintf(stderr, "Done\n");
|
||||
#endif
|
||||
}
|
||||
FlashBuf.clear();
|
||||
FlashBufSize = 0;
|
||||
|
@ -369,9 +351,6 @@ namespace Connector_HTTP {
|
|||
std::string manifest = BuildManifest(streamname, Strm.metadata);
|
||||
HTTP_S.SetBody(manifest);
|
||||
conn.SendNow(HTTP_S.BuildResponse("200", "OK"));
|
||||
#if DEBUG >= 3
|
||||
printf("Sent manifest\n");
|
||||
#endif
|
||||
pending_manifest = false;
|
||||
}
|
||||
}
|
||||
|
@ -405,7 +384,7 @@ int main(int argc, char ** argv){
|
|||
if (myid == 0){ //if new child, start MAINHANDLER
|
||||
return Connector_HTTP::Connector_HTTP_Dynamic(S);
|
||||
}else{ //otherwise, do nothing or output debugging text
|
||||
#if DEBUG >= 3
|
||||
#if DEBUG >= 5
|
||||
fprintf(stderr, "Spawned new process %i for socket %i\n", (int)myid, S.getSocket());
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -67,11 +67,11 @@ int Connector_RTMP::Connector_RTMP(Socket::Connection conn){
|
|||
}
|
||||
Socket.Received().remove(1536);
|
||||
RTMPStream::rec_cnt += 1536;
|
||||
#if DEBUG >= 4
|
||||
#if DEBUG >= 5
|
||||
fprintf(stderr, "Handshake succcess!\n");
|
||||
#endif
|
||||
}else{
|
||||
#if DEBUG >= 1
|
||||
#if DEBUG >= 5
|
||||
fprintf(stderr, "Handshake fail!\n");
|
||||
#endif
|
||||
return 0;
|
||||
|
@ -99,9 +99,6 @@ int Connector_RTMP::Connector_RTMP(Socket::Connection conn){
|
|||
break;
|
||||
}
|
||||
SS.setBlocking(false);
|
||||
#if DEBUG >= 3
|
||||
fprintf(stderr, "Everything connected, starting to send video data...\n");
|
||||
#endif
|
||||
SS.SendNow("p\n");
|
||||
inited = true;
|
||||
}
|
||||
|
@ -213,18 +210,18 @@ void Connector_RTMP::parseChunk(Socket::Buffer & inbuffer){
|
|||
break; //happens when connection breaks unexpectedly
|
||||
case 1: //set chunk size
|
||||
RTMPStream::chunk_rec_max = ntohl(*(int*)next.data.c_str());
|
||||
#if DEBUG >= 4
|
||||
#if DEBUG >= 5
|
||||
fprintf(stderr, "CTRL: Set chunk size: %i\n", RTMPStream::chunk_rec_max);
|
||||
#endif
|
||||
break;
|
||||
case 2: //abort message - we ignore this one
|
||||
#if DEBUG >= 4
|
||||
#if DEBUG >= 5
|
||||
fprintf(stderr, "CTRL: Abort message\n");
|
||||
#endif
|
||||
//4 bytes of stream id to drop
|
||||
break;
|
||||
case 3: //ack
|
||||
#if DEBUG >= 4
|
||||
#if DEBUG >= 8
|
||||
fprintf(stderr, "CTRL: Acknowledgement\n");
|
||||
#endif
|
||||
RTMPStream::snd_window_at = ntohl(*(int*)next.data.c_str());
|
||||
|
@ -241,7 +238,7 @@ void Connector_RTMP::parseChunk(Socket::Buffer & inbuffer){
|
|||
//6 = pingrequest, 4 bytes data
|
||||
//7 = pingresponse, 4 bytes data
|
||||
//we don't need to process this
|
||||
#if DEBUG >= 4
|
||||
#if DEBUG >= 5
|
||||
short int ucmtype = ntohs(*(short int*)next.data.c_str());
|
||||
switch (ucmtype){
|
||||
case 0:
|
||||
|
@ -273,7 +270,7 @@ void Connector_RTMP::parseChunk(Socket::Buffer & inbuffer){
|
|||
}
|
||||
break;
|
||||
case 5: //window size of other end
|
||||
#if DEBUG >= 4
|
||||
#if DEBUG >= 5
|
||||
fprintf(stderr, "CTRL: Window size\n");
|
||||
#endif
|
||||
RTMPStream::rec_window_size = ntohl(*(int*)next.data.c_str());
|
||||
|
@ -281,7 +278,7 @@ void Connector_RTMP::parseChunk(Socket::Buffer & inbuffer){
|
|||
Socket.Send(RTMPStream::SendCTL(3, RTMPStream::rec_cnt)); //send ack (msg 3)
|
||||
break;
|
||||
case 6:
|
||||
#if DEBUG >= 4
|
||||
#if DEBUG >= 5
|
||||
fprintf(stderr, "CTRL: Set peer bandwidth\n");
|
||||
#endif
|
||||
//4 bytes window size, 1 byte limit type (ignored)
|
||||
|
@ -311,34 +308,34 @@ void Connector_RTMP::parseChunk(Socket::Buffer & inbuffer){
|
|||
}
|
||||
}
|
||||
}else{
|
||||
#if DEBUG >= 4
|
||||
#if DEBUG >= 5
|
||||
fprintf(stderr, "Received useless media data\n");
|
||||
#endif
|
||||
Socket.close();
|
||||
}
|
||||
break;
|
||||
case 15:
|
||||
#if DEBUG >= 4
|
||||
#if DEBUG >= 5
|
||||
fprintf(stderr, "Received AFM3 data message\n");
|
||||
#endif
|
||||
break;
|
||||
case 16:
|
||||
#if DEBUG >= 4
|
||||
#if DEBUG >= 5
|
||||
fprintf(stderr, "Received AFM3 shared object\n");
|
||||
#endif
|
||||
break;
|
||||
case 17: {
|
||||
#if DEBUG >= 4
|
||||
#if DEBUG >= 5
|
||||
fprintf(stderr, "Received AFM3 command message\n");
|
||||
#endif
|
||||
if (next.data[0] != 0){
|
||||
next.data = next.data.substr(1);
|
||||
amf3data = AMF::parse3(next.data);
|
||||
#if DEBUG >= 4
|
||||
#if DEBUG >= 5
|
||||
amf3data.Print();
|
||||
#endif
|
||||
}else{
|
||||
#if DEBUG >= 4
|
||||
#if DEBUG >= 5
|
||||
fprintf(stderr, "Received AFM3-0 command message\n");
|
||||
#endif
|
||||
next.data = next.data.substr(1);
|
||||
|
@ -348,7 +345,7 @@ void Connector_RTMP::parseChunk(Socket::Buffer & inbuffer){
|
|||
}
|
||||
break;
|
||||
case 19:
|
||||
#if DEBUG >= 4
|
||||
#if DEBUG >= 5
|
||||
fprintf(stderr, "Received AFM0 shared object\n");
|
||||
#endif
|
||||
break;
|
||||
|
@ -358,7 +355,7 @@ void Connector_RTMP::parseChunk(Socket::Buffer & inbuffer){
|
|||
}
|
||||
break;
|
||||
case 22:
|
||||
#if DEBUG >= 4
|
||||
#if DEBUG >= 5
|
||||
fprintf(stderr, "Received aggregate message\n");
|
||||
#endif
|
||||
break;
|
||||
|
@ -373,7 +370,7 @@ void Connector_RTMP::parseChunk(Socket::Buffer & inbuffer){
|
|||
} //parseChunk
|
||||
|
||||
void Connector_RTMP::sendCommand(AMF::Object & amfreply, int messagetype, int stream_id){
|
||||
#if DEBUG >= 4
|
||||
#if DEBUG >= 8
|
||||
std::cerr << amfreply.Print() << std::endl;
|
||||
#endif
|
||||
if (messagetype == 17){
|
||||
|
@ -384,10 +381,10 @@ void Connector_RTMP::sendCommand(AMF::Object & amfreply, int messagetype, int st
|
|||
} //sendCommand
|
||||
|
||||
void Connector_RTMP::parseAMFCommand(AMF::Object & amfdata, int messagetype, int stream_id){
|
||||
#if DEBUG >= 4
|
||||
#if DEBUG >= 5
|
||||
fprintf(stderr, "Received command: %s\n", amfdata.Print().c_str());
|
||||
#endif
|
||||
#if DEBUG >= 3
|
||||
#if DEBUG >= 8
|
||||
fprintf(stderr, "AMF0 command: %s\n", amfdata.getContentP(0)->StrValue().c_str());
|
||||
#endif
|
||||
if (amfdata.getContentP(0)->StrValue() == "connect"){
|
||||
|
@ -395,7 +392,7 @@ void Connector_RTMP::parseAMFCommand(AMF::Object & amfdata, int messagetype, int
|
|||
if (amfdata.getContentP(2)->getContentP("objectEncoding")){
|
||||
objencoding = amfdata.getContentP(2)->getContentP("objectEncoding")->NumValue();
|
||||
}
|
||||
#if DEBUG >= 4
|
||||
#if DEBUG >= 6
|
||||
int tmpint;
|
||||
if (amfdata.getContentP(2)->getContentP("videoCodecs")){
|
||||
tmpint = (int)amfdata.getContentP(2)->getContentP("videoCodecs")->NumValue();
|
||||
|
@ -489,9 +486,6 @@ void Connector_RTMP::parseAMFCommand(AMF::Object & amfdata, int messagetype, int
|
|||
SS.Send(Socket.getHost().c_str());
|
||||
SS.Send("\n");
|
||||
nostats = true;
|
||||
#if DEBUG >= 4
|
||||
fprintf(stderr, "Connected to buffer, starting to send data...\n");
|
||||
#endif
|
||||
}
|
||||
//send a _result reply
|
||||
AMF::Object amfreply("container", AMF::AMF0_DDV_CONTAINER);
|
||||
|
@ -611,7 +605,7 @@ int main(int argc, char ** argv){
|
|||
if (myid == 0){ //if new child, start MAINHANDLER
|
||||
return Connector_RTMP::Connector_RTMP(S);
|
||||
}else{ //otherwise, do nothing or output debugging text
|
||||
#if DEBUG >= 3
|
||||
#if DEBUG >= 5
|
||||
fprintf(stderr, "Spawned new process %i for socket %i\n", (int)myid, S.getSocket());
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -54,9 +54,6 @@ int TS_Handler(Socket::Connection conn, std::string streamname){
|
|||
break;
|
||||
}
|
||||
ss.SendNow("p\n");
|
||||
#if DEBUG >= 3
|
||||
fprintf(stderr, "Everything connected, starting to send video data...\n");
|
||||
#endif
|
||||
inited = true;
|
||||
}
|
||||
if (ss.spool()){
|
||||
|
@ -175,7 +172,6 @@ int TS_Handler(Socket::Connection conn, std::string streamname){
|
|||
}
|
||||
}
|
||||
}
|
||||
fprintf(stderr, "Exiting\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -194,12 +190,11 @@ int main(int argc, char ** argv){
|
|||
while (server_socket.connected() && conf.is_active){
|
||||
Socket::Connection S = server_socket.accept();
|
||||
if (S.connected()){ //check if the new connection is valid
|
||||
fprintf(stderr, "Incoming connection\n");
|
||||
pid_t myid = fork();
|
||||
if (myid == 0){ //if new child, start MAINHANDLER
|
||||
return TS_Handler(S, conf.getString("streamname"));
|
||||
}else{ //otherwise, do nothing or output debugging text
|
||||
#if DEBUG >= 3
|
||||
#if DEBUG >= 5
|
||||
fprintf(stderr, "Spawned new process %i for socket %i\n", (int)myid, S.getSocket());
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -166,9 +166,6 @@ int main(int argc, char** argv){
|
|||
}
|
||||
++playing;
|
||||
in_out.setBlocking(false);
|
||||
#if DEBUG >= 4
|
||||
std::cerr << "Playing one keyframe" << std::endl;
|
||||
#endif
|
||||
bench = Util::getMS();
|
||||
}
|
||||
break;
|
||||
|
@ -199,7 +196,7 @@ int main(int argc, char** argv){
|
|||
}
|
||||
if (playing == 0){
|
||||
#if DEBUG >= 4
|
||||
std::cerr << "Sending pause_marker (" << (Util::getMS() - bench) << "ms)" << std::endl;
|
||||
std::cerr << "Completed VoD request in MistPlayer (" << (Util::getMS() - bench) << "ms)" << std::endl;
|
||||
#endif
|
||||
pausemark["time"] = source.getJSON()["time"];
|
||||
pausemark.toPacked();
|
||||
|
@ -220,11 +217,11 @@ int main(int argc, char** argv){
|
|||
}
|
||||
StatsSocket.close();
|
||||
in_out.close();
|
||||
#if DEBUG >= 4
|
||||
#if DEBUG >= 5
|
||||
if (Util::epoch() - lasttime < 60){
|
||||
std::cerr << "Player exited (disconnect)." << std::endl;
|
||||
std::cerr << "MistPlayer exited (disconnect)." << std::endl;
|
||||
}else{
|
||||
std::cerr << "Player exited (timeout)." << std::endl;
|
||||
std::cerr << "MistPlayer exited (command timeout)." << std::endl;
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
|
|
Loading…
Add table
Reference in a new issue