Name is required.
Email address is required.
Invalid email address
Answer is required.
Exceeding max length of 5KB

Extract ID3 timed metadata from live stream in Chrome on Android


I am live streaming through a Wowza server and injecting timed ID3 metadata via the method here:

https://www.wowza.com/forums/content.php?322-How-to-convert-onTextData-events-in-a-live-or-VOD-stream-to-timed-events-(ID3-tags)-in-an-Apple-HLS-stream

I am able to extract this timed metadata from JW Player on all browsers and devices except my Android phone (Samsung Note 4). I imagine other Android devices would behave similarly.

My code first checks the player mode via playerInstance.getProvider().name. If "HTTP" mode is detected one extraction method is used. If "Flash" mode is detected another extraction method is used. This method is working for me on iPads, iPhones, Mac's, PC's, all browsers. My Samsung reports it is playing the stream in HTTP mode. Don't know if that is relevant or not.

The code to do the extraction appears below. Any idea why this might be failing? It's the "else" case code (HTTP mode) that is running on the phone.

playerInstance.onReady(function() {
//Make an output (logging) panel. Use this to print the ID3 tags out when they are extracted from the stream
var out = document.getElementById("output");

//Get the mode that the JW Player is in.
var mode = playerInstance.getProvider().name.trim();


if (mode == 'flash'){
//Tell the viewer what mode we're in
out.innerHTML = out.innerHTML + mode + ' listening...<br>';

//Use the Flash extraction method to get the event and print contents to output panel
playerInstance.on('meta', function(event){
if(event.metadata.title){
out.innerHTML = out.innerHTML + event.metadata.title + '<br>';
out.style.overflowY = "auto";
}});
}//end if flash


else {//html5 mode
//Tell the viewer what mode we're in
out.innerHTML = out.innerHTML + mode + ' listening... <br>';

//Get the video element. You'll need it to do the extraction.
var mediaElement = document.getElementsByClassName("jw-video jw-reset")[0];

//Now use the HTTP extraction method (basically pull data from track in video element) and print contents to output panel
mediaElement.textTracks.addEventListener('addtrack', function (addTrackEvent) {
var track = addTrackEvent.track;
track.mode = 'hidden';

track.addEventListener('cuechange', function(cueChangeEvent){

out.innerHTML = out.innerHTML + cueChangeEvent.target.activeCues[0].value.data + "<br>";
out.style.overflowY = "auto";
});
});
}//end else html5

});

3 Community Answers

Alex

JW Player Support Agent  
0 rated :

Hi there,

I just spoke with our Android Support Engineer and he has advised me that it is not possible to extract ID3 metadata from HLS streams on Chrome for Android.

Please let me know if you need any more help or have any other questions.

Thank you!

dkovalcik

User  
0 rated :

Yes. Thank you for your response. Do you have any other suggestions in this regard? I am required to send timed metadata through a live video stream and retrieve it in a browser on Android devices.

Alex

JW Player Support Agent  
0 rated :

Hi there,

I do not have any suggestions to give because it is not possible to extract the metadata from the live video stream on Android.

This question has received the maximum number of answers.