添加工厂类 统一管理

This commit is contained in:
xiongziliang
2018-10-24 09:23:57 +08:00
parent 68fc3bdcf8
commit 92ea956730
9 changed files with 184 additions and 180 deletions

View File

@@ -29,6 +29,7 @@
#include "RtpParser.h"
#include "Util/base64.h"
#include "H264/SPSParser.h"
#include "Common/Factory.h"
using namespace std;
@@ -97,10 +98,10 @@ inline bool RtpParser::inputAudio(const RtpPacket::Ptr &rtp) {
inline void RtpParser::onGetAudioTrack(const RtspTrack& audio) {
//生成Track对象
_audioTrack = dynamic_pointer_cast<AudioTrack>(Track::getTrackBySdp(audio.trackSdp));
_audioTrack = dynamic_pointer_cast<AudioTrack>(Factory::getTrackBySdp(audio.trackSdp));
if(_audioTrack){
//生成RtpCodec对象以便解码rtp
_audioRtpDecoder = RtpCodec::getRtpDecoderById(_audioTrack->getCodecId(),_audioTrack->getAudioSampleRate());
_audioRtpDecoder = Factory::getRtpDecoderById(_audioTrack->getCodecId(),_audioTrack->getAudioSampleRate());
if(_audioRtpDecoder){
//设置rtp解码器代理生成的frame写入该Track
_audioRtpDecoder->setDelegate(_audioTrack);
@@ -110,10 +111,10 @@ inline void RtpParser::onGetAudioTrack(const RtspTrack& audio) {
inline void RtpParser::onGetVideoTrack(const RtspTrack& video) {
//生成Track对象
_videoTrack = dynamic_pointer_cast<VideoTrack>(Track::getTrackBySdp(video.trackSdp));
_videoTrack = dynamic_pointer_cast<VideoTrack>(Factory::getTrackBySdp(video.trackSdp));
if(_videoTrack){
//生成RtpCodec对象以便解码rtp
_videoRtpDecoder = RtpCodec::getRtpDecoderById(_videoTrack->getCodecId(),90000);
_videoRtpDecoder = Factory::getRtpDecoderById(_videoTrack->getCodecId(),90000);
if(_videoRtpDecoder){
//设置rtp解码器代理生成的frame写入该Track
_videoRtpDecoder->setDelegate(_videoTrack);

View File

@@ -1,38 +1,22 @@
//
// Created by xzl on 2018/10/23.
//
#include "RtspSdp.h"
#include "RtspSdp.h"
#include "Common/Factory.h"
namespace ZL{
namespace Rtsp{
void Sdp::createRtpEncoder(uint32_t ssrc, int mtu) {
_encoder = Factory::getRtpEncoderById(getCodecId(),
ssrc,
mtu,
_sample_rate,
_playload_type,
getTrackType() * 2);
}
Sdp::Ptr Sdp::getSdpByTrack(const Track::Ptr &track) {
switch (track->getCodecId()){
case CodecH264:{
H264Track::Ptr h264Track = dynamic_pointer_cast<H264Track>(track);
if(!h264Track){
return nullptr;
}
return std::make_shared<H264Sdp>(h264Track->getSps(),h264Track->getPps());
void RtspMaker::addTrack(const Track::Ptr &track, uint32_t ssrc, int mtu) {
if (track->getCodecId() == CodecInvalid) {
addTrack(std::make_shared<TitleSdp>(), ssrc, mtu);
} else {
Sdp::Ptr sdp = Factory::getSdpByTrack(track);
if (sdp) {
addTrack(sdp, ssrc, mtu);
}
case CodecAAC:{
AACTrack::Ptr aacTrack = dynamic_pointer_cast<AACTrack>(track);
if(!aacTrack){
return nullptr;
}
return std::make_shared<AACSdp>(aacTrack->getAacCfg(),aacTrack->getAudioSampleRate());
}
default:
return nullptr;
}
}
}
}

View File

@@ -30,13 +30,6 @@ public:
_playload_type = playload_type;
}
/**
* 根据Track生成SDP对象
* @param track 媒体信息
* @return 返回sdp对象
*/
static Ptr getSdpByTrack(const Track::Ptr &track);
virtual ~Sdp(){}
/**
@@ -115,14 +108,7 @@ public:
* @param ssrc 打包器ssrc可以为0
* @param mtu mtu大小一般小于1500字节推荐1400
*/
virtual void createRtpEncoder(uint32_t ssrc, int mtu) {
_encoder = RtpCodec::getRtpEncoderById(getCodecId(),
ssrc,
mtu,
_sample_rate,
_playload_type,
getTrackType() * 2);
}
virtual void createRtpEncoder(uint32_t ssrc, int mtu);
private:
RtpCodec::Ptr _encoder;
uint8_t _playload_type;
@@ -311,16 +297,7 @@ public:
* @param ssrc 媒体rtp ssrc
* @param mtu 媒体rtp mtu
*/
void addTrack(const Track::Ptr & track,uint32_t ssrc = 0,int mtu = 1400) {
if(track->getCodecId() == CodecInvalid){
addTrack(std::make_shared<TitleSdp>(),ssrc,mtu);
} else {
Sdp::Ptr sdp = Sdp::getSdpByTrack(track);
if(sdp){
addTrack(sdp,ssrc,mtu);
}
}
}
void addTrack(const Track::Ptr & track,uint32_t ssrc = 0,int mtu = 1400) ;
/**
* 获取完整的SDP字符串