stefansundin / privatkopiera

:vhs: Tillägg till Chrome och Firefox för att privatkopiera enklare från nätet.
https://stefansundin.github.io/privatkopiera/
GNU General Public License v3.0
83 stars 17 forks source link

TV4Play funkar inte #172

Closed nejmennu closed 1 year ago

nejmennu commented 1 year ago

Som sagt, kan inte ladda ner från TV4Play, har testat med flera olika program men icke sa nicke. Fungerade perfekt igår men inte idag :) :(

MrPinkman98 commented 1 year ago

Samma här tyvärr. SVTPlay fungerar dock.

Lunarwalker60 commented 1 year ago

Jag kan bekräfta att TV4 har ändrat sin metod för att starta sina videos. Jag har traggat lite med det men jag blir inte klok på det.

Lunarwalker60 commented 1 year ago

Nu har jag traggat lite mer med TV4. Jag valde Bröderna Noréns underbara resa - S01E06 för att jag vet att det fungerade i mådags när jag tog hem programmet.

Huvudmanifestet finns på: https://vod.streaming.a2d.tv/49bb0bdb-4cf9-4a6f-98e9-6edf6282c965/de1dccd0-06bb-11ee-a7ce-990a0f22ec34_20388502.ism/.m3u8


EXTM3U

EXT-X-VERSION:6

Created with Unified Streaming Platform (version=1.11.23-28141)

AUDIO groups

EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-aacl-128",NAME="audio",DEFAULT=YES,AUTOSELECT=YES,CHANNELS="2",URI="de1dccd0-06bb-11ee-a7ce-990a0f22ec34_20388502-audio=128000.m3u8"

SUBTITLES groups

EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="textstream",LANGUAGE="sv",NAME="Svenska",DEFAULT=YES,AUTOSELECT=YES,URI="de1dccd0-06bb-11ee-a7ce-990a0f22ec34_20388502-textstream_swe=1000.m3u8"

variants

EXT-X-STREAM-INF:BANDWIDTH=455000,CODECS="mp4a.40.2,avc1.4D400D",RESOLUTION=384x216,FRAME-RATE=25,AUDIO="audio-aacl-128",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE

de1dccd0-06bb-11ee-a7ce-990a0f22ec34_20388502-video=300000.m3u8

EXT-X-STREAM-INF:BANDWIDTH=985000,CODECS="mp4a.40.2,avc1.4D401E",RESOLUTION=640x360,FRAME-RATE=25,AUDIO="audio-aacl-128",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE

de1dccd0-06bb-11ee-a7ce-990a0f22ec34_20388502-video=800000.m3u8

EXT-X-STREAM-INF:BANDWIDTH=1727000,CODECS="mp4a.40.2,avc1.4D401E",RESOLUTION=768x432,FRAME-RATE=25,AUDIO="audio-aacl-128",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE

de1dccd0-06bb-11ee-a7ce-990a0f22ec34_20388502-video=1500000.m3u8

EXT-X-STREAM-INF:BANDWIDTH=2787000,CODECS="mp4a.40.2,avc1.4D401F",RESOLUTION=1024x576,FRAME-RATE=25,AUDIO="audio-aacl-128",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE

de1dccd0-06bb-11ee-a7ce-990a0f22ec34_20388502-video=2500000.m3u8

EXT-X-STREAM-INF:BANDWIDTH=4377000,CODECS="mp4a.40.2,avc1.64001F",RESOLUTION=1280x720,FRAME-RATE=25,AUDIO="audio-aacl-128",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE

de1dccd0-06bb-11ee-a7ce-990a0f22ec34_20388502-video=4000000.m3u8

EXT-X-STREAM-INF:BANDWIDTH=7027000,CODECS="mp4a.40.2,avc1.640028",RESOLUTION=1920x1080,FRAME-RATE=25,AUDIO="audio-aacl-128",SUBTITLES="textstream",CLOSED-CAPTIONS=NONE

de1dccd0-06bb-11ee-a7ce-990a0f22ec34_20388502-video=6500000.m3u8

keyframes

EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=40000,CODECS="avc1.4D400D",RESOLUTION=384x216,URI="keyframes/de1dccd0-06bb-11ee-a7ce-990a0f22ec34_20388502-video=300000.m3u8"

EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=106000,CODECS="avc1.4D401E",RESOLUTION=640x360,URI="keyframes/de1dccd0-06bb-11ee-a7ce-990a0f22ec34_20388502-video=800000.m3u8"

EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=199000,CODECS="avc1.4D401E",RESOLUTION=768x432,URI="keyframes/de1dccd0-06bb-11ee-a7ce-990a0f22ec34_20388502-video=1500000.m3u8"

EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=332000,CODECS="avc1.4D401F",RESOLUTION=1024x576,URI="keyframes/de1dccd0-06bb-11ee-a7ce-990a0f22ec34_20388502-video=2500000.m3u8"

EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=530000,CODECS="avc1.64001F",RESOLUTION=1280x720,URI="keyframes/de1dccd0-06bb-11ee-a7ce-990a0f22ec34_20388502-video=4000000.m3u8"

EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=862000,CODECS="avc1.640028",RESOLUTION=1920x1080,URI="keyframes/de1dccd0-06bb-11ee-a7ce-990a0f22ec34_20388502-video=6500000.m3u8"


Ur det kan man få ihop ett komplett kommando som fungerar: ffmpeg -i "https://vod.streaming.a2d.tv/49bb0bdb-4cf9-4a6f-98e9-6edf6282c965/de1dccd0-06bb-11ee-a7ce-990a0f22ec34_20388502.ism/hls/de1dccd0-06bb-11ee-a7ce-990a0f22ec34_20388502-video=800000.m3u8" -i "https://vod.streaming.a2d.tv/49bb0bdb-4cf9-4a6f-98e9-6edf6282c965/de1dccd0-06bb-11ee-a7ce-990a0f22ec34_20388502.ism/hls/de1dccd0-06bb-11ee-a7ce-990a0f22ec34_20388502-audio=128000.m3u8" -c copy "Bröderna Norén - S01E06.mkv" -i "https://vod.streaming.a2d.tv/49bb0bdb-4cf9-4a6f-98e9-6edf6282c965/de1dccd0-06bb-11ee-a7ce-990a0f22ec34_20388502.ism/hls/de1dccd0-06bb-11ee-a7ce-990a0f22ec34_20388502-textstream_swe=1000.m3u8" "Bröderna Norén - S01E06.srt"

Problemet är bara att man inte kan få ID-nycklarna; "49bb0bdb-4cf9-4a6f-98e9-6edf6282c965" och "de1dccd0-06bb-11ee-a7ce-990a0f22ec34_20388502"

Dessa får man vid uppspelning med kommandot: https://playback2.a2d.tv/play/e2cf9f308dc86620cecb?service=tv4play&device=browser&protocol=hls,dash&drm=widevine&browser=GoogleChrome&capabilities=live-drm-adstitch-2,yospace

Det funkar inte även om man är autentiserad som användare. Troligtvis något med sessionsbundna cookies. suck Det enda sättet är att inspektera network-aktiviteten och kopiera nycklarna manuellt.

DuckRandom commented 1 year ago

Haha, Jonas var snabbare och postade medans jag skrev min guide :P Här slipper man vänta på reklamen ;) Men annars är det ju samma-ish lösning.

Min (senaste) temporära lösning för tv4play. (Funkar i Firefox. Andra webläsare har jag ej testat) Som exempel använder vi https://www.tv4play.se/program/373d3eb5516914885362/robinson-gr%C3%A4nslandet Kör igång det avsnitt du vill se och tryck shift+F5 (eller högerklicka och välj inspektera) Edit: Eller, F12 eller shift+ctrl+i (hade ingen aning att det fanns så många genvägar för inspektera) Välj "nätverk" och filtrera URL till m3u8 Kopiera URLen med högerklick (kopiera värde->kopiera URL) Den bör se ut någonting såhär "https://vod.streaming.a2d.tv/fb6e3a9e-dd22-4461-9451-0f7239cfcc78/5fd7a3e0-be8c-11ed-864e-7f7a5af12177_20444120.ism/5fd7a3e0-be8c-11ed-864e-7f7a5af12177_20444120-video=800000.m3u8"

Här kan du klippa bort allt utom .m3u8 efter .ism/ Så du får "https://vod.streaming.a2d.tv/fb6e3a9e-dd22-4461-9451-0f7239cfcc78/5fd7a3e0-be8c-11ed-864e-7f7a5af12177_20444120.ism/.m3u8" Sen kör vi vår gamle vän yt-dlp igen, sisåhär: yt-dlp.exe -S ext:mp4:m4a --all-subs --convert-subs srt "https://vod.streaming.a2d.tv/fb6e3a9e-dd22-4461-9451-0f7239cfcc78/5fd7a3e0-be8c-11ed-864e-7f7a5af12177_20444120.ism/.m3u8" -o "valfritt namn.mp4" (Ja, jag föredrar .mp4 före .mkv och här får du med undertexter direkt :) ) Andra metoder att extrahera .m3u8 är till exempel via https://addons.mozilla.org/en-GB/firefox/addon/hls-stream-detector/ vilket jag tycker funkar hyfsat och som även har "copy stream URL as..." olika färdiga kommandon för tex. ffmpeg och yt-dlp.

DuckRandom commented 1 year ago

shift+F5 brukade vara "force reload page" i firefox men det flyttades till ctrl+F5 för, jag vet inte hur länge sen, och då blev shift+F5 "inspektera". Som sagt, jag hade ingen aning om att det fanns så många sätt att komma till "inspektionsmodulen" eller vad det officiella namnet nu är :P

Edit: aha! https://firefox-source-docs.mozilla.org/devtools-user/ Edit igen: https://support.mozilla.org/en-US/kb/keyboard-shortcuts-perform-firefox-tasks-quickly?redirectslug=Keyboard+shortcuts&redirectlocale=en-US#w_tools

Många kombinationer för att komma till ungefär samma fönster men om man ska vara riktigt petig så är ju ctrl+shift+c (inspector) det du var ute efter och ctrl+shift+e (network) det jag var ute efter. 😆

robban00 commented 1 year ago

Jag har också problem tv4play. hoppas att det fixar till sig snart.

robban00 commented 1 year ago

Hur går det, går det att lösa detta problemet?

viktorlindgren commented 1 year ago

Hej.

TV4Play har ändrat en del saker i sin uppdatering. Nu krävs det att man är inloggad för att få hämta metadatafilen som har länken till manifestfilen(m3u8).

  1. Plocka ut refresh token från webbläsaren. Det är cookie med namn "tv4-refresh-token" på hemsidan https://www.tv4play.se/. Den är giltig i ett år.

  2. Skicka en POST request till https://avod-auth-alb.a2d.tv/oauth/refresh med innehållet

    {"refresh_token":"my-secret-tv4-refresh-token"}

    och application/json som header på content-type. my-secret-tv4-refresh-token bytts ut mot din tv4-refresh-token. Som svar får man ett json object med access_token - denna är giltig i några timmar. Access token är en nyckel som man ska sätta som HTTP Header X-Jwt och värdet Bearer $access-token för när man hämtar manifestfilen.

  3. Från en serie, t.ex https://www.tv4play.se/video/a74c753085090f728504/pilot så är a74c753085090f728504 videoId.

  4. Gör en HTTP GET med content-type application/json mot

    "https://playback2.a2d.tv/play/" + videoId + "?service=tv4play&device=browser&protocol=hls%2Cdash&drm=widevine&browser=MicrosoftEdge&capabilities=live-drm-adstitch-2%2Cyospace3"

    och inkludera X-Jwt i headern med din access-token från punkt 2. Svar är ett jsonobject där vi är intresserad av sektionen "playbackItem" och värdet på manifestUrl som då är m3u8 länken.

  5. Plocka ut m3u8 länken till ffmpeg. Denna länk har inget authentiseringskrav.

I princip betyder det att webbläsarentillägget måste fråga om inloggningsuppgifterna till tv4play.se för att få fram tv4-refresh-token. Det betyder att detta inte är en quickfix så vida inte webbläsartilläget själv kan plocka ut den info från sidan. Ett alternativ är att sätta upp en proxy för att plocka ut denna info. Men det är inte en snygg lösning.

Ett tips är att använda VLC med m3u8 länken om man vill titta på videon direkt.

Lunarwalker60 commented 1 year ago

Hej Viktor, tack för att Du tar dig tid att dela dina insikter. Jag har traggat med detta en tid och byggde ett kommando i en windows cmd men jag lyckas baa få "Bad request" som svar. Kan Du eller någon annan se nåt fel i mitt kommando?

curl -X POST "https://avod-auth-alb.a2d.tv/oauth/refresh" -H "Content-type:application/json" -d {"refresh_token":"eyJhbGciOiJFUzI1NiIsImtpZCI6IjYzNGVjMTI1LTQ0MTctNGQzZS05OTI5LTU2MTMwOTFjMzQ5MCIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJ0djQiLCJleHAiOjE3MTgyMjI5MjgsImlhdCI6MTY4NjY4NjkyOCwiaXNzIjoiaHR0cHM6Ly9hdm9kLWF1dGgtYWxiLmEyZC50diIsImp0aSI6IjJ0azUxa3AxNWXXXXRncWpoODA0ZmM0MSIsIm5iZiI6MTY4NjY4NjkyOCwic2Vzc2lvbl9pZCI6ImF2b2RfODk5Yjk4NDItOTRjMS00YzhjLTg1YTMtYjc2MGU5MjcwMTI5IiwidHlwZSI6InJlZnJlc2giLCJ1aWQiOiIxMDIxMDgwNDMifQ.k8vLfF6pJeWy7B3z_h7Xkhjvgg8g1liWCTpPMyEJZA-lrNWeRmDPetK9caIJFCotGvJ3c4oCIuPdWc7s5Am6CQ"}

viktorlindgren commented 1 year ago

Hej Lunarwalker60.

Använd -d @refresh_token.json och skriv det du postar till filen refresh_token.json. Annars är risken att något i refresh token behövs escapas men det behövs ej när man använder en fil.

Jag testade med din nyckel och får invalid token(du har nog tagit fel nyckel eller censurerat den) bild

refresh_token.json bild

Men ändrar jag till min nyckel så funkar det.

Lunarwalker60 commented 1 year ago

Hej igen Viktor Jo, jag "censurerade" men jag litade på att Du skulle förstå det. :-) Tack för utvecklingen, jag ska strax testa - jag har hjärnan i ett annat projekt just nu men jag återkommer så småningom.

Lunarwalker60 commented 1 year ago

suck Jag har testat men får samma resultat. Jag har uppdaterat cURL till senaste 8.1.2_3 och jag har uppdaterat cookien med en ny refresh_token och lagt in den i json-filen. Jag kan spela upp programmet i TV4 Play och tom ladda ner det (om jag kopierar manifestet) men jag kan inte generera access-token för att slippa rota i inspektionsläget. Det måste vara nåt jag missat! curl -X POST "https://avod-auth-alb.a2d.tv/oauth/refresh" -H "Content_type: application/json" -d @refresh_token.json

Lunarwalker60 commented 1 year ago

Gokväll! Nu har jag traggat mer eller minde hela dagen och plötsligt fungerade det! :-)

curl -X POST https://avod-auth-alb.a2d.tv/oauth/refresh -H "content-type: application/json" -d @refresh_token.json -o access_token-230624-1643.json

{"access_token":"eyJhbGciOiJFUzI1NiIsImtpZCI6IjYzNGVjMTI1LTQ0MTctNGQzZS05OTI5LTU2MTMwOTFjMzQ5MCIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJ0djQiLCJlbnRpdGxlbWVudF9zb3VyY2VzIjpbImZyZWVfcHJvZHVjdHMiXSwiZW50aXRsZW1lbnRzIjpbIjEiLCENSUR3MiOiJodHRwczovL2F2b2QtYXV0aC1hbGIuYTJkLnR2IiwianRpIjoiMnRscHRlYzBsNGVlaGo0dHVjMGQ4aWcyIiwibmJmIjoxNjg3NjE3MDA0LCJzZXNzaW9uX2lkIjoiYXZvZF83MDAyZDAyMS05ZTg0LTQzY2EtYWY4OC02ZGRjM2M2MDU5YTkiLCJ0eXBlIjoiYWNjZXNzIiwidWlkIjoiMTAyMTA4MDQzIn0.-5J8HbeZHXcrDZXqIp_baoOrZUQ3BkdXzYTPJj7fGriYeYdOicSwk5omRISYdyVjLfUkDYtEx0q7GgmCAMy9Ow","token_type":"bearer"}

Vidare till nästa steg mot manifest-adressen - imorgon!

Lunarwalker60 commented 1 year ago

Sista inlägget för idag, lovar! Jag kunde inte hålla mig och testade lite snabbt en GET med access_token och det FUNKADE. Nu har jag pusselbitarna för att automatisera hemladdningsförfarandet. Dock ej i Privatkopiera-tillägget. Det hamnar i mitt PCopy-projekt i VB6. Tack för vägledningen Viktor

robban00 commented 1 year ago

När kommer en lösning på problemet?

Shroom86 commented 1 year ago

När kommer en lösning på problemet?

Detta program har fungerat för mig med Tv4play:

https://svtplay-dl.se/

kommando: svtplay-dl programlänk -u username -p password

ha ffmpeg i samma mapp

stefansundin commented 1 year ago

Har en fix på gång tack vare Viktors hjälp. Den nya versionen kommer snart så det kommer inte att fungera fören det är gjort och din webbläsare har uppdaterat.

stefansundin commented 1 year ago

Har släppt v0.3.9 nu.