@@ -127,20 +127,6 @@ impl Media {
127
127
}
128
128
129
129
fn setup ( & mut self , moov : & mp4:: MoovBox , raw : Bytes ) -> anyhow:: Result < ( ) > {
130
- // Create a track for each track in the moov
131
- for trak in & moov. traks {
132
- let id = trak. tkhd . track_id ;
133
- let name = format ! ( "{}.m4s" , id) ;
134
-
135
- let timescale = track_timescale ( moov, id) ;
136
- let handler = ( & trak. mdia . hdlr . handler_type ) . try_into ( ) ?;
137
-
138
- // Store the track publisher in a map so we can update it later.
139
- let track = self . broadcast . create ( & name) . context ( "broadcast closed" ) ?;
140
- let track = Track :: new ( track, handler, timescale) ;
141
- self . tracks . insert ( id, track) ;
142
- }
143
-
144
130
// Combine the ftyp+moov atoms into a single object.
145
131
let mut init = self . ftyp . clone ( ) . context ( "missing ftyp" ) ?. to_vec ( ) ;
146
132
init. extend_from_slice ( & raw ) ;
@@ -152,11 +138,17 @@ impl Media {
152
138
153
139
// Produce the catalog
154
140
for trak in & moov. traks {
141
+ let id = trak. tkhd . track_id ;
142
+ let name = format ! ( "{}.m4s" , id) ;
143
+
144
+ let timescale = track_timescale ( moov, id) ;
145
+ let handler = ( & trak. mdia . hdlr . handler_type ) . try_into ( ) ?;
146
+
155
147
let mut selection_params = moq_catalog:: SelectionParam :: default ( ) ;
156
148
157
149
let mut track = moq_catalog:: Track {
158
- init_track : Some ( "0.mp4" . to_string ( ) ) ,
159
- data_track : Some ( format ! ( "{}.m4s" , trak . tkhd . track_id ) ) ,
150
+ init_track : Some ( self . init . name . clone ( ) ) ,
151
+ name : name . clone ( ) ,
160
152
namespace : Some ( self . broadcast . namespace . clone ( ) ) ,
161
153
packaging : Some ( moq_catalog:: TrackPackaging :: Cmaf ) ,
162
154
render_group : Some ( 1 ) ,
@@ -181,7 +173,6 @@ impl Media {
181
173
let codec = rfc6381_codec:: Codec :: avc1 ( profile, constraints, level) ;
182
174
let codec_str = codec. to_string ( ) ;
183
175
184
- track. name = format ! ( "video_{}p" , height) ;
185
176
selection_params. codec = Some ( codec_str) ;
186
177
selection_params. width = Some ( width. into ( ) ) ;
187
178
selection_params. height = Some ( height. into ( ) ) ;
@@ -197,7 +188,6 @@ impl Media {
197
188
. dec_config ;
198
189
let codec_str = format ! ( "mp4a.{:02x}.{}" , desc. object_type_indication, desc. dec_specific. profile) ;
199
190
200
- track. name = "audio" . to_string ( ) ;
201
191
selection_params. codec = Some ( codec_str) ;
202
192
selection_params. channel_config = Some ( mp4a. channelcount . to_string ( ) ) ;
203
193
selection_params. samplerate = Some ( mp4a. samplerate . value ( ) . into ( ) ) ;
@@ -211,7 +201,6 @@ impl Media {
211
201
let vpcc = & vp09. vpcc ;
212
202
let codec_str = format ! ( "vp09.0.{:02x}.{:02x}.{:02x}" , vpcc. profile, vpcc. level, vpcc. bit_depth) ;
213
203
214
- track. name = format ! ( "video_{}p" , vp09. height) ;
215
204
selection_params. codec = Some ( codec_str) ;
216
205
selection_params. width = Some ( vp09. width . into ( ) ) ;
217
206
selection_params. height = Some ( vp09. height . into ( ) ) ;
@@ -226,6 +215,11 @@ impl Media {
226
215
track. selection_params = selection_params;
227
216
228
217
tracks. push ( track) ;
218
+
219
+ // Store the track publisher in a map so we can update it later.
220
+ let track = self . broadcast . create ( & name) . context ( "broadcast closed" ) ?;
221
+ let track = Track :: new ( track, handler, timescale) ;
222
+ self . tracks . insert ( id, track) ;
229
223
}
230
224
231
225
let catalog = moq_catalog:: Root {
0 commit comments