Commit 4858dc74 by xiongziliang

修复bug

parent f3f7a962
...@@ -156,7 +156,7 @@ public: ...@@ -156,7 +156,7 @@ public:
if(_sps.empty() || _pps.empty()){ if(_sps.empty() || _pps.empty()){
return TrackInvalid; return TrackInvalid;
} }
return TrackAudio; return TrackVideo;
} }
......
...@@ -73,29 +73,22 @@ RtpParser::RtpParser(const string& sdp) { ...@@ -73,29 +73,22 @@ RtpParser::RtpParser(const string& sdp) {
bool RtpParser::inputRtp(const RtpPacket::Ptr & rtp) { bool RtpParser::inputRtp(const RtpPacket::Ptr & rtp) {
switch (rtp->getTrackType()) { switch (rtp->getTrackType()) {
case TrackVideo: case TrackVideo:{
return inputVideo(rtp);
case TrackAudio:
return inputAudio(rtp);
default:
return false;
}
}
inline bool RtpParser::inputVideo(const RtpPacket::Ptr &rtp) {
if(_videoRtpDecoder){ if(_videoRtpDecoder){
return _videoRtpDecoder->inputRtp(rtp, true); return _videoRtpDecoder->inputRtp(rtp, true);
} }
return false; return false;
}
inline bool RtpParser::inputAudio(const RtpPacket::Ptr &rtp) {
if(_audioRtpDecoder){
return _audioRtpDecoder->inputRtp(rtp, false);
} }
case TrackAudio:{
_audioRtpDecoder->inputRtp(rtp, false);
return false;
}
default:
return false; return false;
}
} }
inline void RtpParser::onGetAudioTrack(const RtspTrack& audio) { inline void RtpParser::onGetAudioTrack(const RtspTrack& audio) {
//生成Track对象 //生成Track对象
_audioTrack = dynamic_pointer_cast<AudioTrack>(Factory::getTrackBySdp(audio.trackSdp)); _audioTrack = dynamic_pointer_cast<AudioTrack>(Factory::getTrackBySdp(audio.trackSdp));
......
...@@ -54,17 +54,27 @@ public: ...@@ -54,17 +54,27 @@ public:
return m_fDuration; return m_fDuration;
} }
/**
* 返回是否完成初始化完毕
* 由于有些rtsp的sdp不包含sps pps信息
* 所以要等待接收到到sps的rtp包后才能完成
* @return
*/
bool isInited() const override{ bool isInited() const override{
return true; bool ret = true;
if(ret && _audioTrack){
ret = _audioTrack->getTrackType() != TrackInvalid;
}
if(ret && _videoTrack){
ret = _videoTrack->getTrackType() != TrackInvalid;
}
return ret;
} }
vector<Track::Ptr> getTracks() const override; vector<Track::Ptr> getTracks() const override;
private: private:
inline void onGetAudioTrack(const RtspTrack &audio); inline void onGetAudioTrack(const RtspTrack &audio);
inline void onGetVideoTrack(const RtspTrack &video); inline void onGetVideoTrack(const RtspTrack &video);
//返回值:true 代表是i帧第一个rtp包
inline bool inputVideo(const RtpPacket::Ptr &rtp);
inline bool inputAudio(const RtpPacket::Ptr &rtp);
private: private:
float m_fDuration = 0; float m_fDuration = 0;
AudioTrack::Ptr _audioTrack; AudioTrack::Ptr _audioTrack;
......
...@@ -166,13 +166,13 @@ public: ...@@ -166,13 +166,13 @@ public:
/** /**
* *
* @param sps 264 sps,带0x00000001头 * @param sps 264 sps,带0x00000001头
* @param pps 264 pps,带0x00000001头 * @param pps 264 pps,带0x00000001头
* @param playload_type rtp playload type 默认96 * @param playload_type rtp playload type 默认96
* @param bitrate 比特率 * @param bitrate 比特率
*/ */
H264Sdp(const string &sps, H264Sdp(const string &strSPS,
const string &pps, const string &strPPS,
int playload_type = 96, int playload_type = 96,
int bitrate = 4000) : Sdp(90000,playload_type) { int bitrate = 4000) : Sdp(90000,playload_type) {
//视频通道 //视频通道
...@@ -183,8 +183,6 @@ public: ...@@ -183,8 +183,6 @@ public:
char strTemp[100]; char strTemp[100];
int profile_level_id = 0; int profile_level_id = 0;
string strSPS = sps.substr(4);
string strPPS = pps.substr(4);
if (strSPS.length() >= 4) { // sanity check if (strSPS.length() >= 4) { // sanity check
profile_level_id = (strSPS[1] << 16) | (strSPS[2] << 8) | strSPS[3]; // profile_idc|constraint_setN_flag|level_idc profile_level_id = (strSPS[1] << 16) | (strSPS[2] << 8) | strSPS[3]; // profile_idc|constraint_setN_flag|level_idc
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论