Commit bdc1f0cd by xiongziliang

规范SdpAttr成员变量命名

parent c5561228
...@@ -110,13 +110,13 @@ void SdpAttr::load(const string &sdp) { ...@@ -110,13 +110,13 @@ void SdpAttr::load(const string &sdp) {
for (auto &pr : _track_map) { for (auto &pr : _track_map) {
auto &track = *pr.second; auto &track = *pr.second;
if (pr.first == "") { if (pr.first == "") {
track.type = TrackTitle; track._type = TrackTitle;
} else if (pr.first == "video") { } else if (pr.first == "video") {
track.type = TrackVideo; track._type = TrackVideo;
} else if (pr.first == "audio") { } else if (pr.first == "audio") {
track.type = TrackAudio; track._type = TrackAudio;
} else { } else {
track.type = TrackInvalid; track._type = TrackInvalid;
} }
auto it = track._attr.find("range"); auto it = track._attr.find("range");
...@@ -165,7 +165,7 @@ bool SdpAttr::available() const { ...@@ -165,7 +165,7 @@ bool SdpAttr::available() const {
SdpTrack::Ptr SdpAttr::getTrack(TrackType type) const { SdpTrack::Ptr SdpAttr::getTrack(TrackType type) const {
for (auto &pr : _track_map){ for (auto &pr : _track_map){
if(pr.second->type == type){ if(pr.second->_type == type){
return pr.second; return pr.second;
} }
} }
......
...@@ -63,13 +63,13 @@ public: ...@@ -63,13 +63,13 @@ public:
string _fmtp; string _fmtp;
string _control; string _control;
string _control_surffix; string _control_surffix;
TrackType type; TrackType _type;
public: public:
uint8_t interleaved = 0; uint8_t _interleaved = 0;
bool inited = false; bool _inited = false;
uint32_t ssrc = 0; uint32_t _ssrc = 0;
uint16_t seq = 0; uint16_t _seq = 0;
uint32_t timeStamp = 0; uint32_t _time_stamp = 0;
}; };
class SdpAttr { class SdpAttr {
public: public:
......
...@@ -71,31 +71,45 @@ public: ...@@ -71,31 +71,45 @@ public:
} }
virtual uint32_t getSsrc(TrackType trackType) { virtual uint32_t getSsrc(TrackType trackType) {
return _mapTracks[trackType].ssrc; auto track = _sdpAttr.getTrack(trackType);
if(!track){
return 0;
}
return track->_ssrc;
} }
virtual uint16_t getSeqence(TrackType trackType) { virtual uint16_t getSeqence(TrackType trackType) {
return _mapTracks[trackType].seq; auto track = _sdpAttr.getTrack(trackType);
if(!track){
return 0;
}
return track->_seq;
} }
virtual uint32_t getTimestamp(TrackType trackType) { virtual uint32_t getTimestamp(TrackType trackType) {
return _mapTracks[trackType].timeStamp; auto track = _sdpAttr.getTrack(trackType);
if(!track){
return 0;
}
return track->_time_stamp;
} }
virtual void onGetSDP(const string& sdp) { virtual void onGetSDP(const string& sdp) {
//派生类设置该媒体源媒体描述信息 //派生类设置该媒体源媒体描述信息
_strSdp = sdp; _strSdp = sdp;
_sdpAttr.load(sdp);
regist(); regist();
} }
void onWrite(const RtpPacket::Ptr &rtppt, bool keyPos) override { void onWrite(const RtpPacket::Ptr &rtppt, bool keyPos) override {
auto &trackRef = _mapTracks[rtppt->type]; auto track = _sdpAttr.getTrack(rtppt->type);
trackRef.seq = rtppt->sequence; if(track){
trackRef.timeStamp = rtppt->timeStamp; track->_seq = rtppt->sequence;
trackRef.ssrc = rtppt->ssrc; track->_time_stamp = rtppt->timeStamp;
trackRef.type = rtppt->type; track->_ssrc = rtppt->ssrc;
}
_pRing->write(rtppt,keyPos); _pRing->write(rtppt,keyPos);
} }
protected: protected:
unordered_map<int, SdpTrack> _mapTracks; SdpAttr _sdpAttr;
string _strSdp; //媒体描述信息 string _strSdp; //媒体描述信息
RingType::Ptr _pRing; //rtp环形缓冲 RingType::Ptr _pRing; //rtp环形缓冲
}; };
......
...@@ -287,10 +287,6 @@ void RtspPlayer::handleResDESCRIBE(const Parser& parser) { ...@@ -287,10 +287,6 @@ void RtspPlayer::handleResDESCRIBE(const Parser& parser) {
} }
CLEAR_ARR(_aui32SsrcErrorCnt) CLEAR_ARR(_aui32SsrcErrorCnt)
for (auto &track : _aTrackInfo) {
track->ssrc=0;
}
sendSetup(0); sendSetup(0);
} }
//发送SETUP命令 //发送SETUP命令
...@@ -302,7 +298,7 @@ bool RtspPlayer::sendSetup(unsigned int trackIndex) { ...@@ -302,7 +298,7 @@ bool RtspPlayer::sendSetup(unsigned int trackIndex) {
switch (_eType) { switch (_eType) {
case RTP_TCP: { case RTP_TCP: {
StrCaseMap header; StrCaseMap header;
header["Transport"] = StrPrinter << "RTP/AVP/TCP;unicast;interleaved=" << track->type * 2 << "-" << track->type * 2 + 1; header["Transport"] = StrPrinter << "RTP/AVP/TCP;unicast;interleaved=" << track->_type * 2 << "-" << track->_type * 2 + 1;
return sendRtspRequest("SETUP",baseUrl,header); return sendRtspRequest("SETUP",baseUrl,header);
} }
break; break;
...@@ -352,7 +348,7 @@ void RtspPlayer::handleResSETUP(const Parser &parser, unsigned int uiTrackIndex) ...@@ -352,7 +348,7 @@ void RtspPlayer::handleResSETUP(const Parser &parser, unsigned int uiTrackIndex)
if(_eType == RTP_TCP) { if(_eType == RTP_TCP) {
string interleaved = FindField( FindField((strTransport + ";").c_str(), "interleaved=", ";").c_str(), NULL, "-"); string interleaved = FindField( FindField((strTransport + ";").c_str(), "interleaved=", ";").c_str(), NULL, "-");
_aTrackInfo[uiTrackIndex]->interleaved = atoi(interleaved.c_str()); _aTrackInfo[uiTrackIndex]->_interleaved = atoi(interleaved.c_str());
}else{ }else{
const char *strPos = (_eType == RTP_MULTICAST ? "port=" : "server_port=") ; const char *strPos = (_eType == RTP_MULTICAST ? "port=" : "server_port=") ;
auto port_str = FindField((strTransport + ";").c_str(), strPos, ";"); auto port_str = FindField((strTransport + ";").c_str(), strPos, ";");
...@@ -589,7 +585,7 @@ bool RtspPlayer::handleOneRtp(int iTrackidx, unsigned char *pucData, unsigned in ...@@ -589,7 +585,7 @@ bool RtspPlayer::handleOneRtp(int iTrackidx, unsigned char *pucData, unsigned in
auto &track = _aTrackInfo[iTrackidx]; auto &track = _aTrackInfo[iTrackidx];
auto pt_ptr=_pktPool.obtain(); auto pt_ptr=_pktPool.obtain();
auto &rtppt=*pt_ptr; auto &rtppt=*pt_ptr;
rtppt.interleaved = track->interleaved; rtppt.interleaved = track->_interleaved;
rtppt.length = uiLen + 4; rtppt.length = uiLen + 4;
rtppt.mark = pucData[1] >> 7; rtppt.mark = pucData[1] >> 7;
...@@ -603,15 +599,15 @@ bool RtspPlayer::handleOneRtp(int iTrackidx, unsigned char *pucData, unsigned in ...@@ -603,15 +599,15 @@ bool RtspPlayer::handleOneRtp(int iTrackidx, unsigned char *pucData, unsigned in
//ssrc //ssrc
memcpy(&rtppt.ssrc,pucData+8,4);//内存对齐 memcpy(&rtppt.ssrc,pucData+8,4);//内存对齐
rtppt.ssrc = ntohl(rtppt.ssrc); rtppt.ssrc = ntohl(rtppt.ssrc);
rtppt.type = track->type; rtppt.type = track->_type;
if (track->ssrc == 0) { if (track->_ssrc == 0) {
track->ssrc = rtppt.ssrc; track->_ssrc = rtppt.ssrc;
//保存SSRC //保存SSRC
} else if (track->ssrc != rtppt.ssrc) { } else if (track->_ssrc != rtppt.ssrc) {
//ssrc错误 //ssrc错误
WarnL << "ssrc错误"; WarnL << "ssrc错误";
if (_aui32SsrcErrorCnt[iTrackidx]++ > 10) { if (_aui32SsrcErrorCnt[iTrackidx]++ > 10) {
track->ssrc = rtppt.ssrc; track->_ssrc = rtppt.ssrc;
WarnL << "ssrc更换!"; WarnL << "ssrc更换!";
} }
return false; return false;
...@@ -815,7 +811,7 @@ int RtspPlayer::getTrackIndexByControlSuffix(const string &controlSuffix) const{ ...@@ -815,7 +811,7 @@ int RtspPlayer::getTrackIndexByControlSuffix(const string &controlSuffix) const{
} }
int RtspPlayer::getTrackIndexByInterleaved(int interleaved) const{ int RtspPlayer::getTrackIndexByInterleaved(int interleaved) const{
for (unsigned int i = 0; i < _aTrackInfo.size(); i++) { for (unsigned int i = 0; i < _aTrackInfo.size(); i++) {
if (_aTrackInfo[i]->interleaved == interleaved) { if (_aTrackInfo[i]->_interleaved == interleaved) {
return i; return i;
} }
} }
...@@ -824,7 +820,7 @@ int RtspPlayer::getTrackIndexByInterleaved(int interleaved) const{ ...@@ -824,7 +820,7 @@ int RtspPlayer::getTrackIndexByInterleaved(int interleaved) const{
int RtspPlayer::getTrackIndexByTrackType(TrackType trackType) const { int RtspPlayer::getTrackIndexByTrackType(TrackType trackType) const {
for (unsigned int i = 0; i < _aTrackInfo.size(); i++) { for (unsigned int i = 0; i < _aTrackInfo.size(); i++) {
if (_aTrackInfo[i]->type == trackType) { if (_aTrackInfo[i]->_type == trackType) {
return i; return i;
} }
} }
......
...@@ -67,7 +67,7 @@ private: ...@@ -67,7 +67,7 @@ private:
if(_pRtspMediaSrc){ if(_pRtspMediaSrc){
_pRtspMediaSrc->onGetSDP(sdp); _pRtspMediaSrc->onGetSDP(sdp);
} }
_parser.reset(new RtspDemuxer(sdp)); _parser.reset(new RtspDemuxer(sdpAttr));
return true; return true;
} }
void onRecvRTP(const RtpPacket::Ptr &rtppt, const SdpTrack::Ptr &track) override { void onRecvRTP(const RtpPacket::Ptr &rtppt, const SdpTrack::Ptr &track) override {
......
...@@ -512,11 +512,11 @@ bool RtspSession::handleReq_Setup() { ...@@ -512,11 +512,11 @@ bool RtspSession::handleReq_Setup() {
return false; return false;
} }
SdpTrack::Ptr &trackRef = _aTrackInfo[trackIdx]; SdpTrack::Ptr &trackRef = _aTrackInfo[trackIdx];
if (trackRef->inited) { if (trackRef->_inited) {
//已经初始化过该Track //已经初始化过该Track
return false; return false;
} }
trackRef->inited = true; //现在初始化 trackRef->_inited = true; //现在初始化
auto strongRing = _pWeakRing.lock(); auto strongRing = _pWeakRing.lock();
if (!strongRing) { if (!strongRing) {
...@@ -562,9 +562,9 @@ bool RtspSession::handleReq_Setup() { ...@@ -562,9 +562,9 @@ bool RtspSession::handleReq_Setup() {
"x-Dynamic-Rate: 1\r\n\r\n", "x-Dynamic-Rate: 1\r\n\r\n",
_iCseq, SERVER_NAME, _iCseq, SERVER_NAME,
RTSP_VERSION, RTSP_BUILDTIME, RTSP_VERSION, RTSP_BUILDTIME,
dateHeader().data(), trackRef->type * 2, dateHeader().data(), trackRef->_type * 2,
trackRef->type * 2 + 1, trackRef->_type * 2 + 1,
printSSRC(trackRef->ssrc).data(), printSSRC(trackRef->_ssrc).data(),
_strSession.data()); _strSession.data());
SocketHelper::send(_pcBuf, iLen); SocketHelper::send(_pcBuf, iLen);
} }
...@@ -609,7 +609,7 @@ bool RtspSession::handleReq_Setup() { ...@@ -609,7 +609,7 @@ bool RtspSession::handleReq_Setup() {
RTSP_VERSION, RTSP_BUILDTIME, RTSP_VERSION, RTSP_BUILDTIME,
dateHeader().data(), strClientPort.data(), dateHeader().data(), strClientPort.data(),
pSockRtp->get_local_port(), pSockRtcp->get_local_port(), pSockRtp->get_local_port(), pSockRtcp->get_local_port(),
printSSRC(trackRef->ssrc).data(), printSSRC(trackRef->_ssrc).data(),
_strSession.data()); _strSession.data());
SocketHelper::send(_pcBuf, n); SocketHelper::send(_pcBuf, n);
} }
...@@ -630,7 +630,7 @@ bool RtspSession::handleReq_Setup() { ...@@ -630,7 +630,7 @@ bool RtspSession::handleReq_Setup() {
strongSelf->safeShutdown(); strongSelf->safeShutdown();
}); });
} }
int iSrvPort = _pBrdcaster->getPort(trackRef->type); int iSrvPort = _pBrdcaster->getPort(trackRef->_type);
//我们用trackIdx区分rtp和rtcp包 //我们用trackIdx区分rtp和rtcp包
auto pSockRtcp = UDPServer::Instance().getSock(get_local_ip().data(),2*trackIdx + 1,iSrvPort + 1); auto pSockRtcp = UDPServer::Instance().getSock(get_local_ip().data(),2*trackIdx + 1,iSrvPort + 1);
if (!pSockRtcp) { if (!pSockRtcp) {
...@@ -652,7 +652,7 @@ bool RtspSession::handleReq_Setup() { ...@@ -652,7 +652,7 @@ bool RtspSession::handleReq_Setup() {
RTSP_VERSION, RTSP_BUILDTIME, RTSP_VERSION, RTSP_BUILDTIME,
dateHeader().data(), _pBrdcaster->getIP().data(), dateHeader().data(), _pBrdcaster->getIP().data(),
get_local_ip().data(), iSrvPort, pSockRtcp->get_local_port(), get_local_ip().data(), iSrvPort, pSockRtcp->get_local_port(),
udpTTL,printSSRC(trackRef->ssrc).data(), udpTTL,printSSRC(trackRef->_ssrc).data(),
_strSession.data()); _strSession.data());
SocketHelper::send(_pcBuf, n); SocketHelper::send(_pcBuf, n);
} }
...@@ -733,9 +733,9 @@ bool RtspSession::handleReq_Play() { ...@@ -733,9 +733,9 @@ bool RtspSession::handleReq_Play() {
} }
for(auto &track : _aTrackInfo){ for(auto &track : _aTrackInfo){
track->ssrc = pMediaSrc->getSsrc(track->type); track->_ssrc = pMediaSrc->getSsrc(track->_type);
track->seq = pMediaSrc->getSeqence(track->type); track->_seq = pMediaSrc->getSeqence(track->_type);
track->timeStamp = pMediaSrc->getTimestamp(track->type); track->_time_stamp = pMediaSrc->getTimestamp(track->_type);
} }
} }
_bFirstPlay = false; _bFirstPlay = false;
...@@ -749,12 +749,12 @@ bool RtspSession::handleReq_Play() { ...@@ -749,12 +749,12 @@ bool RtspSession::handleReq_Play() {
dateHeader().data(), _strSession.data(),iStamp/1000.0); dateHeader().data(), _strSession.data(),iStamp/1000.0);
for(auto &track : _aTrackInfo){ for(auto &track : _aTrackInfo){
if (track->inited == false) { if (track->_inited == false) {
//还有track没有setup //还有track没有setup
shutdown(); shutdown();
return; return;
} }
iLen += sprintf(_pcBuf + iLen, "url=%s/%s;seq=%d;rtptime=%u,", _strUrl.data(), track->_control_surffix.data(), track->seq,track->timeStamp); iLen += sprintf(_pcBuf + iLen, "url=%s/%s;seq=%d;rtptime=%u,", _strUrl.data(), track->_control_surffix.data(), track->_seq,track->_time_stamp);
} }
iLen -= 1; iLen -= 1;
...@@ -904,9 +904,9 @@ inline bool RtspSession::findStream() { ...@@ -904,9 +904,9 @@ inline bool RtspSession::findStream() {
_pMediaSrc = pMediaSrc; _pMediaSrc = pMediaSrc;
for(auto &track : _aTrackInfo){ for(auto &track : _aTrackInfo){
track->ssrc = pMediaSrc->getSsrc(track->type); track->_ssrc = pMediaSrc->getSsrc(track->_type);
track->seq = pMediaSrc->getSeqence(track->type); track->_seq = pMediaSrc->getSeqence(track->_type);
track->timeStamp = pMediaSrc->getTimestamp(track->type); track->_time_stamp = pMediaSrc->getTimestamp(track->_type);
} }
return true; return true;
} }
......
...@@ -118,7 +118,7 @@ private: ...@@ -118,7 +118,7 @@ private:
} }
inline int getTrackIndexByTrackType(TrackType type) { inline int getTrackIndexByTrackType(TrackType type) {
for (unsigned int i = 0; i < _aTrackInfo.size(); i++) { for (unsigned int i = 0; i < _aTrackInfo.size(); i++) {
if (type == _aTrackInfo[i]->type) { if (type == _aTrackInfo[i]->_type) {
return i; return i;
} }
} }
......
...@@ -49,8 +49,9 @@ public: ...@@ -49,8 +49,9 @@ public:
virtual ~RtspToRtmpMediaSource(); virtual ~RtspToRtmpMediaSource();
virtual void onGetSDP(const string& strSdp) override{ virtual void onGetSDP(const string& strSdp) override{
RtspMediaSource::onGetSDP(strSdp);
try { try {
_pParser.reset(new RtspDemuxer(strSdp)); _pParser.reset(new RtspDemuxer(_sdpAttr));
_pRecorder.reset(new MediaRecorder(getVhost(),getApp(),getId(),_pParser,_bEnableHls,_bEnableMp4)); _pRecorder.reset(new MediaRecorder(getVhost(),getApp(),getId(),_pParser,_bEnableHls,_bEnableMp4));
//todo(xzl) 修复此处 //todo(xzl) 修复此处
// _pParser->setOnAudioCB( std::bind(&RtspToRtmpMediaSource::onGetAAC, this, placeholders::_1)); // _pParser->setOnAudioCB( std::bind(&RtspToRtmpMediaSource::onGetAAC, this, placeholders::_1));
...@@ -59,7 +60,6 @@ public: ...@@ -59,7 +60,6 @@ public:
} catch (exception &ex) { } catch (exception &ex) {
WarnL << ex.what(); WarnL << ex.what();
} }
RtspMediaSource::onGetSDP(strSdp);
} }
virtual void onWrite(const RtpPacket::Ptr &pRtppkt, bool bKeyPos) override{ virtual void onWrite(const RtpPacket::Ptr &pRtppkt, bool bKeyPos) override{
if (_pParser) { if (_pParser) {
...@@ -73,20 +73,9 @@ public: ...@@ -73,20 +73,9 @@ public:
} }
void updateTimeStamp(uint32_t uiStamp) { void updateTimeStamp(uint32_t uiStamp) {
for (auto &pr : _mapTracks) { auto tracks = _sdpAttr.getAvailableTrack();
switch (pr.second.type) { for (auto &track : tracks) {
case TrackAudio: { track->_time_stamp = uiStamp * (track->_samplerate / 1000.0);
//todo(xzl) 修复此处
// pr.second.timeStamp = uiStamp * (_pParser->getAudioSampleRate() / 1000.0);
}
break;
case TrackVideo: {
pr.second.timeStamp = uiStamp * 90;
}
break;
default:
break;
}
} }
} }
......
...@@ -61,7 +61,7 @@ RtspDemuxer::RtspDemuxer(const SdpAttr &attr) { ...@@ -61,7 +61,7 @@ RtspDemuxer::RtspDemuxer(const SdpAttr &attr) {
void RtspDemuxer::loadSdp(const SdpAttr &attr) { void RtspDemuxer::loadSdp(const SdpAttr &attr) {
auto tracks = attr.getAvailableTrack(); auto tracks = attr.getAvailableTrack();
for (auto &track : tracks){ for (auto &track : tracks){
switch (track->type) { switch (track->_type) {
case TrackVideo: { case TrackVideo: {
makeVideoTrack(track); makeVideoTrack(track);
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论