rtp-media结构体

receiver--sender
- getReceivers 获取一组RTCRtpReceiver对象,用于接收数据
- getSenders 获取一组RTCRtpSender对象,用于发送数据,每个对象对应一个媒体轨
共有属性
- MediaStreamTrack 媒体轨
- RTCDtlsTransport Transport媒体数据传输相关的属性
- RTCDtlsTransport rtcpTransport与rtcp传输相关的属性
rtcrtpreceiver
- getParameters 返回RTCRtpParameter对象(接收器的参数)
- getSynchronizationSources 返回一组SynchronizationSources实例(共享源)
- getContributingSources 返回一组getContributingSources实例(混音混频)
- getStats RTCStasReport,里面包括输入流统计信息
- getCapabilities 返回系统能接受的媒体能力(音频、视频)
rtcrtpsender
- getParameters 返回RTCRtpParameter对象(接收器的参数)
- setParameters 设置RTP传输相关的参数
- getStats 提供了输出流的统计数据
- replaceTrack 用另一个track替换现在的track,如切换摄像头
- getCapabilities 按类型(音频、视频)返回系统发送媒体的能力
rtcrtptransceiver
属性
- getTransceivers 从PC获得一组RTCPRtpTransceiver对象,每个RTCRtpTransceiver是RTCRtpSender和RTCRtpReceiver对
方法
- stop 停止发送和接收媒体数据
控制传输速率
<Callout type="info"> 参考mdn文档:<a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/API/RTCRtpSender/getParameters">getParameters</a> </Callout>
js
const BAND_WIDTH = 1000;
const senders = pc.getSenders();
const videoSender = senders.find(item => item.track.kind === 'video');
const parameters = videoSender.getParameters();
if (parameters.encodings){
parameters.encodings[0].maxBitrate = BAND_WIDTH * 1000;
videoSender.setParameters(parameters)
.then(()=>{
// ...
})
.catch(err => {
// ...
});
}
统计信息
<Callout type="info"> 参考mdn文档:<a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/API/RTCRtpSender/getStats">getStats</a> </Callout>
js
const senders = pc.getSenders();
const videoSender = senders.find(item => item.track.kind === 'video');
let lastResult;
function makeStats() {
videoSender.getStats()
.then(reports => {
// 统计发送
const outReports = reports.filter(item => item.type === 'outbound-rtp');
outReports.forEach(report => {
const { timestamp, bytesSent, packetSent } = report;
if (lastResult && lastResult.has(report.id)) {
// 通过统计数据计算码率
const bitrate = 8 * (bytesSent - lastResult.get(report.id).bytesSent) / (now - lastResult.get(report.id).timestamp);
// 其他统计
}
})
lastResult = reports;
})
.catch(err => {
// ...
})
}