修复bug
This commit is contained in:
parent
f3f7a96281
commit
4858dc74ef
|
|
@ -156,7 +156,7 @@ public:
|
||||||
if(_sps.empty() || _pps.empty()){
|
if(_sps.empty() || _pps.empty()){
|
||||||
return TrackInvalid;
|
return TrackInvalid;
|
||||||
}
|
}
|
||||||
return TrackAudio;
|
return TrackVideo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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对象
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue