Open mkhahani opened 4 years ago
First of all you are only encoding video, but not sending audio because you inserted a "tee" which makes multiple muxers, but then only are using the video stream part. The payload type also does not look right, should be 103 I think?
Anyways, to send video via rtp you would use this:
`//video stream to rtp const vmux = await beamcoder.muxer({ format_name: 'rtp' });
vmux.newStream(demux.streams[0]); // get stream from demuxer or make a new one
await vmux.openIO({
url: 'rtp://192.168.1.100:10090' + '?rtcpport=
await vmux.writeHeader({ payload_type: 103, // IMPORTANT. libav sets a default of -1 for the payload type, webrtc does not like that ssrc: 1111, // stream identifier, can be any positive integer number (must be expected by your webrtc implementation) });
let vDiff; while (true) { const packet = await demux.read();
// video packets
if (packet.stream_index === 0) {
if (!vDiff) vDiff = packet.pts; // if first packet is > 0 pts, subtract that out so we always forward a stream starting at zero (players like that)
packet.pts = packet.pts - vDiff;
packet.dts = packet.pts; // unless you have b frames, dts can equal pts. You probably don't have b frames.
await vmux.writeFrame({
packet: packet
});
}
}`
If you plan on passing audio also, opus requires a few steps depending on the source. You probably need a filter instead of just passing from decoder to encoder. Especially if changing sample rate from source.
(edit: not sure why the formatting here is messed up?)
What would be the equivalent code for the following command? We plan to use beamcoder in a WebRTC project if is possible.