The MediaMessage class cannot be created. The class behaves like a read-only array and can be enumerated with the keyword pair 'For Each'. This returns the value that is linked to a key name stored in the message:
Dim hMediaMessage As MediaMessage Dim vValue As Variant vValue = hMediaMessage [ Name As String ]
All values stored in a message are enumerated in this way:
Dim hMediaMessage As MediaMessage Dim vValue As Variant For Each vValue In hMediaMessage ... Next
The MediaMessage class has these five properties:
Property | Data type | Description |
---|---|---|
Count | Integer | Returns the number of key/value pairs stored in the message. |
Name | String | Returns the name of the message. It can also be NULL! |
Keys | String[ ] | Returns an array with the keys of all values stored in the message. |
Key | String | Returns the key of the last value stored in the message. |
Type | Integer | Returns the type of the event as a MediaMessage constant. |
Table 23.9.6.1.1 : Properties of the MediaMessage class
The MediaMessage class has the following constants:
You can find the integer values associated with the constants on the website https://gambaswiki.org/wiki/comp/gb.media/mediamessage
In the following source code section, the messages are read from the data stream and displayed in the console of the IDE:
Public Sub hPipeline_Event(Message As MediaMessage) Dim vVariant As Variant Print "MESSAGE.NAME = "; Message.Name Print "------------------------------------------" For Each vVariant In Message Print "KEY = "; Message.Key; " -->> VALUE = "; Message[Message.Key] Next Print "------------------------------------------" End
This is an excerpt of the continuously read messages - without filters:
... ------------------------------------------ MESSAGE.NAME = GstMessageStateChanged ------------------------------------------ KEY = old-state -->> VALUE = null KEY = new-state -->> VALUE = ready KEY = pending-state -->> VALUE = paused ------------------------------------------ MESSAGE.NAME = GstMessageNeedContext ------------------------------------------ KEY = context-type -->> VALUE = gst.soup.session ------------------------------------------ MESSAGE.NAME = GstMessageHaveContext ------------------------------------------ KEY = context -->> VALUE = ------------------------------------------ MESSAGE.NAME = GstMessageStreamStatus ------------------------------------------ KEY = type -->> VALUE = create KEY = owner -->> VALUE = KEY = object -->> VALUE = ------------------------------------------ MESSAGE.NAME = GstMessageStateChanged ------------------------------------------ KEY = old-state -->> VALUE = ready KEY = new-state -->> VALUE = paused KEY = pending-state -->> VALUE = void-pending ------------------------------------------ MESSAGE.NAME = GstMessageStreamStatus ------------------------------------------ KEY = type -->> VALUE = enter KEY = owner -->> VALUE = KEY = object -->> VALUE = ------------------------------------------ MESSAGE.NAME = http-headers ------------------------------------------ KEY = uri -->> VALUE = http://icecast.ndr.de/ndr/ndr1wellenord/kiel/mp3/128/stream.mp3 KEY = http-status-code -->> VALUE = 200 KEY = redirection-uri -->> VALUE = http://f141.rndfnk.com/ard/ndr/ndr1wellenord/kiel/mp3/128/stream.mp3?cid=01FBQ1T52FB81EDG99JE36KN5J&sid=2aluMgAc2xEGJVo7hUwbHeTv3gl&token=MUkpI-R3L45S55UKaBf6NJtcAZ8ysRIr3sg9wLhh3DY&tvf=6CRHShweqRdmMTQxLnJuZGZuay5jb20 KEY = request-headers -->> VALUE = KEY = response-headers -->> VALUE = ------------------------------------------ ...
In the alternative source code section, a message filter with a freely defined message name is used → Message.Name = GstMessageStateChanged:
Public Sub hPipeline_Event(Message As MediaMessage) Dim i As Integer If Message.Name = "GstMessageStateChanged" Then Print Print "MESSAGE.NAME = "; Message.Name Print "--------------------------------------" Endif For i = 0 To Message.Count - 1 If Message.Name = "GstMessageStateChanged" Then Print "KEY = "; Message.Keys[i]; " -->> VALUE = "; Message[Message.Keys[i]] Endif Next End
Here is an excerpt of the continuously read messages - with filter:
... MESSAGE.NAME = GstMessageStateChanged -------------------------------------- KEY = old-state -->> VALUE = null KEY = new-state -->> VALUE = ready KEY = pending-state -->> VALUE = paused MESSAGE.NAME = GstMessageStateChanged -------------------------------------- KEY = old-state -->> VALUE = ready KEY = new-state -->> VALUE = paused KEY = pending-state -->> VALUE = void-pending ...