Skip to content
10 changes: 9 additions & 1 deletion cmd/livesim2/app/livempd.go
Original file line number Diff line number Diff line change
Expand Up @@ -322,10 +322,18 @@ func LiveMPD(a *asset, mpdName string, cfg *ResponseConfig, drmCfg *drm.DrmConfi

if as.ContentType == "video" && cfg.SCTE35PerMinute != nil {
// Add SCTE35 signaling
var cmdType string

switch *cfg.SCTE35PerMinute {
case 1, 2, 3:
cmdType = ""
case 11, 12, 13, 21, 22, 23:
cmdType = "timesignal"
}
as.InbandEventStreams = append(as.InbandEventStreams,
&m.EventStreamType{
SchemeIdUri: scte35.SchemeIDURI,
Value: "",
Value: cmdType,
})
}

Expand Down
20 changes: 16 additions & 4 deletions cmd/livesim2/app/livesegment.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,13 +110,25 @@ func genLiveSegment(log *slog.Logger, vodFS fs.FS, a *asset, cfg *ResponseConfig
startTime := uint64(meta.newTime)
endTime := startTime + uint64(meta.newDur)
timescale := uint64(meta.timescale)
emsg, err := scte35.CreateEmsgAhead(startTime, endTime, timescale, *cfg.SCTE35PerMinute)
log.Debug("Calling CreateEsmgAhead", "startTime ", startTime, "endTime", endTime, "timescale ", timescale, "Config ", *cfg)

emsgs, err := scte35.CreateEmsgAhead(startTime, endTime, timescale, *cfg.SCTE35PerMinute)
if err != nil {
return so, fmt.Errorf("insertSCTE35: %w", err)
}
if emsg != nil {
seg.Fragments[0].AddEmsg(emsg)
log.Debug("added SCTE-35 emsg message", "asset", a.AssetPath, "segment", segmentPart)

log.Debug("Num of EMSG", "EMSG", len(emsgs))

for i, emsg := range emsgs {
log.Debug("EMSG:", "INDEX:", i, "emsgs", fmt.Sprintf("%+v", *emsg))
}

for i, emsg := range emsgs {
if emsg != nil {
seg.Fragments[i].AddEmsg(emsg)
log.Debug("added SCTE-35 emsg message", "asset", a.AssetPath, "segment", segmentPart)
}
log.Debug("End of for....loop", "Index", i)
}
}

Expand Down
44 changes: 44 additions & 0 deletions cmd/livesim2/app/urlgen.templ
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,50 @@ templ urlgenPage(d urlGenData) {
</label>
</fieldset>
</details>
<details>
<summary>SCTE-35 (time_signal)...</summary>
<fieldset>
<legend>SCTE-35 emsg (time_signal: Provider Opportunity) frequency</legend>
<label for="scte35-none">
<input type="radio" id="scte35-none" name="scte35" value="" checked?={ d.Scte35Var == "" }/>
No SCTE-35 emsg boxes
</label>
<label for="scte35-11">
<input type="radio" id="scte35-11" name="scte35" value="11" checked?={ d.Scte35Var == "11" }/>
1 event per minute, duration 20s, start at hh:mm:10
</label>
<label for="scte35-12">
<input type="radio" id="scte35-12" name="scte35" value="12" checked?={ d.Scte35Var == "12" }/>
2 events per minute, duration 10s, start at hh:mm:10 and hh:mm:40
</label>
<label for="scte35-13">
<input type="radio" id="scte35-13" name="scte35" value="13" checked?={ d.Scte35Var == "13" }/>
3 events per minute, duration 10s, start at hh:mm:10, hh:mm:36, hh:mm:46
</label>
</fieldset>
</details>
<details>
<summary>SCTE-35 (time_signal)...</summary>
<fieldset>
<legend>SCTE-35 emsg (time_signal: Distributor Opportunity) frequency</legend>
<label for="scte35-none">
<input type="radio" id="scte35-none" name="scte35" value="" checked?={ d.Scte35Var == "" }/>
No SCTE-35 emsg boxes
</label>
<label for="scte35-21">
<input type="radio" id="scte35-21" name="scte35" value="21" checked?={ d.Scte35Var == "21" }/>
1 event per minute, duration 20s, start at hh:mm:10
</label>
<label for="scte35-22">
<input type="radio" id="scte35-22" name="scte35" value="22" checked?={ d.Scte35Var == "22" }/>
2 events per minute, duration 10s, start at hh:mm:10 and hh:mm:40
</label>
<label for="scte35-23">
<input type="radio" id="scte35-23" name="scte35" value="23" checked?={ d.Scte35Var == "23" }/>
3 events per minute, duration 10s, start at hh:mm:10, hh:mm:36, hh:mm:46
</label>
</fieldset>
</details>
<details>
<summary>Start and stop...</summary>
<label for="start">
Expand Down
Loading
Loading