48 lines
1.8 KiB
Python
48 lines
1.8 KiB
Python
"""Отдельный контроль задержки и серийных потерь при перемежении FEC-блоков."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import json
|
|
from pathlib import Path
|
|
|
|
from tools.video004_transport import (
|
|
BASELINE_160, BASELINE_320, CODEC_RESULTS, OUTPUT, _frames, simulate,
|
|
)
|
|
|
|
|
|
DEFAULT_OUTPUT = OUTPUT.with_name("interleaving_results.json")
|
|
|
|
|
|
def run() -> dict:
|
|
codec = json.loads(CODEC_RESULTS.read_text(encoding="utf-8"))
|
|
baseline = json.loads(BASELINE_320.read_text(encoding="utf-8"))
|
|
baseline_160 = json.loads(BASELINE_160.read_text(encoding="utf-8"))
|
|
cases = []
|
|
for window in baseline["windows"]:
|
|
combined, _ = _frames("NORMAL", 640, 360, 10, window, codec, baseline_160)
|
|
frames = [frame for frame in combined if frame.stream_id == 0x56303334]
|
|
for k, r in ((8, 1), (8, 2), (12, 2)):
|
|
for scenario in (("random", 0), ("burst", 2), ("burst", 5), ("burst", 10)):
|
|
for depth in (1, 2):
|
|
result = simulate(frames, 10, "2/3", k, r,
|
|
scenario, interleave_depth=depth)
|
|
result["window"] = window["name"]
|
|
cases.append(result)
|
|
return {"source_sha256": codec["source_sha256"],
|
|
"interleaving_depths": [1, 2], "cases": cases, "rf_tx": 0}
|
|
|
|
|
|
def main() -> None:
|
|
parser = argparse.ArgumentParser(description=__doc__)
|
|
parser.add_argument("--output", type=Path, default=DEFAULT_OUTPUT)
|
|
args = parser.parse_args()
|
|
result = run()
|
|
args.output.parent.mkdir(parents=True, exist_ok=True)
|
|
args.output.write_text(json.dumps(result, ensure_ascii=False, indent=2), encoding="utf-8")
|
|
print(f"VIDEO-004: {len(result['cases'])} случаев перемежения; {args.output}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|