From a1be045a7dba805de58de7949fed2cf8fc87f5cb Mon Sep 17 00:00:00 2001 From: data Date: Sat, 28 Feb 2026 22:25:45 +0100 Subject: [PATCH] feat: Samsung TV Installation + Streaming-Fix - Samsung-Zertifikate (author + distributor) fuer TV-App erstellt - WGT mit Samsung-Signatur auf TV installiert und getestet - Streaming movflags korrigiert: default_base_moof statt faststart (pipe) - frag_duration=1s fuer schnelleren Playback-Start auf Samsung TV - INSTALL.md komplett ueberarbeitet mit Manjaro/Arch-Anleitung - .gitignore: Tizen Studio workspace/ Ordner ausgeschlossen Co-Authored-By: Claude Opus 4.6 --- .gitignore | 3 + tizen-app/INSTALL.md | 166 +++++++++++++--------- tizen-app/VideoKonverter.wgt | Bin 3976 -> 8541 bytes tizen-app/certs/author.crt | 27 ++++ tizen-app/certs/author.p12 | Bin 0 -> 4305 bytes tizen-app/certs/distributor.crt | 28 ++++ tizen-app/certs/distributor.p12 | Bin 0 -> 4441 bytes video-konverter/app/routes/library_api.py | 8 +- 8 files changed, 167 insertions(+), 65 deletions(-) create mode 100644 tizen-app/certs/author.crt create mode 100644 tizen-app/certs/author.p12 create mode 100644 tizen-app/certs/distributor.crt create mode 100644 tizen-app/certs/distributor.p12 diff --git a/.gitignore b/.gitignore index 8a6a7f3..d5386bd 100644 --- a/.gitignore +++ b/.gitignore @@ -35,5 +35,8 @@ video-konverter/app/cfg/ .DS_Store Thumbs.db +# Tizen Studio Workspace +workspace/ + # Claude .claude/ diff --git a/tizen-app/INSTALL.md b/tizen-app/INSTALL.md index 7bf1af3..8e2c5d1 100644 --- a/tizen-app/INSTALL.md +++ b/tizen-app/INSTALL.md @@ -4,7 +4,7 @@ Die VideoKonverter TV-App auf einem Samsung Smart TV (Tizen) installieren. ## Voraussetzungen -- Samsung Smart TV mit Tizen OS (ab 2017) +- Samsung Smart TV mit Tizen OS (ab 2017, getestet: Tizen 9.0) - PC und TV im gleichen Netzwerk - Samsung Developer Account (kostenlos): https://developer.samsung.com/ - Tizen Studio auf dem PC @@ -20,105 +20,131 @@ Download: https://developer.tizen.org/development/tizen-studio/download chmod +x web-ide_Tizen_Studio_*.bin ./web-ide_Tizen_Studio_*.bin -# Nach Installation: Tools liegen unter ~/tizen-studio/ -# Package Manager oeffnen und installieren: -# - Tizen SDK Tools -# - Samsung TV Extensions (Extension SDK Tab) -# - Samsung Certificate Extension (Extension SDK Tab) +# Nach Installation: Package Manager CLI nutzen +~/tizen-studio/package-manager/package-manager-cli.bin install \ + --accept-license cert-add-on TV-SAMSUNG-Public + +# WICHTIG auf Manjaro/Arch: Fake-dpkg Wrapper anlegen +# (Tizen PM prueft dpkg Pakete die auf Arch nicht existieren) +mkdir -p /tmp/fake-dpkg +cat > /tmp/fake-dpkg/dpkg << 'EOF' +#!/bin/bash +if [[ "$*" == *"-l"* ]] || [[ "$*" == *"--list"* ]] || [[ "$*" == *"-s"* ]]; then + for pkg in "$@"; do + [[ "$pkg" != -* ]] && echo "ii $pkg 99.0 amd64 Fake" + done +fi +exit 0 +EOF +chmod +x /tmp/fake-dpkg/dpkg +# Dann mit PATH="/tmp/fake-dpkg:$PATH" den Package Manager starten ``` ### Wichtige Pfade nach Installation ``` -~/tizen-studio/tools/sdb # Smart Development Bridge (wie adb) -~/tizen-studio/tools/ide/bin/tizen # CLI-Tool -~/tizen-studio/ide/TizenStudio # IDE starten +~/tizen-studio/tools/sdb # Smart Development Bridge +~/tizen-studio/tools/ide/bin/tizen # CLI-Tool +~/tizen-studio/tools/certificate-manager/certificate-manager # Certificate Manager GUI ``` ## Schritt 2: Samsung Developer Zertifikat erstellen -Das Zertifikat signiert die App fuer deinen TV. Ohne Zertifikat verweigert der TV die Installation. +Das Zertifikat signiert die App fuer den TV. Samsung TVs akzeptieren NUR Samsung-signierte +Zertifikate (nicht Standard-Tizen!). -1. Tizen Studio IDE starten -2. **Tools > Certificate Manager** oeffnen -3. **"+" klicken** > **Samsung** waehlen (nicht Tizen!) -4. **TV** als Geraetetyp waehlen -5. Samsung Developer Account Daten eingeben -6. Zertifikat wird erstellt und gespeichert +### Voraussetzung: Samsung Certificate Extension installieren + +```bash +# MUSS installiert sein, sonst erscheint "Samsung" nicht als Option! +PATH="/tmp/fake-dpkg:$PATH" ~/tizen-studio/package-manager/package-manager-cli.bin \ + install --accept-license cert-add-on +``` + +### Zertifikat erstellen (Certificate Manager GUI) + +1. Certificate Manager starten: `~/tizen-studio/tools/certificate-manager/certificate-manager` +2. **"+" klicken** > **Samsung** waehlen (NICHT Tizen!) +3. **TV** als Geraetetyp waehlen +4. Author-Zertifikat: Key Filename + Author Name eingeben +5. Samsung Developer Account einloggen +6. Distributor-Zertifikat: DUID des TVs eintragen (siehe Schritt 3) +7. **Finish** - Zertifikat wird unter `~/SamsungCertificate//` gespeichert **WICHTIG:** Zertifikat sichern! Bei App-Updates muss das gleiche Zertifikat verwendet werden. +Backup liegt in `tizen-app/certs/`. ## Schritt 3: TV vorbereiten (Developer Mode) -### Ueber TV-Menue - 1. TV einschalten 2. **Apps** oeffnen (Home > Apps) -3. Im Apps-Bereich die Ziffern **12345** eingeben (bei neueren Fernbedienungen evtl. ueber das virtuelle Nummernfeld) +3. Ziffern **12345** eingeben (virtuelles Nummernfeld bei neueren Fernbedienungen) 4. Developer Mode **ON** schalten 5. **Host PC IP** eingeben (IP des PCs mit Tizen Studio) -6. TV neustarten +6. **TV neustarten** (wichtig!) -### Alternative (neuere TVs ab 2024/Tizen 8) +### DUID auslesen (fuer Zertifikat) -Falls der 12345-Trick nicht funktioniert: -- **Einstellungen > Allgemein > System-Manager** nach Developer Mode suchen -- Oder direkt ueber Tizen Studio Device Manager verbinden (siehe Schritt 4) +```bash +# Erst TV verbinden (Schritt 4), dann: +~/tizen-studio/tools/sdb shell 0 getduid +# Gibt z.B. zurueck: KLCDNTGIJS4OU +``` ## Schritt 4: TV verbinden -1. **TV-IP herausfinden:** TV > Einstellungen > Allgemein > Netzwerk > IP-Adresse -2. In Tizen Studio: **Tools > Device Manager** oeffnen -3. **Remote Device Manager** > TV-IP eingeben > Verbinden -4. TV sollte in der Geraete-Liste erscheinen -5. **Rechtsklick auf TV > "Permit to install applications"** - -### Oder per Kommandozeile - ```bash -# Verbinden +# Verbinden (Port 26101 muss offen sein) ~/tizen-studio/tools/sdb connect # Pruefen ~/tizen-studio/tools/sdb devices +# Zeigt: :26101 device ``` -## Schritt 5: App installieren +Falls Verbindung fehlschlaegt: +- Developer Mode aktiviert? PC-IP korrekt eingegeben? +- TV nach Aenderung des Developer Mode neugestartet? +- Port 26101 in Firewall offen? -### Option A: Ueber Tizen Studio IDE (empfohlen) +## Schritt 5: WGT bauen und installieren -1. Device Manager: TV ist verbunden -2. **Rechtsklick auf TV > "Install app"** -3. `VideoKonverter.wgt` auswaehlen -4. Installation laeuft automatisch - -### Option B: Per Kommandozeile +### WGT mit Samsung-Zertifikat signieren ```bash -cd /pfad/zu/tizen-app/ -~/tizen-studio/tools/ide/bin/tizen install -n VideoKonverter.wgt -t +# Sauberes Build-Verzeichnis erstellen (nur App-Dateien!) +mkdir -p /tmp/tizen-build +cp tizen-app/config.xml tizen-app/index.html tizen-app/icon.png /tmp/tizen-build/ + +# WGT mit Samsung Security Profile signieren +cd /tmp/tizen-build +~/tizen-studio/tools/ide/bin/tizen package -t wgt -s -- /tmp/tizen-build/ ``` -Der TV-Name wird mit `sdb devices` angezeigt. - -### Option C: Docker (ohne Tizen Studio) - -Falls Tizen Studio zu aufwaendig ist - das Georift Docker-Image hat alles drin: +### Auf TV installieren ```bash -# Generisches WGT installieren (ohne Tizen Studio auf dem PC) -docker run --rm -v $(pwd):/app georift/install-jellyfin-tizen \ - --wgt /app/VideoKonverter.wgt +# TV-Name mit sdb devices ermitteln +~/tizen-studio/tools/ide/bin/tizen install -n /tmp/tizen-build/VideoKonverter.wgt -t ``` -Siehe: https://github.com/Georift/install-jellyfin-tizen +Erfolgreiche Ausgabe: +``` +Tizen application is successfully installed. +``` + +### App deinstallieren (falls noetig) + +```bash +~/tizen-studio/tools/sdb shell 0 vd_appuninstall vkTVApp001.VideoKonverter +``` ## Schritt 6: App starten 1. App erscheint als **"VideoKonverter"** im Apps-Menue des TVs 2. Beim **ersten Start**: Server-IP eingeben (z.B. `192.168.155.12:8080`) 3. Die IP wird gespeichert - beim naechsten Start verbindet die App automatisch -4. Login mit TV-App Benutzerdaten (erstellt in der Admin-Oberflaeche) +4. Login mit TV-App Benutzerdaten (erstellt in der Admin-Oberflaeche unter `/admin`) ## Wie funktioniert die App? @@ -133,25 +159,37 @@ Die App auf dem TV muss NICHT neu installiert werden. ## Fehlerbehebung +### "Invalid certificate chain" bei Installation +- **Haeufigster Fehler!** Samsung TVs akzeptieren NUR Samsung-signierte Zertifikate +- Im Certificate Manager: "Samsung" waehlen, NICHT "Tizen" +- Samsung Certificate Extension (`cert-add-on`) muss installiert sein + ### TV wird nicht gefunden - Sind PC und TV im gleichen Netzwerk/VLAN? -- Ist Developer Mode auf dem TV aktiviert? -- Firewall auf dem PC deaktiviert/Port 26101 offen? +- Ist Developer Mode auf dem TV aktiviert + TV neugestartet? +- Firewall auf dem PC: Port 26101 offen? -### Installation schlaegt fehl -- Zertifikat korrekt erstellt? (Samsung, nicht Tizen) -- "Permit to install applications" ausgefuehrt? -- Alte Version erst deinstallieren: `sdb shell 0 vd_appuninstall vkTVApp001.VideoKonverter` +### Video startet langsam / nicht +- Server laeuft? `curl http://:8080/tv/` +- AV1-Videos brauchen einen TV mit AV1-Unterstuetzung (ab ~2020) +- Streaming nutzt fragmented MP4 (`frag_keyframe+empty_moov+default_base_moof`) ### App startet nicht / weisser Bildschirm -- Server laeuft? `curl http://:8080/tv/` -- Richtige IP eingegeben? -- Browser-Cache auf TV leeren: App deinstallieren und neu installieren +- Richtige Server-IP eingegeben? +- Browser-Cache leeren: App deinstallieren und neu installieren + +## Getestete Konfiguration + +| Komponente | Version | +|-----------|---------| +| Samsung TV | GQ65Q7FAAUXZG (Tizen 9.0) | +| Tizen Studio | 6.0+ | +| sdb | 4.2.36 | +| tizen CLI | 2.5.25 | +| Host OS | Manjaro Linux (KDE) | ## Links - Samsung Developer Portal: https://developer.samsung.com/smarttv/develop - Tizen Studio Download: https://developer.tizen.org/development/tizen-studio/download - Samsung TV Quick-Start Guide: https://developer.samsung.com/smarttv/develop/getting-started/quick-start-guide.html -- Jellyfin Tizen (aehnliches Projekt): https://github.com/jellyfin/jellyfin-tizen -- Samsung-Jellyfin-Installer (GUI): https://github.com/Jellyfin2Samsung/Samsung-Jellyfin-Installer diff --git a/tizen-app/VideoKonverter.wgt b/tizen-app/VideoKonverter.wgt index 089f8bf2ce4739db9e8a07b0f320c9d4e292a0cf..4af4ba2517e91ee06c8c6ea5f99e729054c149e8 100644 GIT binary patch delta 6565 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 diff --git a/tizen-app/certs/author.crt b/tizen-app/certs/author.crt new file mode 100644 index 0000000..a3abc31 --- /dev/null +++ b/tizen-app/certs/author.crt @@ -0,0 +1,27 @@ +-----BEGIN CERTIFICATE----- +MIIEfTCCAmWgAwIBAgIIV7LKnb5BWxEwDQYJKoZIhvcNAQELBQAwgZIxCzAJBgNV +BAYTAktSMRowGAYDVQQIDBFSZXB1YmxpYyBvZiBLb3JlYTETMBEGA1UEBwwKU3V3 +b24gQ2l0eTEmMCQGA1UECgwdU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4x +CzAJBgNVBAsMAlZEMR0wGwYDVQQDDBRTYW1zdW5nIFZEIEF1dGhvciBDQTAeFw0y +NjAyMjgyMTEwMDhaFw0yNzAyMjgyMTEwMDhaME4xCTAHBgNVBAYTADEJMAcGA1UE +CBMAMQkwBwYDVQQHEwAxCTAHBgNVBAoTADEJMAcGA1UECxMAMRUwEwYDVQQDEwxF +ZHVhcmQgV2lzY2gwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCPuf5J +A+94c9QTqtm8rF6zPOCRjXZGZ+CoZLaJ1NMWLEwyTasEf08qkbiwzlmH3EAlyh4e +EmEBTqb5n6wCaakUtxwBYOb79yFSpoUU254XhjNilRW6F4x0loY+l6SaDpfkRjMx +PSLUZn2wXOXsVIgH39EFK3V1098hS5dBU++eBKhGFabvXo6cwC8a/f7CaE6JFZxe +v+F2zZW4nYWEAl6QTrgBWrGrzZQHbGjID8ZOcx/I2xQP0yD2oNsxMxWppUxCJjZS +k97hRA+XN/j1AVIRokXJDcOfifsNMNp6y0HV029X+57KN/zlGzZBJIXaRqqQS5JW +gHH9Oyn210Cj9iylAgMBAAGjGjAYMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgeAMA0G +CSqGSIb3DQEBCwUAA4ICAQBfaijH6HNNoUEBxXgGX6cxhoyVwhRQHIdkjBvmSi3G +Yf9E3agFM2SFo/TiFgQzEssiQiXabHKiYohUlDxjGp88UqilMyVflq54Uzw7EpBM +XxHlxTWIMdnUWXTRBbbxSFnvcde2dcH2hFk5TeiddaXOwcvErl6ewDytkBgL/MVT +zqUoiN7ATMwx1R3D5Kp7sog14UwkiKHLOdven+leURhRkl6rxJ9dD5X1ETisXhF5 +QFazYXm/Hm3cAMfzqZVZGAXn0YZg2cP+iwroFGXxXONDaJAYNleUXZvZqhfXIN81 +zqeIVL2fotl8pUiLkTihbBjd1bvzK+aAHPHeJHKbBBjGfH6l5d5d5xj9RU7o92bv +CiUe+lwN4IBcox8w1zFPqGv/8MFwcK/hoNh001rsAOoU3PQPag/7cvReqaKHbNNr +b8wUAlieTZktyrs4Ey9bd0eSJer5YfyLuQi1CiiLRcth2h5O9Xj4UEZfFE1DoIiQ +S1d/HQ1+MyFd2RszNqLqORL0PfgT909GSN+g0FIO/4uOvJUikAnhNT1QD62p6DvS +XJtlDE2KeYEzwoAxpX7RDf8AXuvFe9VG2rrmGJjXu+iPv6ez3+TnrXnUovxeoJZw +avbvaMDa93lcnTqzxhzXmJAC9kN+6L0ocN+XZIanxEABXm7+cOLkjRNRjg6n9unB +jQ== +-----END CERTIFICATE----- diff --git a/tizen-app/certs/author.p12 b/tizen-app/certs/author.p12 new file mode 100644 index 0000000000000000000000000000000000000000..166cd13ce4e40b079e69bb356ff687d6e83697a1 GIT binary patch literal 4305 zcmY+EWmppq*Tx5I#1I^vDonZ@f^-k0MuRY6bmyN&P?3Rjj%E{Zh;&IK4T_|cG|~vt zCFqFP_qpEpd9LTfea?0L?)#jNHw+CKCMF_*p&^l^6atYNk>^xIWJLLBNFWdm@%@Xv zU}#Xte_0@RAR6TS7u)}pH7Vu)UEKl`5$B_U1Q;544&x^U|3CiwoDE1HPjNygiz<3R zaPeQHQI5qtswglbCIR&51JS@QbT_CTb&{CbI!2A7-GXzept_clRB)QL%rzUqc9Wk-D5?;Jg%oiQ4pqoPu`CDRI@xcdl?a$G66+4ghOlu?{sHFXkpA0bIn zI{U%ohMQ|#q4`J+;a6-}v`>+&kDMjg zj|SanJvC`_3um!P++OH7-*W%MKU;9AynR#Rw&+S|EN{UZsVDddqlFqPROHG^R@-fD0xk)A_7v-s&63YlumQa z<6A48SD2XMg^*WNd`dAf0Q(*c%=vN*QyKT9O{aE=}irE8RBN`2s&HAy$PFD z2!7#UQ>K!unwN8=kxGzy^Xexu1lU3_^;gzyEp6Pk(tT)ur0c4>mm`MY*VC?? zEO-g8Mj4urN&47x3yd4+>&6`NyfsqQM;a{48tz9;P;Ydk z0ayF*6SZ}?(Mb+${iLMEDiR>^C9O?)p0)BEd>yT((} zEa6NaWgp4Y`0(4(B(!AAyC$WLWHbl}jPQH1gu=^dzjEyR!lh|F*<(mDMF5xcekyAKn9(<5X-v;fW$etLNlG_?-xMLnF!|-|AmX*(#4{NL z+soyP@_jS$!fePjYOWWhtZV(@#2-&IUttUD`$ZahuqXw%ztH{Vt6M}|ZptEAnP9TQ zh}b6@aOBQ|ApUYucngm=F8KqGbs#)qD!}7J$YP~qysAjZTa>z-(<)Iy=XbP&91^{G zig%WGxQf`jf)bztJaIon@d#u;jaLn_WH=?+m#uB69^!qGI?UIuJ>SVheSl9BQ|sHx zi<$We_m!P7E}OXLJ{NmFwJjHJtZ?%LdiPnyn}fHPn2Z80*>yL^*W{M8XIUt?zag6l zFGBjc{-VYp;gfGTXMEd4O^r8SN?oal-F@SZ+hpi7>ZK|fb9%VxnR& zm^4gW3Wf&n{yRiQnvVuA{zbFIM1a3*{67xSe|0YD|90;83Xw_&+#IDyx7tFhWAWaO zdjbEyI`=G!Z)5B9Q9p#Klec)TEy4joy(U&6evKi%&Lx6CEyE)3E% zaV-6=quTRd338~}rp8kW^OFU|FOS7NjV)Ix$$ zQM)DC(H}H6sDJIgQK~M@j>EbpW)$3#h1GY(&&zt<6%Oe3qI$Ud9^ry^xF~kfx@gYG zoBT+9kVd?&KzAoihzQgY=0ezD%tLoS7l*#p*d{qKU1sa{c=yypuG{@dbb*tt-%b#?0f^ql6uaSraH?gN5eK zelEJ49_WvO<(ql^DNK8f_o>|W^~3ukHo{&e1F^PvJ-!wv5shA%^{wG!tX`@<1-`f-kJU+5HOD*D8ryVCbY?44fR9 zH>@)rR-*TA9i1do8~c``m;1*nvh@1xhoo>hTuq(Pg$PHv0hWETHmWmBBRiajn^gcs z=}9J^t7_+wdC=c)ROu)ExKxYU!t%G6C(aPN@Q=o}a`i(4nGk2?-ie5AsNP6WO*dv? zmHgBD_TApc?=`=KtZ8=3JBBms+)ltrmIV0>9GzYEdS79+r_VQ^kZIr3e%Yf~E`KcB zDLLz|__1`3`#tmlkqi7Bc}ZHI-=$$KE4@lzXN4;{_ZaS~jT{K7>CyTb@H;SCJ1P0u zca$(j;)_F6Yu60h?#^sYL&Tui+TE?4K3Ce#D&~t-gRFk2>-om^*?^1>@22jkW<6+i z&}WzU^iLMEZ!^a6m5a-s_0_E{G}}z{1f4L@HDsUr!Dkm|_%}s(n)u6Exjyk&(Q5A6 z@wCnF`*F79z_Gv#C55qa6zwwK8dKv#wPc)3QIxe**g9*58{F%HH6}c@+GB95Vfy@Y z;7Af%>LHCFe}~s=rC}?0Mwu8)=~2WjT(LTiP%F)fI2icaQ|VbatZ?ZaqSWQzM4 ze)_WQ2dIbn<0lyle0NrgL1XYvij4=|;a;@CrquA0y~JpF%YTllV9(P9ezFi)naSrK zh{NUC+QWyT-Di0&FN7@$-75=LLbw!YU9-va+wT8hC+zXEwwTX<5s-}!d;84lh3zAT z<%+!zu#uoM#rlJ=7F`Jxb3j*KuD*lX^Os>CWzBqCDdcAAMH)EF37l)|_xhjXI$4d? z)Q0!Wl6>!d1TQKhMOWWz={2;POYl6Uq4`3n3qH%h@8zpy)oPJ@mB(xCv%CeH(5V*bL-H#%1y4g$1){GjEML z&<7S;q@%+J`l71BsOna(MvatgE`wWr-Cn7e*N@5+|A{>#%}+ooEI`$C7{QIEPyFbe z!x4k-L6&nFvF7qT#>+Aus^IH=k5wec{@~E3-Z&jdnFMi+XzL>`2$#peQ2s zSSi`n$57{s8{z@Co4^876BBSR)|_CXwx+%ebU6EgZ~wX~wgC9lO=|UPX6YC@F3Dvf zUymeNY?yYR;BaFp7CN?eCczwT98M}-1w+ncigE&2L5Q$v->qCZ(052W=0Mx=*g^Do z{46(vP{XK5;FB1L|K}&Ex%~h}R`cIa0?qY@g}+F>X^X196w#WWS71c{Af=m(VMXn9 zvrv(C4F@ci_fN;!M@FYiPhAdrDD70FD+f||GiBth-XM-0&bd^ZOPM1u!+dBBd|L15 zI`HHd3{-@_Mrk*#M`Yp|MY}v5X@VagaLctZwhZqd?uH5M6x}f{z6+V$Y}R##DBsVY zEsN``bf<>4U{?KSz!x1NM9w;5Xe+n|)fVZtK|fqbM|JcE@qpm%5mD``eESSieqn(b zd<>}yG^Qc_wuQxYu045gzq^?V+s_EGC$x}u&$wlNH{??#?)nRlWQL{CK4%*fx%KF; z5JnY`w-UBWzw2%v&ROFFJ4Lh9Nx~yt9<1|TV_ape*&-)-7Kapl`;t!&f|asyHkc0! zTQ5a5nWs;jcyAlZJ@a3mUOuzE#vR1Uvs7m9BAfkZt0-NMN1b%NF4h$x>b}9vm015n zb5L1j{zy@Yhc%mvz+@Qh9&r8v3{@D`PFn^Det-3VV4XUn#oh>BA`cw zjMq8Gc&fE%r&J+gX`EI|_F2n;fb}yU0Im9D608eO z>u9|RJB0OZu6 zA?bdet5T}C(hW#0A{4UDEg>sZ4GhKH3;E78lu{%3JZ_X2kEq>N_{03>wSc>@1Bdru zzIACD$QR)iW0up{maXd5|>ijsb0Mk_{iUw0qkhz_D3nYIvSvlB>sVY~T6kwb%3Q~|DH3=~*2mqw7kY$JS!Rz?P5!n>+AdLd; j++IB(eGbLP0**Os=P4u0yd@vgpYUZ0J7N-|$o&5SqDmS9 literal 0 HcmV?d00001 diff --git a/tizen-app/certs/distributor.crt b/tizen-app/certs/distributor.crt new file mode 100644 index 0000000..9fb8346 --- /dev/null +++ b/tizen-app/certs/distributor.crt @@ -0,0 +1,28 @@ +-----BEGIN CERTIFICATE----- +MIIEyjCCArKgAwIBAgIIHZzx6svX/q0wDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNV +BAYTAktSMRQwEgYDVQQIDAtTb3V0aCBLb3JlYTEOMAwGA1UEBwwFU3V3b24xJjAk +BgNVBAoMHVNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuMQswCQYDVQQLDAJW +RDElMCMGA1UEAwwcVkQgREVWRUxPUEVSIFB1YmxpYyBDQSBDbGFzczAeFw0yNjAy +MjgyMTExMzJaFw0yNzAyMjgyMTExMzJaMHMxETAPBgNVBAMMCFRpemVuU0RLMQkw +BwYDVQQLDAAxCTAHBgNVBAoMADEJMAcGA1UEBwwAMQkwBwYDVQQIDAAxCTAHBgNV +BAYTADEnMCUGCSqGSIb3DQEJARYYZGF0YUBkYXRhLWl0LXNvbHV0aW9uLmRlMIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsIsx/nP0lNgrK5726AEUxgeo +Qjc4K/O6QvdGdquoGKUgy+cLVVF4COKNPM/PrcEFI36yXH8fAoSmd0+6QGRi8VB4 +ZUhJDiuSEy8GD+VXEPB3sFKl4sR0AtD8K5nEaioegE6ldJmLYtROysgFAsFLWv9I +L00OkMSDR5+mxtbT9wf2XJG8q+GToGJ0/UBEp/AMkfZ6M8DdhUZRFlfsASfRuOfa +aQ2joKqDR7Lq4mZdU1esJfN2HsuCBdT4e104QZOtelMW10f8KarWV8nFIkDIsq+B +3Y1zbinH/gYNwOrzqwnH7KgiBvjRc+KCfuFd5BUaV/6igl7dEluFb1zWoFNKrQID +AQABo0UwQzBBBgNVHREEOjA4hhRVUk46dGl6ZW46cGFja2FnZWlkPYYgVVJOOnRp +emVuOmRldmljZWlkPUtMQ0ROVEdJSlM0T1UwDQYJKoZIhvcNAQELBQADggIBAA8D +l3Unyxt/a0xv6Rq1FPvBdMhj4KtFDm18Rd+b6966Dun6VTEwSzbmywewZqcM2rNt +qB91AHUegVoRg0bCEBLA8mwqIPCvnSf/BuX7xtUpvdFVrF4EzgbryAT3HOfAphZ3 +lftMOD+NreXjpp2NGgZ7GeqYzwDZFK1kvhGzIix1lozA+q111+kNuZ87HGVgO1z2 +0MPtR9AxwCCNWZV9t/mNNWSuvyrUwkCMy4hwSYzWp0Q09g5MZdgaqvv0GE8cB1hO +85EKEqY64RHZlAUTIKNlm2veGRWMoHIooBa3kdAjB+GK9Krv+delcOvzeb5Ys9Xq +C58ouFD5VPovt0CfLJ8E1MOcwrCjdm0GYw5pyi1i8yVqwjQa6F60DEhQoWtF7XPo +IRRsHcZXNQCzTwVm3Xa71VR3JQL7RM6QRoOiUdaQh2hs5HqwgdsT/gFqThp/bMFZ +fSM5RZ+TqLbdXO9FWK7XsnIz3dlJdBjw/RCRpO94gjTWL+Adb9bzcAFULv8dMjKF ++9eSE81uFyaEuuyRhkBlw7f2RsUbpDeywuoXbCNv0FJO8buWRcPTjSeHLbSfyajN +T0MKY5L/68joIKByjd6e1npM4OLdZ6mq+wL8HIeISCcpJv2yZxjDLN8tVn6mX9ZC +IDvpfiuZx37W72DPJViYIXkcroSK1m9w6wIIoyg8 +-----END CERTIFICATE----- diff --git a/tizen-app/certs/distributor.p12 b/tizen-app/certs/distributor.p12 new file mode 100644 index 0000000000000000000000000000000000000000..bfeb3932b5faf449f107db2c16fbfe84b4d4b4ca GIT binary patch literal 4441 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 AAC Stereo, MP4-Container + # frag_keyframe: Fragment bei jedem Keyframe + # empty_moov: Leerer moov-Atom am Anfang (noetig fuer pipe) + # default_base_moof: Bessere Browser-Kompatibilitaet (Samsung TV etc.) + # frag_duration: Kleine Fragmente fuer schnellen Playback-Start cmd = [ "ffmpeg", "-hide_banner", "-loglevel", "error", ] if seek_sec > 0: + # -ss VOR -i fuer schnelles Seeking (Input-Seeking) cmd += ["-ss", str(seek_sec)] cmd += [ "-i", file_path, "-c:v", "copy", "-c:a", "aac", "-ac", "2", "-b:a", "192k", - "-movflags", "frag_keyframe+empty_moov+faststart", + "-movflags", "frag_keyframe+empty_moov+default_base_moof", + "-frag_duration", "1000000", "-f", "mp4", "pipe:1", ]