dash-live-source-simulator icon indicating copy to clipboard operation
dash-live-source-simulator copied to clipboard

Add version 1 event message support

Open mpegdash-user opened this issue 4 years ago • 1 comments

event messages (as used by scte35.py) use the version 0 variant of the emsg box. The dashif client has been updated to support version 1 event messages (well, almost, see https://github.com/Dash-Industry-Forum/dash.js/issues/3196) but is hard to test without a ready source for these.

The following diff updates emsg.py to handle both version 0 and version 1 event messages.

48c48
< from .structops import uint32_to_str
---
> from .structops import uint32_to_str, uint64_to_str
56c56
<                  emsg_id=0, messagedata=""):
---
>                  emsg_id=0, messagedata="", version=0):
62a63
>         self.version = version
67d67
<         size = 12 + 4*4 + len(self.scheme_id_uri) + 1 + len(self.value) + 1 + len(self.messagedata)
69,78c69,94
<         parts.append(uint32_to_str(size))
<         parts.append("emsg")
<         parts.append("\x00\x00\x00\x00")
<         parts.append(self.scheme_id_uri + "\x00")
<         parts.append(self.value + "\x00")
<         parts.append(uint32_to_str(self.timescale))
<         parts.append(uint32_to_str(self.presentation_time_delta))
<         parts.append(uint32_to_str(self.event_duration))
<         parts.append(uint32_to_str(self.emsg_id))
<         parts.append(self.messagedata)
---
>         if self.version == 0:
>           size = 12 + 4*4 + len(self.scheme_id_uri) + 1 + len(self.value) + 1 + len(self.messagedata)
>           parts.append(uint32_to_str(size))
>           parts.append("emsg")
>           parts.append("\x00")  #version
>           parts.append("\x00\x00\x00") #flags
>           parts.append(self.scheme_id_uri + "\x00")
>           parts.append(self.value + "\x00")
>           parts.append(uint32_to_str(self.timescale))
>           print "presentation_time_delta = %d"%self.presentation_time_delta
>           parts.append(uint32_to_str(self.presentation_time_delta))
>           parts.append(uint32_to_str(self.event_duration))
>           parts.append(uint32_to_str(self.emsg_id))
>         else:
>           size = 12 + 3*4 + 8 + len(self.scheme_id_uri) + 1 + len(self.value) + 1 + len(self.messagedata)
>           parts.append(uint32_to_str(size)) # size
>           parts.append("emsg")   #box name
>           parts.append("\x01") #version
>           parts.append("\x00\x00\x00") #flags
>           parts.append(uint32_to_str(self.timescale)) # timescale
>           parts.append(uint64_to_str(self.presentation_time_delta)) #presentation_time
>           parts.append(uint32_to_str(self.event_duration)) #duration
>           parts.append(uint32_to_str(self.emsg_id)) #id
>           parts.append(self.scheme_id_uri + "\x00") #scheme_id_uri
>           parts.append(self.value + "\x00") # value
>         parts.append(self.messagedata) #messagedata
91c107
<                 message_data=""):
---
>                 message_data="",version=0):
93c109
<     emsg = Emsg(scheme_id_uri, value, timescale, presentation_time_delta, event_duration, emsg_id, message_data)
---
>     emsg = Emsg(scheme_id_uri, value, timescale, presentation_time_delta, event_duration, emsg_id, message_data, version)

mpegdash-user avatar Mar 11 '20 17:03 mpegdash-user

Sorry for not reacting to this. I'll try to incorporate this in the new Python3 code. I'll change the code to always return version 1, which I hope is fine?

TobbeEdgeware avatar May 26 '20 11:05 TobbeEdgeware