Commit b6c64fb4 by xiongziliang

完成Track对象与SDP对象的转换

parent be9af50d
...@@ -95,7 +95,6 @@ public: ...@@ -95,7 +95,6 @@ public:
virtual void inputFrame(const Frame::Ptr &frame) = 0; virtual void inputFrame(const Frame::Ptr &frame) = 0;
}; };
class FrameRing : public FrameRingInterface{ class FrameRing : public FrameRingInterface{
public: public:
typedef std::shared_ptr<FrameRing> Ptr; typedef std::shared_ptr<FrameRing> Ptr;
...@@ -132,6 +131,53 @@ protected: ...@@ -132,6 +131,53 @@ protected:
RingType::Ptr _frameRing; RingType::Ptr _frameRing;
}; };
class FrameRingInterfaceDelegate : public FrameRingInterface {
public:
typedef std::shared_ptr<FrameRingInterfaceDelegate> Ptr;
FrameRingInterfaceDelegate(){
_delegate = std::make_shared<FrameRing>();
}
virtual ~FrameRingInterfaceDelegate(){}
void setDelegate(const FrameRingInterface::Ptr &delegate){
_delegate = delegate;
}
/**
* 获取帧环形缓存
* @return
*/
FrameRingInterface::RingType::Ptr getFrameRing() const override {
if(_delegate){
return _delegate->getFrameRing();
}
return nullptr;
}
/**
* 设置帧环形缓存
* @param ring
*/
void setFrameRing(const FrameRingInterface::RingType::Ptr &ring) override {
if(_delegate){
_delegate->setFrameRing(ring);
}
}
/**
* 写入帧数据
* @param frame 帧
*/
void inputFrame(const Frame::Ptr &frame) override{
if(_delegate){
_delegate->inputFrame(frame);
}
}
private:
FrameRingInterface::Ptr _delegate;
};
/** /**
* 264帧类 * 264帧类
*/ */
......
...@@ -156,46 +156,12 @@ protected: ...@@ -156,46 +156,12 @@ protected:
ResourcePool<RtpPacket> m_rtpPool; ResourcePool<RtpPacket> m_rtpPool;
}; };
class RtpCodec : public RtpRing, public FrameRingInterface , public CodecInfo{ class RtpCodec : public RtpRing, public FrameRingInterfaceDelegate , public CodecInfo{
public: public:
typedef std::shared_ptr<RtpCodec> Ptr; typedef std::shared_ptr<RtpCodec> Ptr;
RtpCodec(){} RtpCodec(){}
virtual ~RtpCodec(){} virtual ~RtpCodec(){}
void setDelegate(const FrameRingInterface::Ptr &delegate){
_delegate = delegate;
}
/**
* 获取帧环形缓存
* @return
*/
FrameRingInterface::RingType::Ptr getFrameRing() const override {
if(_delegate){
return _delegate->getFrameRing();
}
return nullptr;
}
/**
* 设置帧环形缓存
* @param ring
*/
void setFrameRing(const FrameRingInterface::RingType::Ptr &ring) override {
if(_delegate){
_delegate->setFrameRing(ring);
}
}
/**
* 写入帧数据
* @param frame 帧
*/
void inputFrame(const Frame::Ptr &frame) override{
if(_delegate){
_delegate->inputFrame(frame);
}
}
/** /**
* 根据CodecId生成Rtp打包器 * 根据CodecId生成Rtp打包器
* @param codecId * @param codecId
...@@ -220,9 +186,6 @@ public: ...@@ -220,9 +186,6 @@ public:
* @return * @return
*/ */
static Ptr getRtpDecoderById(CodecId codecId,uint32_t ui32SampleRate); static Ptr getRtpDecoderById(CodecId codecId,uint32_t ui32SampleRate);
private:
FrameRingInterface::Ptr _delegate;
}; };
......
//
// Created by xzl on 2018/10/23.
//
#include "RtspEncoder.h"
namespace ZL{
namespace Rtsp{
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());
}
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;
}
}
}
}
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "RTP/H264RtpCodec.h" #include "RTP/H264RtpCodec.h"
#include "RTP/AACRtpCodec.h" #include "RTP/AACRtpCodec.h"
#include "Util/base64.h" #include "Util/base64.h"
#include "Player/Track.h"
namespace ZL{ namespace ZL{
namespace Rtsp{ namespace Rtsp{
...@@ -28,6 +29,14 @@ public: ...@@ -28,6 +29,14 @@ public:
_sample_rate = sample_rate; _sample_rate = sample_rate;
_playload_type = playload_type; _playload_type = playload_type;
} }
/**
* 根据Track生成SDP对象
* @param track 媒体信息
* @return 返回sdp对象
*/
static Ptr getSdpByTrack(const Track::Ptr &track);
virtual ~Sdp(){} virtual ~Sdp(){}
/** /**
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论