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, 可以接收数据。