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}