Commit be9af50d by xiongziliang

完成Rtp解码器与Track之间的帧数据传递

parent 452f150f
......@@ -156,12 +156,46 @@ protected:
ResourcePool<RtpPacket> m_rtpPool;
};
class RtpCodec : public RtpRing, public FrameRing , public CodecInfo{
class RtpCodec : public RtpRing, public FrameRingInterface , public CodecInfo{
public:
typedef std::shared_ptr<RtpCodec> Ptr;
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打包器
* @param codecId
......@@ -186,6 +220,9 @@ public:
* @return
*/
static Ptr getRtpDecoderById(CodecId codecId,uint32_t ui32SampleRate);
private:
FrameRingInterface::Ptr _delegate;
};
......
......@@ -96,16 +96,28 @@ 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));
if(_audioTrack){
//生成RtpCodec对象以便解码rtp
_audioRtpDecoder = RtpCodec::getRtpDecoderById(_audioTrack->getCodecId(),_audioTrack->getAudioSampleRate());
if(_audioRtpDecoder){
//设置rtp解码器代理,生成的frame写入该Track
_audioRtpDecoder->setDelegate(_audioTrack);
}
}
}
inline void RtpParser::onGetVideoTrack(const RtspTrack& video) {
//生成Track对象
_videoTrack = dynamic_pointer_cast<VideoTrack>(Track::getTrackBySdp(video.trackSdp));
if(_videoTrack){
//生成RtpCodec对象以便解码rtp
_videoRtpDecoder = RtpCodec::getRtpDecoderById(_videoTrack->getCodecId(),90000);
if(_videoRtpDecoder){
//设置rtp解码器代理,生成的frame写入该Track
_videoRtpDecoder->setDelegate(_videoTrack);
}
}
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论