Ctrl K
ComunidadGuías…

test_webrtc_roundtrip.py

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
"""Vrai H.264/ICE/DTLS/SRTP/décodage local, également exécutable sous Win7."""

import importlib.util
import json
import os
import shutil
import unittest
from unittest import mock

import runtime
from webrtc_probe import verifier_webrtc


def trouver_ffmpeg():
    # Permet de tester un venv minimal avec le binaire déjà livré ailleurs.
    explicite = os.environ.get("FFMPEG_BINARY")
    if explicite:
        return explicite  # Un chemin déclaré mais cassé doit échouer, pas skip.
    systeme = shutil.which("ffmpeg")
    if systeme:
        return systeme
    for motif in ("ffmpeg*.exe", "ffmpeg-*", "ffmpeg"):
        for fichier in sorted(runtime.resource_dir().glob(motif)):
            if fichier.is_file():
                return str(fichier)
    if importlib.util.find_spec("imageio_ffmpeg") is not None:
        import imageio_ffmpeg
        return imageio_ffmpeg.get_ffmpeg_exe()
    return None


@unittest.skipUnless(importlib.util.find_spec("aiortc"), "aiortc non installé")
class TestsWebRTCRoundtrip(unittest.IsolatedAsyncioTestCase):
    async def test_high_recu_par_decodeur_high444_sans_reencodage(self):
        ffmpeg = trouver_ffmpeg()
        if ffmpeg is None:
            self.skipTest("ffmpeg non installé")
        with mock.patch("aiortc.codecs.h264.H264Encoder.encode",
                        side_effect=AssertionError("Réencodage interdit")):
            resultat = await verifier_webrtc(ffmpeg, profil_recepteur="high444", payload_type=41)
        self.assertTrue(resultat["profile_level_id"].startswith("64"))
        self.assertTrue(resultat["negotiated_profile_level_id"].startswith("f400"))
        self.assertEqual(resultat["frames_decoded"], 3)
        self.assertEqual(resultat["payload_type"], 41)
        self.assertTrue(resultat["closed"])

    async def test_h264_high_negocie_transfere_decode_et_ferme(self):
        ffmpeg = trouver_ffmpeg()
        if ffmpeg is None:
            self.skipTest("ffmpeg non installé")
        # Les erreurs d'import natif (av, SRTP, OpenSSL...) ne sont pas
        # escamotées par DISPONIBLE=False : un build annoncé doit fonctionner.
        import aioice.ice
        import blink_webrtc
        candidats_avant = aioice.ice.get_host_addresses
        codecs_avant = list(blink_webrtc.CODECS["video"])
        profils_avant = set(blink_webrtc._PROFILS_ENREGISTRES)
        resultat = await verifier_webrtc(ffmpeg)
        json.dumps(resultat)
        self.assertEqual(resultat["codec"], "H264")
        self.assertTrue(resultat["profile_level_id"].startswith("64"))
        self.assertGreaterEqual(resultat["frames_decoded"], 3)
        self.assertGreater(resultat["packets_received"], 0)
        self.assertEqual((resultat["width"], resultat["height"]), (160, 96))
        self.assertTrue(resultat["closed"])
        self.assertTrue(resultat["loopback_only"])
        self.assertEqual(resultat["on_close_calls"], 1)
        self.assertLess(resultat["elapsed_seconds"], 30)
        self.assertIs(aioice.ice.get_host_addresses, candidats_avant)
        self.assertEqual(blink_webrtc.CODECS["video"], codecs_avant)
        self.assertEqual(blink_webrtc._PROFILS_ENREGISTRES, profils_avant)


if __name__ == "__main__":
    unittest.main()