85 lines
3.1 KiB
Python
85 lines
3.1 KiB
Python
from __future__ import annotations
|
|
|
|
import unittest
|
|
|
|
from src.youtube_runtime import normalize_youtube_video_save_type, resolve_live_video_encoder
|
|
|
|
|
|
class YoutubeRuntimeTests(unittest.TestCase):
|
|
def test_youtube_process_defaults_ts_setting_to_push_mode(self) -> None:
|
|
self.assertEqual(normalize_youtube_video_save_type("ts", "youtube"), "YOUTUBE")
|
|
self.assertEqual(normalize_youtube_video_save_type("", "youtube2__lane1"), "YOUTUBE")
|
|
|
|
def test_explicit_local_record_format_is_preserved(self) -> None:
|
|
self.assertEqual(normalize_youtube_video_save_type("mp4", "youtube"), "MP4")
|
|
self.assertEqual(normalize_youtube_video_save_type("mkv", "douyin_youtube"), "MKV")
|
|
|
|
def test_non_youtube_process_falls_back_to_ts(self) -> None:
|
|
self.assertEqual(normalize_youtube_video_save_type("ts", "tiktok"), "TS")
|
|
self.assertEqual(normalize_youtube_video_save_type("unknown", "tiktok"), "TS")
|
|
|
|
def test_push_defaults_restore_full_profile(self) -> None:
|
|
from pathlib import Path
|
|
from tempfile import TemporaryDirectory
|
|
from douyin_youtube_ffplay import _load_youtube_push_settings
|
|
|
|
with TemporaryDirectory() as tmp:
|
|
cfg = Path(tmp) / "youtube.ini"
|
|
cfg.write_text("[youtube]\nkey = abc\n", encoding="utf-8")
|
|
settings = _load_youtube_push_settings(str(cfg))
|
|
self.assertEqual(settings["b_v"], "4000k")
|
|
self.assertEqual(settings["maxrate"], "4500k")
|
|
self.assertEqual(settings["bufsize"], "8000k")
|
|
self.assertFalse(settings["fast_audio"])
|
|
|
|
def test_arm_falls_back_from_vaapi_to_v4l2m2m(self) -> None:
|
|
enc, note = resolve_live_video_encoder(
|
|
"h264_vaapi",
|
|
"h264_v4l2m2m\nh264_vaapi\n",
|
|
"aarch64",
|
|
has_mpp_service=False,
|
|
has_render_node=True,
|
|
has_v4l2_device=True,
|
|
)
|
|
self.assertEqual(enc, "h264_v4l2m2m")
|
|
self.assertIn("fallback", note)
|
|
|
|
def test_arm_auto_selects_v4l2m2m_when_env_missing(self) -> None:
|
|
enc, note = resolve_live_video_encoder(
|
|
"",
|
|
"h264_v4l2m2m\n",
|
|
"aarch64",
|
|
has_mpp_service=False,
|
|
has_render_node=False,
|
|
has_v4l2_device=True,
|
|
)
|
|
self.assertEqual(enc, "h264_v4l2m2m")
|
|
self.assertEqual(note, "")
|
|
|
|
def test_x86_requires_render_node_for_vaapi(self) -> None:
|
|
enc, note = resolve_live_video_encoder(
|
|
"h264_vaapi",
|
|
"h264_vaapi\n",
|
|
"x86_64",
|
|
has_mpp_service=False,
|
|
has_render_node=False,
|
|
)
|
|
self.assertEqual(enc, "")
|
|
self.assertIn("renderD", note)
|
|
|
|
def test_arm_rejects_v4l2m2m_without_video_nodes(self) -> None:
|
|
enc, note = resolve_live_video_encoder(
|
|
"h264_v4l2m2m",
|
|
"h264_v4l2m2m\n",
|
|
"aarch64",
|
|
has_mpp_service=False,
|
|
has_render_node=False,
|
|
has_v4l2_device=False,
|
|
)
|
|
self.assertEqual(enc, "")
|
|
self.assertIn("/dev/video", note)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|