Vraag Versleutelde video afspelen


Wat ik wil doen is de volgende: We moeten de video-inhoud beschermen (versleutelen) en kunnen afspelen.

Lastig onderdeel is dat we niet alles in één keer in het geheugen willen laden en daar decoderen. (Hoewel dat ook een optie is)

Waar we eigenlijk naar op zoek zijn, is de oplossing voor ons om gecodeerde video-inhoud te spelen, van HDD, zodat alleen onze APPLICATIOn die video kan afspelen.

Toch zou het bestand blok voor blok moeten worden gelezen (want als het om een ​​bestand van 2 GB gaat, zou het niet in één keer in het geheugen moeten worden geladen).

Laat het ons weten, wat zijn mogelijke manieren?

  • SilverLight4 DRM - Oké, dit ziet eruit als een redelijke oplossing, flexibel genoeg voor onze behoeften. De PlayReady SDK kost echter ongeveer $ 30.000 en we willen SilverLight niet gebruiken. Vermoedelijk C # of C ++

  • Eén van de ideeën die we hadden, is om een ​​groot videobestand te splitsen in gecodeerde videobestanden (zoals reeks) en vervolgens elk bestand ("blok") te laden om het direct te herdrukken / decoderen en het uit het geheugen te spelen (en om te wisselen tussen reeksbestanden), dit lijkt de gemakkelijkste en tot nu toe waarschijnlijk de enige die echt kan worden gedaan. Welke libs kunnen echter videobestanden van memoryStream afspelen? Ik geloof echt dat VLC dit MOET kunnen doen ..?

  • Een ander idee was om gewoon niet-gecomprimeerde AVI te nemen, video frame per frame te verwerken, elk frame aan te passen (het op de een of andere manier te versleutelen), nu verwerken we de video opnieuw, verwerken we het frame in het geheugen en ontsleutelen het.

  • Omgaan met slechts één specifieke codec en het schrijven van een aangepaste oplossing daarvoor - eigenlijk klinkt dit best cool maar ben ik bang dat het ons veel te veel tijd zal kosten, maar laat het ons weten over deze aanpak

  • De andere, gebruikmakend van VLC om gecodeerde stream van localhost af te spelen (bijv. APPLICATION streamt versleuteld HDD-bestand naar de localhost: 800 / BLAHBLAH) en dezelfde applicatie heeft VLC-besturing daar om de gecodeerde stream te decoderen. We weten nog steeds niet of het bestand op de harde schijf ook kan worden versleuteld (zodat de gebruiker dat bestand niet op een andere speler kan afspelen), en VLC is GPL, wat niet goed voor ons is.


12
2017-09-06 08:06


oorsprong


antwoorden:


De afspeelpijplijn is meestal een set componenten die op elkaar zijn aangesloten. In DirectShow, een van de API's en de meest populaire, men gebruikt lezer, splitter, codecs, nabewerking en presentatiedelen die bekend staan ​​als filters en het hele ding speelt terug. Het is mogelijk om de lezer te vervangen door uw eigen vervanging die versleutelde inhoud leest en on-the-fly decodeert. Het kan eenvoudig op aanvraag worden gedecodeerd, het is niet nodig om het hele blok van 2 GB te decoderen om bijvoorbeeld een eerste frame of een miniatuur te krijgen.

Als u alleen het lezeronderdeel hebt aangesloten, kunt u de versleutelingsmethode kiezen, tussen aangepast algoritme, een van de bekende, API of externe bibliotheek.

Toch denk ik dat dit en andere (in ieder geval de meeste andere) manieren je niet kogelvrij garanderen dat gecodeerde inhoud niet kan worden teruggedraaid. Iemand anders kan nog steeds in de pijplijn haken en de gedecodeerde inhoud van daaruit pakken. Als je blij bent dat dit op zijn minst ingewikkeldheid en ervaring vereist om te implementeren, dan gaat zo'n codering best goed.


6
2018-02-07 10:49



Vrijwel elk wijdverspreid versleutelingsalgoritme werkt op blokken van groottes tussen 128 en 256 bits - en zal gelukkig slechts een paar van deze tegelijk ontcijferen, prima voor streaming. Bekijk bijvoorbeeld crypto ++ voor een softwarebibliotheek met streaminginterfaces. (Dat wil zeggen, je opent gewoon een bestand, plaatst een ontcijferfilter daar omheen en gaat dan gewoon verder zoals bij elk ander bestand.)


7
2017-09-06 08:11



Ok, dit is hoe ik het deed. (Android)

Versleutelde video wordt in sd-kaart geplaatst. RC4 gecodeerd - zodat het tijdens het streamen tijdens het streamen kan worden geconverteerd. Vervolgens heb ik een lokale bestandsserver gemaakt die op het apparaat wordt uitgevoerd (als een service). De uitvoerstroom doet iets extra's voor het verzenden van gegevens - het filtert het door een RC4 decrypter voordat het naar de buffer wordt geschreven. Richt de mediaspeler vervolgens gewoon naar de url van de video (http: // localhost: port / abc.3gp "). Als gevolg hiervan blijft video vanaf de sdcard veilig - je kunt het niet afspelen tenzij je de sleutel hebt - wat je voor elke video zou moeten verschillen voor extra beveiliging.


7
2018-02-13 11:00



Bedankt allemaal voor de ansers. Ik ben een man die veel verschillende benaderingen heeft doorgemaakt.

Ik schreef mijn eigen Videoplayer met openGL + FFMPEG die mp4 kon afspelen en elk frame in de GPU kon ontsleutelen met behulp van shaders. Ik heb ook geëxperimenteerd met andere mogelijke oplossingen, zoals het streamen van een webserver met behulp van VLC. (VLC biedt een soort codering / decodering bij het verwerken van streams) en yada yada yada.

Eén oplossing was ook om 4 media-elementen (WPF) te gebruiken en de daadwerkelijke video werd virtueel verdeeld in 4 gebieden en elk gebied werd geroteerd, zodat de video niet zichtbaar was. Nadat je de video in 4 media-elementen hebt geladen, kun je aangeven welk deel je wilt laten zien en ook terugdraaien. Maar eerlijk gezegd is MediaElement slecht.

Maar ik kwam precies overeen met wat RomanR zei. Ik heb DirectShow-grafiek gebouwd met mp4splitter, ffdshow, videorenderer en ik heb mp4splitter sourcefilter aangepast. Het lezen gebeurt in BaseSplitter / AsyncReader.cpp (wijzig gewoon de SyncRead-functie) die mp4splitter gebruikt.

Als u het zelf wilt implementeren, gebruikt u gewoon het MPC-HC-project en past u de filters aan zoals u dat wilt. Het kostte me wat tijd om het DirectShow-concept te omzeilen, maar als je het eenmaal begrijpt, wordt het een geweldig wapen.

http://sourceforge.net/apps/trac/mpc-hc/


4
2018-06-02 06:03