HbbTV-Association / ReferenceApplication

MIT License
80 stars 33 forks source link

Object #oipfDrm without sendDRMMessage #58

Closed Pazzeo closed 2 years ago

Pazzeo commented 2 years ago

Hello,

I have a problem with the oipfDrm obejct which does not have the function sendDRMMessage and everytime I have the following error in console: "sendDRMMessage" is not a function. Indeed, printing the functions of the object with console.log(Object.getOwnPropertyNames(this.oipfDrm)) I have only: onDRMMessageResult and onDRMRightsError. Do you know why? I'm testing with Chrome and the extension RedOrbit

Thanks Pazzeo

Murmur commented 2 years ago

Testing oipf DRM on a browser emulators most likely won't work, you need a real hbbtv hardware for oipf interface. Try running a refapp on MSEdge(windows) browser Settings/set mode mse-eme to playback playready content.

I believe emulators do not fake a full oipf interface to catch sendDRMMessage message, parse laurl overriding url, initialize dashjs player as a fake hardware oipf-drm player stack.

https://chrome.google.com/webstore/search/hybridtv-dev-environment https://chrome.google.com/webstore/detail/redorbit-hbbtv-emulator/mmgfafehampkahlmoahbjcjcmgmkppab?hl=en

Pazzeo commented 2 years ago

Thanks Murmur, I had the same feeling and indeed the test with a real hbbtv hardware is working well. May I ask you if you know I could add custom headers before to call the sendDRMMessage ?

Thanks in advance Pazzeo

Murmur commented 2 years ago

Unfortunately an internal oipf-drm(laurl) http request-response is a black box. Some drm license providers do require a custom http request headers such as auth tokens. You need to use a proxy script. This is not a problem on html5 dashjs-shakaplayer environment as they provide a custom header injection.

See this example to give you an idea. This script receives a playready payload from the client, use a hardcoded or ?laurl=xxxx for real laurl address, set any headers given by ?mykey=myval arguments or hardcode values, invoke the laurl using a curl library, return a response. Similar approach works for widevine as well. https://github.com/HbbTV-Association/ReferenceApplication/blob/master/tools/test/laurl_pr.php

Pazzeo commented 2 years ago

Thanks, I was looking to the same example but I hoped to find another solution. I will follow the approach of proxy script, just one confirmation. Considering the playready use-case, I will point to this proxy script (laur_ph.php) inside the xml using the field LicenseServerUriOverride, correct? My doubt if I can use relative path to the php proxy or if I need to use the full path. Example:

            <LicenseServerUriOverride>
            <LA_URL>https://mysite/hbbtv/laurl_pr.php</LA_URL>
            </LicenseServerUriOverride>

Thanks Pazzeo

Murmur commented 2 years ago

I have never used a relative LA_URL value so cannot comment on that one and then testing dozens of hbbtv devices is too much of an effort.

You could try using <SetCustomData><CustomData>someting</CustomData></SetCustomData> xml field with or without <LicenseServerUriOverride> element but compatibility is drm provider specific. We have always used a proxy script for simplicity as this most likely relates to X-Something-Auth-Header: 123token456 use cases.

Murmur commented 2 years ago

closed, emulators don't simulate a full oipf interface.