Commit 09c1ae87 by xiongziliang

修复rtsp时间戳相关bug

parent 1629d1f6
......@@ -205,7 +205,8 @@ void RtspSession::inputRtspOrRtcp(const char *data,uint64_t len) {
bool RtspSession::handleReq_Options() {
//支持这些命令
int n = sprintf(_pcBuf, "RTSP/1.0 200 OK\r\n"
int n = sprintf(_pcBuf,
"RTSP/1.0 200 OK\r\n"
"CSeq: %d\r\n"
"Server: %s-%0.2f(build in %s)\r\n"
"%s"
......@@ -467,7 +468,8 @@ void RtspSession::onAuthUser(const weak_ptr<RtspSession> &weakSelf,const string
}
}
inline void RtspSession::send_StreamNotFound() {
int n = sprintf(_pcBuf, "RTSP/1.0 404 Stream Not Found\r\n"
int n = sprintf(_pcBuf,
"RTSP/1.0 404 Stream Not Found\r\n"
"CSeq: %d\r\n"
"Server: %s-%0.2f(build in %s)\r\n"
"%s"
......@@ -478,7 +480,8 @@ inline void RtspSession::send_StreamNotFound() {
SocketHelper::send(_pcBuf, n);
}
inline void RtspSession::send_UnsupportedTransport() {
int n = sprintf(_pcBuf, "RTSP/1.0 461 Unsupported Transport\r\n"
int n = sprintf(_pcBuf,
"RTSP/1.0 461 Unsupported Transport\r\n"
"CSeq: %d\r\n"
"Server: %s-%0.2f(build in %s)\r\n"
"%s"
......@@ -490,7 +493,8 @@ inline void RtspSession::send_UnsupportedTransport() {
}
inline void RtspSession::send_SessionNotFound() {
int n = sprintf(_pcBuf, "RTSP/1.0 454 Session Not Found\r\n"
int n = sprintf(_pcBuf,
"RTSP/1.0 454 Session Not Found\r\n"
"CSeq: %d\r\n"
"Server: %s-%0.2f(build in %s)\r\n"
"%s"
......@@ -551,7 +555,8 @@ bool RtspSession::handleReq_Setup() {
switch (_rtpType) {
case PlayerBase::RTP_TCP: {
int iLen = sprintf(_pcBuf, "RTSP/1.0 200 OK\r\n"
int iLen = sprintf(_pcBuf,
"RTSP/1.0 200 OK\r\n"
"CSeq: %d\r\n"
"Server: %s-%0.2f(build in %s)\r\n"
"%s"
......@@ -598,7 +603,8 @@ bool RtspSession::handleReq_Setup() {
//尝试获取客户端nat映射地址
startListenPeerUdpData();
//InfoL << "分配端口:" << srv_port;
int n = sprintf(_pcBuf, "RTSP/1.0 200 OK\r\n"
int n = sprintf(_pcBuf,
"RTSP/1.0 200 OK\r\n"
"CSeq: %d\r\n"
"Server: %s-%0.2f(build in %s)\r\n"
"%s"
......@@ -641,7 +647,8 @@ bool RtspSession::handleReq_Setup() {
}
startListenPeerUdpData();
GET_CONFIG_AND_REGISTER(uint32_t,udpTTL,MultiCast::kUdpTTL);
int n = sprintf(_pcBuf, "RTSP/1.0 200 OK\r\n"
int n = sprintf(_pcBuf,
"RTSP/1.0 200 OK\r\n"
"CSeq: %d\r\n"
"Server: %s-%0.2f(build in %s)\r\n"
"%s"
......@@ -652,7 +659,7 @@ bool RtspSession::handleReq_Setup() {
RTSP_VERSION, RTSP_BUILDTIME,
dateHeader().data(), _pBrdcaster->getIP().data(),
get_local_ip().data(), iSrvPort, pSockRtcp->get_local_port(),
udpTTL,printSSRC(trackRef->_ssrc).data(),
udpTTL, printSSRC(trackRef->_ssrc).data(),
_strSession.data());
SocketHelper::send(_pcBuf, n);
}
......@@ -713,8 +720,12 @@ bool RtspSession::handleReq_Play() {
}
auto pMediaSrc = _pMediaSrc.lock();
uint32_t iStamp = 0;
if(pMediaSrc){
if(!pMediaSrc){
send_StreamNotFound();
shutdown();
return;
}
if (strRange.size() && !_bFirstPlay) {
auto strStart = FindField(strRange.data(), "npt=", "-");
if (strStart == "now") {
......@@ -723,30 +734,20 @@ bool RtspSession::handleReq_Play() {
auto iStartTime = 1000 * atof(strStart.data());
InfoL << "rtsp seekTo(ms):" << iStartTime;
pMediaSrc->seekTo(iStartTime);
iStamp = pMediaSrc->getTimeStamp(TrackInvalid);
}else if(pMediaSrc->getRing()->readerCount() == 1){
//第一个消费者
pMediaSrc->seekTo(0);
iStamp = 0;
}else{
iStamp = pMediaSrc->getTimeStamp(TrackInvalid);
}
for(auto &track : _aTrackInfo){
track->_ssrc = pMediaSrc->getSsrc(track->_type);
track->_seq = pMediaSrc->getSeqence(track->_type);
track->_time_stamp = pMediaSrc->getTimeStamp(track->_type);
}
}
_bFirstPlay = false;
int iLen = sprintf(_pcBuf, "RTSP/1.0 200 OK\r\n"
int iLen = sprintf(_pcBuf,
"RTSP/1.0 200 OK\r\n"
"CSeq: %d\r\n"
"Server: %s-%0.2f(build in %s)\r\n"
"%s"
"Session: %s\r\n"
"Range: npt=%.2f-\r\n"
"RTP-Info: ", _iCseq, SERVER_NAME, RTSP_VERSION, RTSP_BUILDTIME,
dateHeader().data(), _strSession.data(),iStamp/1000.0);
dateHeader().data(), _strSession.data(), pMediaSrc->getTimeStamp(TrackInvalid) / 1000.0);
for(auto &track : _aTrackInfo){
if (track->_inited == false) {
......@@ -754,11 +755,15 @@ bool RtspSession::handleReq_Play() {
shutdown();
return;
}
track->_ssrc = pMediaSrc->getSsrc(track->_type);
track->_seq = pMediaSrc->getSeqence(track->_type);
track->_time_stamp = pMediaSrc->getTimeStamp(track->_type);
iLen += sprintf(_pcBuf + iLen, "url=%s/%s;seq=%d;rtptime=%u,",
_strUrl.data(),
track->_control_surffix.data(),
track->_seq,
track->_time_stamp * track->_samplerate / 1000);
track->_time_stamp * (track->_samplerate / 1000));
}
iLen -= 1;
......@@ -798,14 +803,15 @@ bool RtspSession::handleReq_Pause() {
send_SessionNotFound();
return false;
}
int n = sprintf(_pcBuf, "RTSP/1.0 200 OK\r\n"
int n = sprintf(_pcBuf,
"RTSP/1.0 200 OK\r\n"
"CSeq: %d\r\n"
"Server: %s-%0.2f(build in %s)\r\n"
"%s"
"Session: %s\r\n\r\n", _iCseq, SERVER_NAME, RTSP_VERSION, RTSP_BUILDTIME,
dateHeader().data(), _strSession.data());
SocketHelper::send(_pcBuf, n);
if(_pRtpReader){
if (_pRtpReader) {
_pRtpReader->setReadCB(nullptr);
}
return true;
......@@ -813,13 +819,13 @@ bool RtspSession::handleReq_Pause() {
}
bool RtspSession::handleReq_Teardown() {
int n = sprintf(_pcBuf, "RTSP/1.0 200 OK\r\n"
int n = sprintf(_pcBuf,
"RTSP/1.0 200 OK\r\n"
"CSeq: %d\r\n"
"Server: %s-%0.2f(build in %s)\r\n"
"%s"
"Session: %s\r\n\r\n", _iCseq, SERVER_NAME, RTSP_VERSION, RTSP_BUILDTIME,
dateHeader().data(), _strSession.data());
SocketHelper::send(_pcBuf, n);
TraceL << "播放器断开连接!";
return false;
......@@ -827,7 +833,8 @@ bool RtspSession::handleReq_Teardown() {
bool RtspSession::handleReq_Get() {
_strSessionCookie = _parser["x-sessioncookie"];
int n = sprintf(_pcBuf, "HTTP/1.0 200 OK\r\n"
int n = sprintf(_pcBuf,
"HTTP/1.0 200 OK\r\n"
"%s"
"Connection: close\r\n"
"Cache-Control: no-store\r\n"
......@@ -867,7 +874,8 @@ bool RtspSession::handleReq_Post() {
bool RtspSession::handleReq_SET_PARAMETER() {
//TraceL<<endl;
int n = sprintf(_pcBuf, "RTSP/1.0 200 OK\r\n"
int n = sprintf(_pcBuf,
"RTSP/1.0 200 OK\r\n"
"CSeq: %d\r\n"
"Server: %s-%0.2f(build in %s)\r\n"
"%s"
......@@ -878,7 +886,8 @@ bool RtspSession::handleReq_SET_PARAMETER() {
}
inline void RtspSession::send_NotAcceptable() {
int n = sprintf(_pcBuf, "RTSP/1.0 406 Not Acceptable\r\n"
int n = sprintf(_pcBuf,
"RTSP/1.0 406 Not Acceptable\r\n"
"CSeq: %d\r\n"
"Server: %s-%0.2f(build in %s)\r\n"
"%s"
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论