Code base : live.2013.04.30.tar.gz Question1: RtspServer: An OPTIONS with a proper "Session: XYZ" does not seem to trigger RTSPClientSession::noteLiveness(). Is that a wanted behavior ? If yes, apart from sending RTCP, what would be the best keep-alive from the client? requesting GET_PARAMETER ? If no, could it trigger 'handleCmd_withinSession()' the same way that TEARDOWN/PLAY/PAUSE/GET_PARAMETER/SET_PARAMETER do, so it could 'touch' the session liveness? Question2/Request : In void RTSPServer::RTSPClientSession ::handleCmd_SETUP(RTSPServer::RTSPClientConnection* ourClientConnection, char const* urlPreSuffix, char const* urlSuffix, char const* fullRequestStr) would it be possible to change the many snprintf((char*)ourClientConnection->fResponseBuffer, sizeof ourClientConnection->fResponseBuffer, "RTSP/1.0 200 OK\r\n" "CSeq: %s\r\n" "%s" "Transport: blablabla \r\n" "Session: %08X\r\n\r\n", to use "Session: %08X;timeout=%u\r\n\r\n", ..., fOurSessionId, fReclamationTestSeconds); instead, so the clients can be aware of custom timeouts, and 'ping' OPTIONS & RTCP accordingly ? (if I am mistaken on the usage of 'fReclamationTestSeconds', any suitable value instead ?) Searching the net/list, I found : http://lists.live555.com/pipermail/live-devel/2009-August/011129.html http://lists.live555.com/pipermail/live-devel/2007-August/007292.html It looks like people agreed on it, but 5 years later, it still absent ? Sorry if this has been already discussed and ruled out for a specific reason. Bug: In following code, if "if (NumBytesInNALunit > maxSize) return;" occurs, 'nalUnitCopySize' is not set to 0, 'seiSize' is unset/random, and it will most likely crash in the while loop. Solution : 1: Put 'nalUnitCopySize = 0;' before the return in H264VideoStreamParser::removeEmulationBytes 2: unsigned seiSize = 0; Code: void H264VideoStreamParser::analyze_sei_data() { // Begin by making a copy of the NAL unit data, removing any 'emulation prevention' bytes: u_int8_t sei[SEI_MAX_SIZE]; unsigned seiSize; removeEmulationBytes(sei, sizeof sei, seiSize); unsigned j = 1; // skip the initial byte (forbidden_zero_bit; nal_ref_idc; nal_unit_type); we've already seen it while (j < seiSize) { unsigned payloadType = 0; do { payloadType += sei[j]; ... } void H264VideoStreamParser::removeEmulationBytes(u_int8_t* nalUnitCopy, unsigned maxSize, unsigned& nalUnitCopySize) { u_int8_t* nalUnitOrig = fStartOfFrame + fOutputStartCodeSize; unsigned const NumBytesInNALunit = fTo - nalUnitOrig; if (NumBytesInNALunit > maxSize) return; nalUnitCopySize = 0; ... } Regards, Julien
_______________________________________________ live-devel mailing list live-devel@lists.live555.com http://lists.live555.com/mailman/listinfo/live-devel