Fixed RTSP input in newMeta build

This commit is contained in:
Thulinma 2020-09-24 18:01:51 +02:00
parent e28743db54
commit f4051b5916
2 changed files with 26 additions and 15 deletions

View file

@ -225,7 +225,7 @@ namespace SDP{
// We simply request interleaved delivery over a trackNo-based identifier. // We simply request interleaved delivery over a trackNo-based identifier.
// No need to set any internal state, parseTransport will handle it all. // No need to set any internal state, parseTransport will handle it all.
std::stringstream tStr; std::stringstream tStr;
tStr << "RTP/AVP/TCP;unicast;interleaved=" << ((trackNo - 1) * 2) << "-" << ((trackNo - 1) * 2 + 1); tStr << "RTP/AVP/TCP;unicast;interleaved=" << (trackNo * 2) << "-" << (trackNo * 2 + 1);
return tStr.str(); return tStr.str();
}else{ }else{
// A little more tricky: we need to find free ports and remember them. // A little more tricky: we need to find free ports and remember them.

View file

@ -169,8 +169,7 @@ namespace Mist{
continue; continue;
} }
if (!atLeastOne && tcpCon){ if (!atLeastOne && tcpCon){
INFO_MSG("Failed to set up transport for track %s, switching transports...", INFO_MSG("Failed to set up transport for track %s, switching transports...", M.getTrackIdentifier(it->first).c_str());
M.getTrackIdentifier(it->first).c_str());
TCPmode = !TCPmode; TCPmode = !TCPmode;
extraHeaders["Transport"] = it->second.generateTransport(it->first, url.host, TCPmode); extraHeaders["Transport"] = it->second.generateTransport(it->first, url.host, TCPmode);
sendCommand("SETUP", lastRequestedSetup, "", &extraHeaders); sendCommand("SETUP", lastRequestedSetup, "", &extraHeaders);
@ -339,19 +338,16 @@ namespace Mist{
size_t trackNo = sdpState.getTrackNoForChannel(chan); size_t trackNo = sdpState.getTrackNoForChannel(chan);
EXTREME_MSG("Received %ub RTP packet #%u on channel %u, time %" PRIu32, len, EXTREME_MSG("Received %ub RTP packet #%u on channel %u, time %" PRIu32, len,
pkt.getSequence(), chan, pkt.getTimeStamp()); pkt.getSequence(), chan, pkt.getTimeStamp());
if ((trackNo == INVALID_TRACK_ID) && (chan % 2) != 1){ if (trackNo == INVALID_TRACK_ID){
WARN_MSG("Received packet for unknown track number on channel %u", chan); if ((chan % 2) != 1){
} WARN_MSG("Received packet for unknown track number on channel %u", chan);
if (trackNo != INVALID_TRACK_ID){ }
sdpState.tracks[trackNo].sorter.rtpSeq = pkt.getSequence(); return true;
} }
if (trackNo != INVALID_TRACK_ID){ //We override the rtpSeq number because in TCP mode packet loss is not a thing.
if (!userSelect.count(trackNo)){ sdpState.tracks[trackNo].sorter.rtpSeq = pkt.getSequence();
userSelect[trackNo].reload(streamName, trackNo, COMM_STATUS_SOURCE | COMM_STATUS_DONOTTRACK); sdpState.handleIncomingRTP(trackNo, pkt);
}
sdpState.handleIncomingRTP(trackNo, pkt);
}
return true; return true;
@ -399,7 +395,22 @@ namespace Mist{
char *pktData; char *pktData;
size_t pktDataLen; size_t pktDataLen;
pkt.getString("data", pktData, pktDataLen); pkt.getString("data", pktData, pktDataLen);
bufferLivePacket(pkt.getTime() + packetOffset, pkt.getInt("offset"), pkt.getTrackId(), pktData, size_t idx = M.trackIDToIndex(pkt.getTrackId(), getpid());
if (idx == INVALID_TRACK_ID){
INFO_MSG("Invalid index for track number %zu", pkt.getTrackId());
}else{
if (!userSelect.count(idx)){
WARN_MSG("Reloading track %zu, index %zu", pkt.getTrackId(), idx);
userSelect[idx].reload(streamName, idx, COMM_STATUS_SOURCE | COMM_STATUS_DONOTTRACK);
}
if (userSelect[idx].getStatus() == COMM_STATUS_REQDISCONNECT){
Util::logExitReason("buffer requested shutdown");
tcpCon.close();
}
}
bufferLivePacket(pkt.getTime() + packetOffset, pkt.getInt("offset"), idx, pktData,
pktDataLen, 0, pkt.getFlag("keyframe")); pktDataLen, 0, pkt.getFlag("keyframe"));
} }