修复bug

This commit is contained in:
xiongziliang 2018-10-24 10:03:51 +08:00
parent f3f7a96281
commit 4858dc74ef
4 changed files with 29 additions and 28 deletions

View File

@ -156,7 +156,7 @@ public:
if(_sps.empty() || _pps.empty()){ if(_sps.empty() || _pps.empty()){
return TrackInvalid; return TrackInvalid;
} }
return TrackAudio; return TrackVideo;
} }

View File

@ -73,28 +73,21 @@ 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); if(_videoRtpDecoder){
case TrackAudio: return _videoRtpDecoder->inputRtp(rtp, true);
return inputAudio(rtp); }
return false;
}
case TrackAudio:{
_audioRtpDecoder->inputRtp(rtp, false);
return false;
}
default: default:
return false; return false;
} }
} }
inline bool RtpParser::inputVideo(const RtpPacket::Ptr &rtp) {
if(_videoRtpDecoder){
return _videoRtpDecoder->inputRtp(rtp, true);
}
return false;
}
inline bool RtpParser::inputAudio(const RtpPacket::Ptr &rtp) {
if(_audioRtpDecoder){
return _audioRtpDecoder->inputRtp(rtp, false);
}
return false;
}
inline void RtpParser::onGetAudioTrack(const RtspTrack& audio) { inline void RtpParser::onGetAudioTrack(const RtspTrack& audio) {
//生成Track对象 //生成Track对象

View File

@ -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;

View File

@ -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:
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
} }