Merge pull request #736 from robintown/missing-audio-logs

Add logs to debug missing spatial audio
This commit is contained in:
Robin 2022-11-08 14:53:28 -05:00 committed by GitHub
commit 57bf934bc2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 62 additions and 51 deletions

View file

@ -71,8 +71,8 @@ export function VideoTileContainer({
stream ?? null, stream ?? null,
audioContext, audioContext,
audioDestination, audioDestination,
isLocal || maximised, localVolume,
localVolume isLocal || maximised
); );
const { const {
modalState: videoTileSettingsModalState, modalState: videoTileSettingsModalState,

View file

@ -20,6 +20,7 @@ import {
acquireContext, acquireContext,
releaseContext, releaseContext,
} from "matrix-js-sdk/src/webrtc/audioContext"; } from "matrix-js-sdk/src/webrtc/audioContext";
import { logger } from "matrix-js-sdk/src/logger";
import { useSpatialAudio } from "../settings/useSetting"; import { useSpatialAudio } from "../settings/useSetting";
import { useEventTarget } from "../useEvents"; import { useEventTarget } from "../useEvents";
@ -213,10 +214,10 @@ export const useSpatialMediaStream = (
stream: MediaStream | null, stream: MediaStream | null,
audioContext: AudioContext, audioContext: AudioContext,
audioDestination: AudioNode, audioDestination: AudioNode,
mute = false, localVolume: number,
localVolume?: number mute = false
): [RefObject<HTMLDivElement>, RefObject<MediaElement>] => { ): [RefObject<HTMLDivElement>, RefObject<MediaElement>] => {
const tileRef = useRef<HTMLDivElement>(); const tileRef = useRef<HTMLDivElement | null>(null);
const [spatialAudio] = useSpatialAudio(); const [spatialAudio] = useSpatialAudio();
// We always handle audio separately form the video element // We always handle audio separately form the video element
const mediaRef = useMediaStream(stream, null, true); const mediaRef = useMediaStream(stream, null, true);
@ -227,7 +228,10 @@ export const useSpatialMediaStream = (
const sourceRef = useRef<MediaStreamAudioSourceNode>(); const sourceRef = useRef<MediaStreamAudioSourceNode>();
useEffect(() => { useEffect(() => {
if (spatialAudio && tileRef.current && !mute && audioTrackCount > 0) { if (spatialAudio) {
if (tileRef.current && !mute && audioTrackCount > 0) {
logger.debug(`Rendering spatial audio for ${stream!.id}`);
if (!pannerNodeRef.current) { if (!pannerNodeRef.current) {
pannerNodeRef.current = new PannerNode(audioContext, { pannerNodeRef.current = new PannerNode(audioContext, {
panningModel: "HRTF", panningModel: "HRTF",
@ -239,7 +243,7 @@ export const useSpatialMediaStream = (
gain: localVolume, gain: localVolume,
}); });
} }
if (!sourceRef.current) { if (!sourceRef.current || sourceRef.current.mediaStream !== stream!) {
sourceRef.current = audioContext.createMediaStreamSource(stream!); sourceRef.current = audioContext.createMediaStreamSource(stream!);
} }
@ -274,6 +278,13 @@ export const useSpatialMediaStream = (
gainNode.disconnect(); gainNode.disconnect();
pannerNode.disconnect(); pannerNode.disconnect();
}; };
} else if (stream) {
logger.debug(
`Not rendering spatial audio for ${stream.id} (tile ref ${Boolean(
tileRef.current
)}, mute ${mute}, track count ${audioTrackCount})`
);
}
} }
}, [ }, [
stream, stream,