at master 1.8 kB view raw
1{ pkgs, ... }: 2{ 3 name = "ustreamer-vmtest"; 4 nodes = { 5 client = 6 { ... }: 7 { 8 environment.systemPackages = [ pkgs.curl ]; 9 }; 10 camera = 11 { config, ... }: 12 let 13 configFile = pkgs.writeText "akvcam-configFile" '' 14 [Cameras] 15 cameras/size = 2 16 17 cameras/1/type = output 18 cameras/1/mode = mmap, userptr, rw 19 cameras/1/description = Virtual Camera (output device) 20 cameras/1/formats = 2 21 cameras/1/videonr = 7 22 23 cameras/2/type = capture 24 cameras/2/mode = mmap, rw 25 cameras/2/description = Virtual Camera 26 cameras/2/formats = 1, 2 27 cameras/2/videonr = 9 28 29 [Connections] 30 connections/size = 1 31 connections/1/connection = 1:2 32 33 [Formats] 34 formats/size = 2 35 36 formats/1/format = YUY2 37 formats/1/width = 640 38 formats/1/height = 480 39 formats/1/fps = 30 40 41 formats/2/format = RGB24, YUY2 42 formats/2/width = 640 43 formats/2/height = 480 44 formats/2/fps = 20/1, 15/2 45 ''; 46 in 47 { 48 services.ustreamer = { 49 enable = true; 50 device = "/dev/video9"; 51 extraArgs = [ "--device-timeout=8" ]; 52 }; 53 networking.firewall.allowedTCPPorts = [ 8080 ]; 54 55 boot.extraModulePackages = [ config.boot.kernelPackages.akvcam ]; 56 boot.kernelModules = [ "akvcam" ]; 57 boot.extraModprobeConfig = '' 58 options akvcam config_file=${configFile} 59 ''; 60 }; 61 }; 62 63 testScript = '' 64 start_all() 65 66 camera.wait_for_unit("ustreamer.service") 67 camera.wait_for_open_port(8080) 68 69 client.wait_for_unit("multi-user.target") 70 client.succeed("curl http://camera:8080") 71 ''; 72}