addTrack/inputFrame接口支持返回值;新增全局添加静音音频接口

This commit is contained in:
ziyue
2021-09-27 13:12:53 +08:00
parent 1f99708548
commit e9008afca0
63 changed files with 447 additions and 357 deletions

View File

@@ -32,7 +32,7 @@ public:
* 只会克隆sps pps这些信息 而不会克隆Delegate相关关系
* @param track
*/
virtual void addTrack(const Track::Ptr & track) = 0;
virtual bool addTrack(const Track::Ptr & track) = 0;
/**
* 添加track完毕
@@ -53,6 +53,20 @@ public:
~MediaSinkInterface() override = default;
};
/**
* aac静音音频添加器
*/
class MuteAudioMaker : public FrameDispatcher {
public:
typedef std::shared_ptr<MuteAudioMaker> Ptr;
MuteAudioMaker() = default;
~MuteAudioMaker() override = default;
bool inputFrame(const Frame::Ptr &frame) override;
private:
uint32_t _audio_idx = 0;
};
/**
* 该类的作用是等待Track ready()返回true也就是就绪后再通知派生类进行下一步的操作
* 目的是输入Frame前由Track截取处理下以便获取有效的信息譬如sps pps aa_cfg
@@ -67,14 +81,14 @@ public:
* 输入frame
* @param frame
*/
void inputFrame(const Frame::Ptr &frame) override;
bool inputFrame(const Frame::Ptr &frame) override;
/**
* 添加track内部会调用Track的clone方法
* 只会克隆sps pps这些信息 而不会克隆Delegate相关关系
* @param track
*/
void addTrack(const Track::Ptr & track) override;
bool addTrack(const Track::Ptr & track) override;
/**
* 添加Track完毕如果是单Track会最多等待3秒才会触发onAllTrackReady
@@ -94,13 +108,18 @@ public:
*/
vector<Track::Ptr> getTracks(bool trackReady = true) const override;
/**
* 添加aac静音轨道
*/
bool addMuteAudioTrack();
protected:
/**
* 某track已经准备好其ready()状态返回true
* 此时代表可以获取其例如sps pps等相关信息了
* @param track
*/
virtual void onTrackReady(const Track::Ptr & track) {};
virtual bool onTrackReady(const Track::Ptr & track) { return false; };
/**
* 所有Track已经准备好
@@ -111,7 +130,7 @@ protected:
* 某Track输出frame在onAllTrackReady触发后才会调用此方法
* @param frame
*/
virtual void onTrackFrame(const Frame::Ptr &frame) {};
virtual bool onTrackFrame(const Frame::Ptr &frame) { return false; };
private:
/**
@@ -133,6 +152,7 @@ private:
unordered_map<int,List<Frame::Ptr> > _frame_unread;
unordered_map<int,function<void()> > _track_ready_callback;
Ticker _ticker;
MuteAudioMaker::Ptr _mute_audio_maker;
};