支持bitrate

This commit is contained in:
xiongziliang
2020-12-05 12:22:17 +08:00
parent 42679cdf98
commit 55cf411c1e
23 changed files with 102 additions and 52 deletions

View File

@@ -185,7 +185,7 @@ Sdp::Ptr AACTrack::getSdp() {
WarnL << getCodecName() << " Track未准备好";
return nullptr;
}
return std::make_shared<AACSdp>(getAacCfg(),getAudioSampleRate(), getAudioChannel());
return std::make_shared<AACSdp>(getAacCfg(), getAudioSampleRate(), getAudioChannel(), getBitRate() / 1024);
}
}//namespace mediakit

View File

@@ -177,10 +177,12 @@ public:
AACSdp(const string &aac_cfg,
int sample_rate,
int channels,
int payload_type = 98,
int bitrate = 128) : Sdp(sample_rate,payload_type){
int bitrate = 128,
int payload_type = 98) : Sdp(sample_rate,payload_type){
_printer << "m=audio 0 RTP/AVP " << payload_type << "\r\n";
_printer << "b=AS:" << bitrate << "\r\n";
if (bitrate) {
_printer << "b=AS:" << bitrate << "\r\n";
}
_printer << "a=rtpmap:" << payload_type << " MPEG4-GENERIC/" << sample_rate << "/" << channels << "\r\n";
string configStr;

View File

@@ -17,7 +17,7 @@ Sdp::Ptr G711Track::getSdp() {
WarnL << getCodecName() << " Track未准备好";
return nullptr;
}
return std::make_shared<G711Sdp>(getCodecId(), getAudioSampleRate(), getAudioChannel());
return std::make_shared<G711Sdp>(getCodecId(), getAudioSampleRate(), getAudioChannel(), getBitRate() / 1024);
}
}//namespace mediakit

View File

@@ -48,9 +48,12 @@ public:
G711Sdp(CodecId codecId,
int sample_rate,
int channels,
int payload_type = 98,
int bitrate = 128) : Sdp(sample_rate,payload_type), _codecId(codecId){
int bitrate = 128,
int payload_type = 98) : Sdp(sample_rate,payload_type), _codecId(codecId){
_printer << "m=audio 0 RTP/AVP " << payload_type << "\r\n";
if (bitrate) {
_printer << "b=AS:" << bitrate << "\r\n";
}
_printer << "a=rtpmap:" << payload_type << (codecId == CodecG711A ? " PCMA/" : " PCMU/") << sample_rate << "/" << channels << "\r\n";
_printer << "a=control:trackID=" << (int)TrackAudio << "\r\n";
}

View File

@@ -123,7 +123,7 @@ Sdp::Ptr H264Track::getSdp() {
WarnL << getCodecName() << " Track未准备好";
return nullptr;
}
return std::make_shared<H264Sdp>(getSps(),getPps());
return std::make_shared<H264Sdp>(getSps(), getPps(), getBitRate() / 1024);
}
}//namespace mediakit

View File

@@ -292,11 +292,13 @@ public:
*/
H264Sdp(const string &strSPS,
const string &strPPS,
int payload_type = 96,
int bitrate = 4000) : Sdp(90000,payload_type) {
int bitrate = 4000,
int payload_type = 96) : Sdp(90000,payload_type) {
//视频通道
_printer << "m=video 0 RTP/AVP " << payload_type << "\r\n";
_printer << "b=AS:" << bitrate << "\r\n";
if (bitrate) {
_printer << "b=AS:" << bitrate << "\r\n";
}
_printer << "a=rtpmap:" << payload_type << " H264/" << 90000 << "\r\n";
_printer << "a=fmtp:" << payload_type << " packetization-mode=1; profile-level-id=";

View File

@@ -55,7 +55,7 @@ Sdp::Ptr H265Track::getSdp() {
WarnL << getCodecName() << " Track未准备好";
return nullptr;
}
return std::make_shared<H265Sdp>(getVps(),getSps(),getPps());
return std::make_shared<H265Sdp>(getVps(), getSps(), getPps(), getBitRate() / 1024);
}
}//namespace mediakit

View File

@@ -321,11 +321,13 @@ public:
H265Sdp(const string &strVPS,
const string &strSPS,
const string &strPPS,
int payload_type = 96,
int bitrate = 4000) : Sdp(90000,payload_type) {
int bitrate = 4000,
int payload_type = 96) : Sdp(90000,payload_type) {
//视频通道
_printer << "m=video 0 RTP/AVP " << payload_type << "\r\n";
_printer << "b=AS:" << bitrate << "\r\n";
if (bitrate) {
_printer << "b=AS:" << bitrate << "\r\n";
}
_printer << "a=rtpmap:" << payload_type << " H265/" << 90000 << "\r\n";
_printer << "a=fmtp:" << payload_type << " ";
_printer << "sprop-vps=";

View File

@@ -17,7 +17,7 @@ Sdp::Ptr OpusTrack::getSdp() {
WarnL << getCodecName() << " Track未准备好";
return nullptr;
}
return std::make_shared<OpusSdp>(getAudioSampleRate(), getAudioChannel());
return std::make_shared<OpusSdp>(getAudioSampleRate(), getAudioChannel(), getBitRate() / 1024);
}
}//namespace mediakit

View File

@@ -46,9 +46,12 @@ public:
*/
OpusSdp(int sample_rate,
int channels,
int payload_type = 98,
int bitrate = 128) : Sdp(sample_rate,payload_type){
int bitrate = 128,
int payload_type = 98) : Sdp(sample_rate,payload_type){
_printer << "m=audio 0 RTP/AVP " << payload_type << "\r\n";
if (bitrate) {
_printer << "b=AS:" << bitrate << "\r\n";
}
_printer << "a=rtpmap:" << payload_type << " opus/" << sample_rate << "/" << channels << "\r\n";
_printer << "a=control:trackID=" << (int)TrackAudio << "\r\n";
}

View File

@@ -32,7 +32,6 @@ public:
/**
* 是否准备好准备好才能获取譬如sps pps等信息
* @return
*/
virtual bool ready() = 0;
@@ -40,7 +39,6 @@ public:
* 克隆接口,用于复制本对象用
* 在调用该接口时只会复制派生类的信息
* 环形缓存和代理关系不能拷贝,否则会关系紊乱
* @return
*/
virtual Track::Ptr clone() = 0;
@@ -50,12 +48,28 @@ public:
*/
virtual Sdp::Ptr getSdp() = 0;
/**
* 返回比特率
* @return 比特率
*/
virtual int getBitRate() const { return _bit_rate; }
/**
* 设置比特率
* @param bit_rate 比特率
*/
virtual void setBitRate(int bit_rate) { _bit_rate = bit_rate; }
/**
* 复制拷贝,只能拷贝派生类的信息,
* 环形缓存和代理关系不能拷贝,否则会关系紊乱
* @param that
*/
Track(const Track &that){}
Track(const Track &that){
_bit_rate = that._bit_rate;
}
private:
int _bit_rate = 0;
};
/**
@@ -67,19 +81,16 @@ public:
/**
* 返回视频高度
* @return
*/
virtual int getVideoHeight() const {return 0;};
/**
* 返回视频宽度
* @return
*/
virtual int getVideoWidth() const {return 0;};
/**
* 返回视频fps
* @return
*/
virtual float getVideoFps() const {return 0;};
};
@@ -93,19 +104,16 @@ public:
/**
* 返回音频采样率
* @return
*/
virtual int getAudioSampleRate() const {return 0;};
/**
* 返回音频采样位数一般为16或8
* @return
*/
virtual int getAudioSampleBit() const {return 0;};
/**
* 返回音频通道数
* @return
*/
virtual int getAudioChannel() const {return 0;};
};