mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2024-10-06 20:23:43 +08:00
完成Track对象与SDP对象的转换
This commit is contained in:
parent
be9af50dbb
commit
b6c64fb4ed
|
@ -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:
|
||||||
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:
|
||||||
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:
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
static Ptr getRtpDecoderById(CodecId codecId,uint32_t ui32SampleRate);
|
static Ptr getRtpDecoderById(CodecId codecId,uint32_t ui32SampleRate);
|
||||||
|
|
||||||
private:
|
|
||||||
FrameRingInterface::Ptr _delegate;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
38
src/Rtsp/RtspEncoder.cpp
Normal file
38
src/Rtsp/RtspEncoder.cpp
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
//
|
||||||
|
// 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 @@
|
||||||
#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:
|
||||||
_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(){}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue
Block a user