at 23.11-beta 1.9 kB view raw
1import ./make-test-python.nix ({ pkgs, lib, ...} : 2 3{ 4 name = "mediamtx"; 5 meta.maintainers = with lib.maintainers; [ fpletz ]; 6 7 nodes = { 8 machine = { config, ... }: { 9 services.mediamtx = { 10 enable = true; 11 settings = { 12 metrics = true; 13 paths.all.source = "publisher"; 14 }; 15 }; 16 17 systemd.services.rtmp-publish = { 18 description = "Publish an RTMP stream to mediamtx"; 19 after = [ "mediamtx.service" ]; 20 bindsTo = [ "mediamtx.service" ]; 21 wantedBy = [ "multi-user.target" ]; 22 serviceConfig = { 23 DynamicUser = true; 24 Restart = "on-failure"; 25 RestartSec = "1s"; 26 TimeoutStartSec = "10s"; 27 ExecStart = "${lib.getBin pkgs.ffmpeg-headless}/bin/ffmpeg -re -f lavfi -i smptebars=size=800x600:rate=10 -c libx264 -f flv rtmp://localhost:1935/test"; 28 }; 29 }; 30 31 systemd.services.rtmp-receive = { 32 description = "Receive an RTMP stream from mediamtx"; 33 after = [ "rtmp-publish.service" ]; 34 bindsTo = [ "rtmp-publish.service" ]; 35 wantedBy = [ "multi-user.target" ]; 36 serviceConfig = { 37 DynamicUser = true; 38 Restart = "on-failure"; 39 RestartSec = "1s"; 40 TimeoutStartSec = "10s"; 41 ExecStart = "${lib.getBin pkgs.ffmpeg-headless}/bin/ffmpeg -y -re -i rtmp://localhost:1935/test -f flv /dev/null"; 42 }; 43 }; 44 }; 45 }; 46 47 testScript = '' 48 start_all() 49 50 machine.wait_for_unit("mediamtx.service") 51 machine.wait_for_unit("rtmp-publish.service") 52 machine.wait_for_unit("rtmp-receive.service") 53 machine.wait_for_open_port(9998) 54 machine.succeed("curl http://localhost:9998/metrics | grep '^rtmp_conns.*state=\"publish\".*1$'") 55 machine.succeed("curl http://localhost:9998/metrics | grep '^rtmp_conns.*state=\"read\".*1$'") 56 ''; 57})