webrtc: repacketize h264 (#1260)

* webrtc: repacketize h264 on nalu type 7

* always repacketize

* lower packet size to avoid uint16 overflows

* remove nalu logging

* Revert "remove nalu logging"

This reverts commit e6b6540696.
This commit is contained in:
Brett Jia
2024-02-15 14:27:09 -05:00
committed by GitHub
parent b174fbc19b
commit d3dee3a199

View File

@@ -10,6 +10,7 @@ import { logConnectionState, waitClosed, waitConnected, waitIceConnected } from
import { startRtpForwarderProcess } from "./rtp-forwarders";
import { getFFmpegRtpAudioOutputArguments, requiredAudioCodecs, requiredVideoCodec } from "./webrtc-required-codecs";
import { createRawResponse, getWeriftIceServers, isPeerConnectionAlive } from "./werift-util";
import { H264Repacketizer } from "../../homekit/src/types/camera/h264-packetizer";
const { mediaManager } = sdk;
@@ -105,6 +106,8 @@ export async function createRTCPeerConnectionSource(options: {
};
const setupVideoTransceiver = (transceiver: RTCRtpTransceiver) => {
const videoPacketSize = 64000;
let h264Repacketizer = new H264Repacketizer(console, videoPacketSize - 12)
const videoTransceiver = transceiver;
videoTransceiver.mid = '1';
videoTransceiver.onTrack.subscribe((track) => {
@@ -116,7 +119,10 @@ export async function createRTCPeerConnectionSource(options: {
const naluTypes = getNaluTypesInNalu(rtp.payload);
console.log('video packet types', ...[...naluTypes]);
}
rtspServer.sendTrack(videoTrack, rtp.serialize(), false);
const repacketized = h264Repacketizer.repacketize(rtp);
for (const packet of repacketized) {
rtspServer.sendTrack(videoTrack, packet.serialize(), false);
}
});
track.onReceiveRtcp.subscribe(rtp => rtspServer.sendTrack(videoTrack, rtp.serialize(), true));