Merge branch 'development' into LTS_development

# Conflicts:
#	src/output/output.cpp
This commit is contained in:
Thulinma 2018-06-12 11:25:59 +02:00
commit ebdaf6e063
2 changed files with 34 additions and 10 deletions

View file

@ -193,7 +193,7 @@ bool Util::startInput(std::string streamname, std::string filename, bool forkFir
//Note: this uses the _whole_ stream name, including + (if any). //Note: this uses the _whole_ stream name, including + (if any).
//This means "test+a" and "test+b" have separate locks and do not interact with each other. //This means "test+a" and "test+b" have separate locks and do not interact with each other.
uint8_t streamStat = getStreamStatus(streamname); uint8_t streamStat = getStreamStatus(streamname);
while (streamStat != STRMSTAT_OFF && streamStat != STRMSTAT_READY){ while (streamStat != STRMSTAT_OFF && streamStat != STRMSTAT_READY && (!isProvider || streamStat != STRMSTAT_WAIT)){
if (streamStat == STRMSTAT_BOOT && overrides.count("throughboot")){ if (streamStat == STRMSTAT_BOOT && overrides.count("throughboot")){
break; break;
} }

View file

@ -308,6 +308,8 @@ namespace Mist{
bool Output::isReadyForPlay(){ bool Output::isReadyForPlay(){
if (isPushing()){return true;} if (isPushing()){return true;}
if (!isInitialized){initialize();}
if (!myMeta.tracks.size()){updateMeta();}
if (myMeta.tracks.size()){ if (myMeta.tracks.size()){
if (!selectedTracks.size()){ if (!selectedTracks.size()){
selectDefaultTracks(); selectDefaultTracks();
@ -1663,8 +1665,6 @@ namespace Mist{
std::string strmSource; std::string strmSource;
// Initialize the stream source if needed, connect to it // Initialize the stream source if needed, connect to it
initialize();
waitForStreamPushReady(); waitForStreamPushReady();
//pull the source setting from metadata //pull the source setting from metadata
strmSource = myMeta.sourceURI; strmSource = myMeta.sourceURI;
@ -1727,13 +1727,7 @@ namespace Mist{
MEDIUM_MSG("Current status for %s buffer is %u", streamName.c_str(), streamStatus); MEDIUM_MSG("Current status for %s buffer is %u", streamName.c_str(), streamStatus);
while (streamStatus != STRMSTAT_WAIT && streamStatus != STRMSTAT_READY && keepGoing()){ while (streamStatus != STRMSTAT_WAIT && streamStatus != STRMSTAT_READY && keepGoing()){
INFO_MSG("Waiting for %s buffer to be ready... (%u)", streamName.c_str(), streamStatus); INFO_MSG("Waiting for %s buffer to be ready... (%u)", streamName.c_str(), streamStatus);
if (nProxy.userClient.getData()){ disconnect();
nProxy.userClient.finish();
nProxy.userClient = IPC::sharedClient();
}
if (statsPage.getData()){
statsPage.keepAlive();
}
Util::wait(1000); Util::wait(1000);
streamStatus = Util::getStreamStatus(streamName); streamStatus = Util::getStreamStatus(streamName);
if (streamStatus == STRMSTAT_OFF || streamStatus == STRMSTAT_WAIT || streamStatus == STRMSTAT_READY){ if (streamStatus == STRMSTAT_OFF || streamStatus == STRMSTAT_WAIT || streamStatus == STRMSTAT_READY){
@ -1742,6 +1736,36 @@ namespace Mist{
streamStatus = Util::getStreamStatus(streamName); streamStatus = Util::getStreamStatus(streamName);
} }
} }
if (streamStatus == STRMSTAT_WAIT || streamStatus == STRMSTAT_READY){
if (!myMeta.sourceURI.size()){
char pageId[NAME_BUFFER_SIZE];
snprintf(pageId, NAME_BUFFER_SIZE, SHM_STREAM_INDEX, streamName.c_str());
nProxy.metaPages[0].init(pageId, DEFAULT_STRM_PAGE_SIZE);
if (nProxy.metaPages[0].mapped){
IPC::semaphore * liveSem = 0;
static char liveSemName[NAME_BUFFER_SIZE];
snprintf(liveSemName, NAME_BUFFER_SIZE, SEM_LIVE, streamName.c_str());
liveSem = new IPC::semaphore(liveSemName, O_RDWR, ACCESSPERMS, 1, !myMeta.live);
if (*liveSem){
liveSem->wait();
}else{
delete liveSem;
liveSem = 0;
}
DTSC::Packet tmpMeta(nProxy.metaPages[0].mapped, nProxy.metaPages[0].len, true);
if (tmpMeta.getVersion()){
DTSC::Meta reMeta;
reMeta.reinit(tmpMeta);
myMeta.sourceURI = reMeta.sourceURI;
}
if (liveSem){
liveSem->post();
delete liveSem;
liveSem = 0;
}
}
}
}
} }
} }