WebRtc Stream 里封装了AudioTrack和VideoTrack Vector. WebRtc的 A/V Track 其实就是 Video/Audio Source 和一些状态。 Track的状态定义在 MediaStreamTrack
template <typename T>
class MediaStreamTrack : public Notifier<T> {
public:
typedef typename T::TrackState TypedTrackState;
std::string id() const override { return id_; }
MediaStreamTrackInterface::TrackState state() const override {
return state_;
}
bool enabled() const override { return enabled_; }
bool set_enabled(bool enable) override {
bool fire_on_change = (enable != enabled_);
enabled_ = enable;
if (fire_on_change) {
Notifier<T>::FireOnChanged();
}
return fire_on_change;
}
protected:
explicit MediaStreamTrack(const std::string& id)
: enabled_(true), id_(id), state_(MediaStreamTrackInterface::kLive) {}
bool set_state(MediaStreamTrackInterface::TrackState new_state) {
bool fire_on_change = (state_ != new_state);
state_ = new_state;
if (fire_on_change)
Notifier<T>::FireOnChanged();
return true;
}
private:
bool enabled_;
std::string id_;
MediaStreamTrackInterface::TrackState state_;
}; 一是Track自身是否可用, enable 和 disable, 第二是TrackState, 这个跟在Track内的Audio/Video Source 相关, 视Source状态 分别置值为: kEnded 或者 kLive.
Local Stream 中的Track通过 RtpSender 跟WebRtc Session相连接, WebRtc Session 自己是AudioProvider/VideoProvider/DataProvider, 可以接收数据。
WebRTC音视频Track状态管理
本文介绍WebRTC中MediaStreamTrack的实现细节,包括Track的状态管理机制:启用与禁用状态、TrackState的定义及变化触发机制。此外还探讨了LocalStream中的Track如何通过RtpSender与WebRtcSession相连。
4416

被折叠的 条评论
为什么被折叠?



