Live video on the AT Protocol
1{
2 "lexicon": 1,
3 "id": "place.stream.segment",
4 "defs": {
5 "main": {
6 "type": "record",
7 "description": "Media file representing a segment of a livestream",
8 "key": "tid",
9 "record": {
10 "type": "object",
11 "required": ["id", "signingKey", "startTime", "creator"],
12 "properties": {
13 "id": {
14 "type": "string",
15 "description": "Unique identifier for the segment"
16 },
17 "signingKey": {
18 "type": "string",
19 "description": "The DID of the signing key used for this segment"
20 },
21 "startTime": {
22 "type": "string",
23 "format": "datetime",
24 "description": "When this segment started"
25 },
26 "duration": {
27 "type": "integer",
28 "description": "The duration of the segment in nanoseconds"
29 },
30 "creator": {
31 "type": "string",
32 "format": "did"
33 },
34 "video": {
35 "type": "array",
36 "items": {
37 "type": "ref",
38 "ref": "#video"
39 }
40 },
41 "audio": {
42 "type": "array",
43 "items": {
44 "type": "ref",
45 "ref": "#audio"
46 }
47 },
48 "size": {
49 "type": "integer",
50 "description": "The size of the segment in bytes"
51 },
52 "contentWarnings": {
53 "type": "ref",
54 "ref": "place.stream.metadata.contentWarnings"
55 },
56 "contentRights": {
57 "type": "ref",
58 "ref": "place.stream.metadata.contentRights"
59 },
60 "distributionPolicy": {
61 "type": "ref",
62 "ref": "place.stream.metadata.distributionPolicy"
63 }
64 }
65 }
66 },
67 "audio": {
68 "type": "object",
69 "required": ["codec", "rate", "channels"],
70 "properties": {
71 "codec": { "type": "string", "enum": ["opus"] },
72 "rate": { "type": "integer" },
73 "channels": { "type": "integer" }
74 }
75 },
76 "video": {
77 "type": "object",
78 "required": ["codec", "width", "height"],
79 "properties": {
80 "codec": { "type": "string", "enum": ["h264"] },
81 "width": { "type": "integer" },
82 "height": { "type": "integer" },
83 "framerate": {
84 "type": "ref",
85 "ref": "#framerate"
86 },
87 "bframes": { "type": "boolean" }
88 }
89 },
90 "framerate": {
91 "type": "object",
92 "required": ["num", "den"],
93 "properties": {
94 "num": { "type": "integer" },
95 "den": { "type": "integer" }
96 }
97 },
98 "segmentView": {
99 "type": "object",
100 "required": ["cid", "record"],
101 "properties": {
102 "cid": { "type": "string", "format": "cid" },
103 "record": { "type": "unknown" }
104 }
105 }
106 }
107}