Fixed repushing issues

This commit is contained in:
Thulinma 2017-11-03 14:59:14 +01:00
parent aa559236ee
commit 8e6af4c591
3 changed files with 26 additions and 5 deletions

View file

@ -472,7 +472,7 @@ namespace Mist{
if (!found){
jsonForEach((*itb), itc){
if (found){break;}
for (std::map<unsigned int, DTSC::Track>::iterator trit = myMeta.tracks.begin(); trit != myMeta.tracks.end(); trit++){
for (std::map<unsigned int, DTSC::Track>::reverse_iterator trit = myMeta.tracks.rbegin(); trit != myMeta.tracks.rend(); trit++){
if (trit->second.codec == (*itc).asStringRef() || (*itc).asStringRef() == "*"){
selectedTracks.insert(trit->first);
found = true;
@ -1178,6 +1178,11 @@ namespace Mist{
static int nonVideoCount = 0;
static unsigned int emptyCount = 0;
if (!buffer.size()){
if (isRecording() && myMeta.live){
selectDefaultTracks();
initialSeek();
return false;
}
thisPacket.null();
INFO_MSG("Buffer completely played out");
return true;
@ -1604,9 +1609,13 @@ namespace Mist{
nProxy.userClient.finish();
nProxy.userClient = IPC::sharedClient();
}
if (statsPage.getData()){
statsPage.keepAlive();
}
Util::wait(1000);
streamStatus = Util::getStreamStatus(streamName);
if (streamStatus == STRMSTAT_OFF || streamStatus == STRMSTAT_WAIT || streamStatus == STRMSTAT_READY){
INFO_MSG("Reconnecting to %s buffer... (%u)", streamName.c_str(), streamStatus);
reconnect();
streamStatus = Util::getStreamStatus(streamName);
}

View file

@ -11,6 +11,8 @@
namespace Mist{
OutRTMP::OutRTMP(Socket::Connection & conn) : Output(conn){
lastOutTime = 0;
rtmpOffset = 0;
maxbps = config->getInteger("maxkbps")*128;
if (config->getString("target").size() && config->getString("target").substr(0, 7) == "rtmp://"){
streamName = config->getString("streamname");
@ -263,7 +265,6 @@ namespace Mist{
}
void OutRTMP::sendNext(){
//If there are now more selectable tracks, select the new track and do a seek to the current timestamp
//Set sentHeader to false to force it to send init data
if (myMeta.live && selectedTracks.size() < 2){
@ -284,6 +285,16 @@ namespace Mist{
}
}
if (streamOut.size()){
if (thisPacket.getTime() - rtmpOffset < lastOutTime){
int64_t OLD = rtmpOffset;
rtmpOffset -= (1 + lastOutTime - (thisPacket.getTime() - rtmpOffset));
INFO_MSG("Changing rtmpOffset from %lld to %lld", OLD, rtmpOffset);
realTime = 800;
}
lastOutTime = thisPacket.getTime() - rtmpOffset;
}
char rtmpheader[] ={0, //byte 0 = cs_id | ch_type
0, 0, 0, //bytes 1-3 = timestamp
@ -390,9 +401,9 @@ namespace Mist{
unsigned int timestamp = thisPacket.getTime() - rtmpOffset;
//make sure we don't go negative
if (rtmpOffset > thisPacket.getTime()){
if (rtmpOffset > (int64_t)thisPacket.getTime()){
timestamp = 0;
rtmpOffset = thisPacket.getTime();
rtmpOffset = (int64_t)thisPacket.getTime();
}
bool allow_short = RTMPStream::lastsend.count(4);

View file

@ -18,7 +18,8 @@ namespace Mist {
bool onFinish();
protected:
std::string streamOut;///<When pushing out, the output stream name
uint64_t rtmpOffset;
int64_t rtmpOffset;
uint64_t lastOutTime;
unsigned int maxbps;
void parseVars(std::string data);
std::string app_name;