Reino17 / xivid

Xivid, een Windows en Linux video-url extractie commandoregel-script.
GNU General Public License v3.0
7 stars 2 forks source link

NPO downloads werken niet meer... #2

Closed MatrixView closed 5 years ago

MatrixView commented 5 years ago

Helaas, NPO heeft z'n site en/of API aangepast. Downloads zijn niet meer mogelijk, althans: je krijgt overal een video van +500KB die meldt dat de aflevering niet beschikbaar is.

Ook de tekst in het redirected vod-pad: "DOEG" spreekt boekdelen.

Waarschijnlijk is de enige methode nog DRM met de nieuwe API... de browser/app werkt wel.

Thanx! --MV

Reino17 commented 5 years ago
$ xidel -s --xquery 'json("http://ida.omroep.nl/app.php/POW_04059321?token="||json("http://ida.omroep.nl/app.php/auth")/token)/(items)()()/json(replace(url,"jsonp","json"))/url'
https://content.omroep.nl/streams/doeg/vodnotavailable.m4v?odiredirecturl=/video/ida/adaptive/28f1addc68b447aa7aa5f613478a97f8/5c7877d6/POW_04059321/1?extension=m3u8&type=json&callback=?
https://content.omroep.nl/streams/doeg/vodnotavailable.m4v?odiredirecturl=/video/ida/h264_std/d2c9b56035475720b793cc013834a7ac/5c7877d6/POW_04059321/1?type=json&callback=?
https://content.omroep.nl/streams/doeg/vodnotavailable.m4v?odiredirecturl=/video/ida/h264_bb/c7eb7a158f01a98eac07a328019996fe/5c7877d6/POW_04059321/1?type=json&callback=?
https://content.omroep.nl/streams/doeg/vodnotavailable.m4v?odiredirecturl=/video/ida/h264_sb/807fbf7318b8dca8e01d2cd4cae29426/5c7877d6/POW_04059321/1?type=json&callback=?

Daar lijkt het wel op ja. En dat voor een bedrijf dat wordt betaald met publiekelijk geld. Schandalig eigenlijk. Ik wacht nog even tot volgende week ofzo. Als de situatie dan nog steeds het zelfde is, dan verwijder ik de NPO extractor maar, denk ik.

Invictaz commented 5 years ago

@MatrixView Retrospect heeft dit wel werkend in Kodi via de InputStream Adaptive plugin. Standalone heb je daar de widevinecdm.dll library (Windows) of libwidevinecdm.so library nodig voor Linux. Ik denk dat er wel iets te coden valt.

Reino17 commented 5 years ago

Ik snap je pleidooi, maar je bent hier op het verkeerde adres. In mijn notities heb ik laten zien dat het extracten van de videostreams geen probleem is. Widevine/Fairplay komt pas om de hoek kijken als je de videostream wilt afspelen/downloaden. I.t.t. youtube-dl is mijn script een extractie script en laat ik het eventuele downloaden aan de gebruiker over. Je zult je dus moeten wenden tot de FFmpeg programmeurs. Er is echter 3 jaar geleden al een ticket aangemaakt met het verzoek ondersteuning voor SAMPLE-AES versleuteling toe te voegen. In de praktijk echter wordt SAMPLE-AES eigenlijk alleen gebruikt voor videostreams die beveiligd zijn met DRM. Geen FFmpeg programmeur die dit ooit zal implementeren. Je mag het proberen natuurlijk, een reactie achterlaten, maar ik geef je weinig kans.

Ik heb gezien dat youtube-dl n.a.v. de "NPO Download format not found"-issue de extractor heeft geüpdatet. Natuurlijk had ik zo'n typische reactie van dstftw kunnen verwachten, maar ik vind het onzinnig. Tenzij iemand mij het tegendeel bewijst zijn er volgens mij dan maar enkele niet-versleutelde video's te vinden op npostart.nl. En video's die nu online komen zijn volgens mij allemaal met DRM beveiligd. Einde verhaal. Misschien dat die petitie nog iets teweeg kan brengen.

Invictaz commented 5 years ago

@Reino17 Voor de goede orde, er is een verschil tussen livestreams en video downloads. De Vlaamse VRT schijnt sinds kort hetzelfde ingevoerd te hebben. GemistDownloader is ermee bezig. Overigens heb je 3 repo's van HLSDL, weet niet of je dat gezien had. Ik zag dat je later niet meer op dat issue gereageerd had.

https://github.com/selsta/hlsdl/issues/29

Deze heeft wel een binary

https://github.com/heineiuo/hlsdl

Overigens is dit de actieve fork inclusief instructies om een build te maken op Windows:

https://github.com/e2iplayer/hlsdl

Ik vind het veel te makkelijk om nu al de handdoek in de ring te gooien. Overigens kan Shaka Player SAMPLE-AES afspelen

https://github.com/google/shaka-player/commit/4016a7cccafaae2cc23e74638b77c155e909c7a8

Net als Radiant Media Player, inclusief download functie.

https://www.radiantmediaplayer.com/

Reino17 commented 5 years ago

er is een verschil tussen livestreams en video downloads.

Uhm, ik snap deze opmerking niet in relatie tot mijn reactie. Hoe bedoel je dit?

De Vlaamse VRT schijnt sinds kort hetzelfde ingevoerd te hebben. GemistDownloader is ermee bezig.

Waar mee bezig? Waar heb je het over?

Overigens is dit de actieve fork inclusief instructies om een build te maken op Windows:

https://github.com/e2iplayer/hlsdl

Een paar maanden geleden is me dat niet gelukt. De binary daar onder werkt wel op mijn pc. Ondanks dat dit bashgemist is, toch maar even een regeltje batch:

FOR /F "delims=" %A IN ('xidel-0.9.8.6162-openssl.exe -s -e "let $a:=x:request({'header':'X-Requested-With: XMLHttpRequest','url':'https://www.npostart.nl/api/token'})/json/x:request({'post':'_token='||token,'url':'https://www.npostart.nl/player/POW_04059367'})/json/json('https://start-player.npo.nl/video/POW_04059367/streams?profile=hls&quality=npo&tokenId='||token)/stream/src return tokenize(extract(unparsed-text($a),'(#EXT-X-STREAM-INF.+m3u8$)',1,'ms'),'#EXT-X-STREAM-INF:')[last()] ! resolve-uri(extract(.,'(.+m3u8)',1),$a)"') DO @hlsdl-v0.24-x86-mingw32-static.exe "%A" -v
> START media_playlist_get_links
> END media_playlist_get_links
HLS Stream is SAMPLE-AES encrypted.
Media Playlist parsed successfully.
Downloading segments.
{"d_t":"vod"}
{"t_d":1504,"d_d":0, "d_s":0}
Downloading part 0
Error: Getting key-file [https://pedgewarer28a.video.kpnstreaming.nl/session/6ba628a2-405c-11e9-9287-1458d0426038/vn6ge2/hls/vod/nponep/vod/npo/fps/TEST/npo/hls/POW_04059367_v1551901052/v7/v7.m3u8/../skd://ed303138-cb5e-3206-0d01-bba8ac436637] failed http_code[404].
{"t_d":1504,"d_d":8,"d_s":290460}
Downloading part 1
Error: Getting key-file [https://pedgewarer28a.video.kpnstreaming.nl/session/6ba628a2-405c-11e9-9287-1458d0426038/vn6ge2/hls/vod/nponep/vod/npo/fps/TEST/npo/hls/POW_04059367_v1551901052/v7/v7.m3u8/../skd://ed303138-cb5e-3206-0d01-bba8ac436637] failed http_code[404].
Downloading part 2
Error: Getting key-file [https://pedgewarer28a.video.kpnstreaming.nl/session/6ba628a2-405c-11e9-9287-1458d0426038/vn6ge2/hls/vod/nponep/vod/npo/fps/TEST/npo/hls/POW_04059367_v1551901052/v7/v7.m3u8/../skd://ed303138-cb5e-3206-0d01-bba8ac436637] failed http_code[404].
Downloading part 3
[...]

Dit is dus met https://www.npostart.nl/nos-journaal/06-03-2019/POW_04059367 als voorbeeld. hlsdl ondersteunt dan wel SAMPLE-AES, maar geen DRM! Hij verslikt zich telkens op de skd://[...] urls.

Ik vind het veel te makkelijk om nu al de handdoek in de ring te gooien.

Nogmaals, bashgemist is een extractie script. Als een door bashgemist ondersteunde website besluit al haar videostreams met DRM te beveiligen, dan heeft het naar mijn idee geen zin deze website nog langer te ondersteunen als er geen software beschikbaar is die deze videostreams legaal kan downloaden. En ik ben overigens geen FFmpeg programmeur die zo even code kan toevoegen om met DRM beveiligde videostreams te decrypten. Wie overigens ook "de handdoek in de ring heeft gegooid" is Wietze. Aangezien hij ook gebruik maakt van FFmpeg had ik niet anders verwacht.

@MatrixView Met de oude methode blijken de npo-1, npo-2 en npo-3 livestreams het nog gewoon te doen...

$ ffmpeg -hide_banner -i "$(./bashgemist.sh https://www.npostart.nl/live/npo-1)"
[hls,applehttp @ 05149480] Opening 'https://smoote1e.omroep.nl/urishieldv2/l2fm7eeece630c68bf42005c804714000000.862316b2983abb836c255c250e054fd0/live/npo/tvlive/npo1/npo1.isml/npo1-audio_nld=128000-video=1800000-193988832.ts' for reading
[hls,applehttp @ 05149480] Opening 'https://smoote1e.omroep.nl/urishieldv2/l2fm7eeece630c68bf42005c804714000000.862316b2983abb836c255c250e054fd0/live/npo/tvlive/npo1/npo1.isml/npo1-audio_nld=128000-video=1800000-193988833.ts' for reading
Input #0, hls,applehttp, from 'https://smoote1e.omroep.nl/urishieldv2/l2fm7eeece630c68bf42005c804714000000.862316b2983abb836c255c250e054fd0/live/npo/tvlive/npo1/npo1.isml/npo1-audio_nld=128000-video=1800000.m3u8':
  Duration: N/A, start: 91253.176356, bitrate: N/A
  Program 0
    Metadata:
      variant_bitrate : 0
    Stream #0:0: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp
    Metadata:
      variant_bitrate : 0
    Stream #0:1: Video: h264 (Constrained Baseline) ([27][0][0][0] / 0x001B), yuv420p, 1024x576 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
    Metadata:
      variant_bitrate : 0

En voor wat betreft de nieuwe methode blijken er dus toch zo hier en daar wat onversleutelde video's rond te zwerven. Ik moet hier toch even over na denken wat ik hier mee ga doen.

Invictaz commented 5 years ago

@Reino17 Nou dat niet alle typen content wat NPO aanbiedt hetzelfde is. Overigens noemt Wietze ook uitzendingen die niet van DRM zijn voorzien.

In zijn reactie geeft de auteur anders een werkende build met mingw32. Dus misschien kijk je niet goed.

Kodi is in essentie ook gebaseerd op FFMPEG https://kodi.wiki/view/VideoPlayer

Dus het argument dat FFMPEG de holy grail zou zijn om dit probleem op te lossen slaagt niet, aangezien ze wel afspelen in Retrospect. Maargoed

Met VLC als externe player in Kodi zou je eventueel nog wel een streamcopy kunnen doen, dat heeft nog niemand getest volgens mij.

De Bento4 library is er trouwens om MPEG streams te decrypten. https://www.bento4.com/

Overigens is het belangrijk om te weten welke encryptie erop zit. L3 Widevine of L1. L3 is gekraakt https://www.pcmag.com/news/365713/report-googles-widevine-l3-drm-cracked

Maargoed, ik ben niet genoeg ingewijd in video extractie en decryptie en daarom is het lastig om te bepalen wat de volgende stap is.

Reino17 commented 5 years ago

Nou dat niet alle typen content wat NPO aanbiedt hetzelfde is. Overigens noemt Wietze ook uitzendingen die niet van DRM zijn voorzien.

Ik snap nog steeds niet wat je hier nu precies probeert te zeggen. Als je het over wel of niet DRM hebt, dan heb ik dat ook al gezegd in mijn vorige reacties. Er schijnen zo hier en daar wat onversleutelde video's rond te zwerven inderdaad.

In zijn reactie geeft de auteur anders een werkende build met mingw32. Dus misschien kijk je niet goed.

In mijn vorige reactie heb ik de output daarvan in een groot codeblock gezet, dus volgens mij kijk jij niet goed.

Kodi is in essentie ook gebaseerd op FFMPEG Dus het argument dat FFMPEG de holy grail zou zijn om dit probleem op te lossen slaagt niet, aangezien ze wel afspelen in Retrospect.

Ik zelf gebruik FFmpeg veelvuldig en kan het iedereen ook aanraden. Echter, in mijn vorige reactie zei ik letterlijk: "...als er geen software beschikbaar is die deze videostreams legaal kan downloaden". Als jij de gewijzigde FFmpeg code in Kodi kunt achterhalen, of andere fos (free open-source software) vindt die de huidige NPO videostreams kan openen, dan houd ik mij gereserveerd aanbevolen. Waarom met enige aarzeling? Zie 3e punt in Wietze's samenvatting.

Houd wel in de gaten dat dit hele DRM verhaal met FFmpeg en Retrospect off-topic is voor bashgemist.

Invictaz commented 5 years ago
  1. De livestreams van NPO1/2/3/ zijn wat anders dan video's. Video's verschillen ook nog in NPO Start (Gratis) en NPO Start Plus (Betaald). De achterliggende url's lijken nu hetzelfde (KPNStreaming / NEPWordwide) maar dat zou ik nog verder na moeten kijken.

  2. FFMPEG kan de technologische voortschrijding der techniek gewoon niet bijhouden. Het is niet voor niets dat moderne implementaties van spelers, of dat nou hardware is of software (als voorbeeld neem ik PowerDVD 17) geen gebruik maken van FFMPEG om 4K HDR content weer te geven die voorzien is van encryptie, hogere resolutie, andere beeldtechnieken zoals HDR, Dolby Audio en Dolby Vision. Zelfs al jarenlang bestaande audiocodecs zoals LDAC zijn niet geimplementeerd (alleen in Pulseaudio). In het artikel van PCMag waar ik naar linkte wordt het niet voor niets aangeduid als "plain old".

  3. Jouw codeblock gaat erover dat je compilen niet gelukt is, het is geen output van daadwerkelijk ingevoerde stream urls. Anders graag een link. 'collect2: error: ld returned 1 exit status make: *** [makefile:25: all] Error 1'

Makefile is een compilatie fout.

Daarnaast post je een FFMPEG output block wat niks te maken heeft met HLSDL. '$ ffmpeg -hide_banner -i ""

  1. Ik heb je gezegd dat je Bento4 moet gebruiken als demuxer en niet FFMPEG. Hier staat dat ook beschreven: https://github.com/emilsvennesson/kodi-viaplay/issues/9#issuecomment-302894690
Invictaz commented 5 years ago

Overigens mits je de key op kan halen kan je wellicht het e.e.a. wegschrijven met Bento4 https://www.bento4.com/developers/hls/

Reino17 commented 5 years ago

Voor de goede orde, er is een verschil tussen livestreams en video downloads.

De livestreams van NPO1/2/3/ zijn wat anders dan video's.

Sorry, maar ik begrijp nog steeds niet wat deze opmerking met de issue te maken heeft.

FFMPEG kan de technologische voortschrijding der techniek gewoon niet bijhouden...

Sorry, maar deze off-topic onzin ga ik niet op in.

Jouw codeblock gaat erover dat je compilen niet gelukt is

Uhm, issuecomment-470312294, eerste codeblock?!

Daarnaast post je een FFMPEG output block wat niks te maken heeft met HLSDL.

Die reactie was aan MatrixView gericht.

Ik heb je gezegd dat je Bento4 moet gebruiken als demuxer en niet FFMPEG.

Ik moet helemaal niks. Die toon bevalt me niet. Ik zal er eens naar kijken.

Invictaz commented 5 years ago

Jouw toon bevalt mij anders ook niet als je dingen af doet als onzin. Matrixview heeft het over downloads van NPO, maar dat is wat anders dan streams (die continu lopen en uren lang zijn), dus waarom je dat post snap ik niet. Overigens heeft iemand anders uitgevonden dat de streams (misschien op bepaalde momenten) ook van DRM voorzien zijn anders kun je de programma's opnemen via het kijken naar de stream.

Reino17 commented 5 years ago

Matrixview heeft het over downloads van NPO, maar dat is wat anders dan streams (die continu lopen en uren lang zijn)

Dan verschillen we daarin van mening. NPO-1 Live, of het NOS Journaal, het zijn naar mijn idee beide HLS adaptive videostreams. De ene doorlopend, de andere niet.

Reino17 commented 5 years ago

Ik heb even gekeken naar dat Bento4. Voor zover ik het begrijp heb je mp4decrypt.exe nodig om een reeds gedownload mp4-bestand te decrypten. Hier heb je natuurlijk wel de sleutel voor nodig.

Retrospect hanteert het "dash-widevine"-profiel voor de videostreams. Ik ben niet zo thuis in Python en daarom begrijp ik niet wat hier nu precies gebeurt. Hoe wordt die license-key gegenereerd? Jij enig idee, Invictaz?

Invictaz commented 5 years ago

@Reino17 Het lijkt me, bij nader inzien, zeer onverstandig om dat op een openbare Github pagina te bespreken. Niet alleen wil ik geen slapende honden wakker maken maar ik wil deze repo ook niet op slot hebben. Wellicht is Retrospect daarom naar Bitbucket verhuisd.

Reino17 commented 5 years ago

Je hebt gelijk. Ik ga hier ook niet meer naar kijken.

@MatrixView Ik heb net het een en ander geüpdatet:

Zoals je in mijn notities kunt lezen is het extracten van de met DRM beveiligde video-urls geen enkel probleem, maar omdat ze toch niet te downloaden zijn heeft dat totaal geen zin. Ik hoop dat je hier mee kunt leven.

NOPENN commented 5 years ago
#EXTM3U
#EXT-X-VERSION:5
## Created with Unified Streaming Platform(version=1.7.25)
#EXT-X-MEDIA-SEQUENCE:193679262
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-TARGETDURATION:8
#USP-X-TIMESTAMP-MAP:MPEGTS=70833472,LOCAL=2019-02-06T06:21:30Z
#EXT-X-PROGRAM-DATE-TIME:2019-02-06T06:21:30Z
#EXTINF:8, no desc
#EXT-X-KEY:METHOD=SAMPLE-AES,URI="skd://60f29d98-6526-e8e6-02cd-1a6cc037f599",KEYFORMAT="com.apple.streamingkeydelivery",KEYFORMATVERSIONS="1"
npo-vsr-1-video=1400000-193679262.ts
#EXTINF:8, no desc
npo-vsr-1-video=1400000-193679263.ts
#EXTINF:8, no desc
npo-vsr-1-video=1400000-193679264.ts
#EXTINF:8, no desc
npo-vsr-1-video=1400000-193679265.ts

en dan met Azure Media player zoiets?

Reino17 commented 5 years ago

Sorry, maar waar gaat dit over? Ik zie het begin van een (zo te zien) versleutelde HLS-playlist. Wat is je vraag? (Kun je volgende keer trouwens opmaak daarvoor gebruiken? Is wel zo netjes.)