use crate::error::Result;
use crate::media_stream::Track;
use crate::peer_connection::driver::PeerConnectionDriverEvent;
use crate::runtime::Sender;
use rtc::media_stream::MediaStreamTrack;
use rtc::rtp_transceiver::RTCRtpSenderId;
use rtc::rtp_transceiver::rtp_sender::RTCRtpParameters;
use rtc::{rtcp, rtp};
pub mod static_rtp;
pub mod static_sample;
#[derive(Clone)]
pub struct TrackLocalContext {
pub(crate) rtp_sender_id: RTCRtpSenderId,
pub(crate) rtp_parameters: RTCRtpParameters,
pub(crate) driver_event_tx: Sender<PeerConnectionDriverEvent>,
}
#[async_trait::async_trait]
pub trait TrackLocal: Track {
async fn track(&self) -> MediaStreamTrack;
async fn bind(&self, ctx: TrackLocalContext);
async fn unbind(&self);
async fn write_rtp(&self, packet: rtp::Packet) -> Result<()>;
async fn write_rtcp(&self, packets: Vec<Box<dyn rtcp::Packet>>) -> Result<()>;
}