void MediaBridgeSession::NetStream::doPlay(std::wstring& url,RTMPMediaStream::Listener* listener) { //Log Log("-Play stream [%ls]\n",url.c_str()); //Remove extra data from FMS if (url.find(L"*flv:")==0) //Erase it url.erase(0,5); else if (url.find(L"flv:")==0) //Erase it url.erase(0,4); //Check token if (!sess->ConsumeOutputToken(url)) { //Send error fireOnNetStreamStatus(RTMP::Netstream::Play::StreamNotFound,L"Token invalid"); //Exit return; } //Send reseted status fireOnNetStreamStatus(RTMP::Netstream::Play::Reset,L"Playback reset"); //Send play status fireOnNetStreamStatus(RTMP::Netstream::Play::Start,L"Playback started"); //Add listener AddMediaListener(listener); //Attach Attach(sess); }
/*************************************** * Publish * RTMP event listener **************************************/ void MediaBridgeSession::NetStream::doPublish(std::wstring& url) { //Log Log("-Publish stream [%ls]\n",url.c_str()); //Get participant stream if (!sess->ConsumeInputToken(url)) { //Send error fireOnNetStreamStatus(RTMP::Netstream::Publish::BadName,L"Token invalid"); //Exit return; } //Add this as listener AddMediaListener(sess); //Send publish notification fireOnNetStreamStatus(RTMP::Netstream::Publish::Start,L"Publish started"); }
void MultiConf::NetStream::doSeek(DWORD time) { //Send status fireOnNetStreamStatus(RTMP::Netstream::Seek::Failed,L"Seek not supported"); }
/*************************************** * Publish * RTMP event listener **************************************/ void MultiConf::NetStream::doPublish(std::wstring& url) { //Log Log("-Publish stream [%ls]\n",url.c_str()); //Check if already in use if (opened) { //Send error fireOnNetStreamStatus(RTMP::Netstream::Failed,L"Stream already in use"); //Noting found Error("Stream #%d already in use\n", GetStreamId()); //Exit return; } //Skip the type part "flv:" inserted by FMS size_t i = url.find(L":",0); //If not found if (i==std::wstring::npos) //from the begining i = 0; else //Skip i++; //Get the next "/" size_t j = url.find(L"/",i); //Check if found if (j==std::wstring::npos) { //Send error fireOnNetStreamStatus(RTMP::Netstream::Publish::BadName,L"Wrong format stream name"); //Noting found Error("Wrong format stream name\n"); //Exit return; } //Get type std::wstring type = url.substr(i,j-i); //Get token std::wstring token = url.substr(j+1,url.length()-j); //Check app name if (!type.compare(L"participant")==0) { //Log Error("-Application type name incorrect [%ls]\n",type.c_str()); //Send error fireOnNetStreamStatus(RTMP::Netstream::Publish::BadName,L"Type invalid"); //Nothing done return; } //Get participant stream RTMPMediaStream::Listener *listener = conf->ConsumeParticipantInputToken(token); //Check if found if (!listener) { //Send error fireOnNetStreamStatus(RTMP::Netstream::Publish::BadName,L"Token invalid"); //Exit return; } //Opened opened = true; //Add this as listener AddMediaListener(listener); //Send publish notification fireOnNetStreamStatus(RTMP::Netstream::Publish::Start,L"Publish started"); }
/*************************************** * Play * RTMP event listener **************************************/ void MultiConf::NetStream::doPlay(std::wstring& url,RTMPMediaStream::Listener* listener) { RTMPMediaStream *stream = NULL; //Log Log("-Play stream [%d,%ls]\n",GetStreamId(),url.c_str()); //Check if already in use if (opened) { //Send error fireOnNetStreamStatus(RTMP::Netstream::Failed,L"Stream already in use"); //Noting found Error("Stream #%d already in use\n", GetStreamId()); //Exit return; } //Skip the type part "flv:" inserted by FMS size_t i = url.find(L":",0); //If not found if (i==std::wstring::npos) //from the begining i = 0; else //Skip i++; //Get the next "/" size_t j = url.find(L"/",i); //Check if found if (j==std::wstring::npos) { //Send error fireOnNetStreamStatus(RTMP::Netstream::Play::Failed,L"Wrong format stream name"); //Noting found Error("Wrong format stream name\n"); //Exit return; } //Get type std::wstring type = url.substr(i,j-i); //Get token std::wstring token = url.substr(j+1,url.length()-j); //Check app name if (type.compare(L"participant")==0) { //Get participant stream stream = conf->ConsumeParticipantOutputToken(token); //Wait for intra SetWaitIntra(true); //And rewrite SetRewriteTimestamps(true); } else if (type.compare(L"watcher")==0) { //Get broadcast stream stream = conf->ConsumeBroadcastToken(token); //Wait for intra SetWaitIntra(true); //And rewrite SetRewriteTimestamps(true); } else { //Log Error("-Application type name incorrect [%ls]\n",type.c_str()); //Send error fireOnNetStreamStatus(RTMP::Netstream::Play::Failed,L"Type invalid"); //Nothing done return; } //Check if found if (!stream) { //Send error fireOnNetStreamStatus(RTMP::Netstream::Play::StreamNotFound,L"Token invalid"); //Exit return; } //Opened opened = true; //Send reseted status fireOnNetStreamStatus(RTMP::Netstream::Play::Reset,L"Playback reset"); //Send play status fireOnNetStreamStatus(RTMP::Netstream::Play::Start,L"Playback started"); //Add listener AddMediaListener(listener); //Attach Attach(stream); }