Cine imi poate explica in cuvinte puține diferența dintre limbajele C


(Stanciu Bogdan Mircea) #1

În primul rând context: vreau să dezvolt un media player ce poate rula pe mai multe platforme (în special Linux, pornind de la dispozitive Rasberry). De acest player doresc să pot lega evenimente (scrie in db când este redat un video, lansează ceva out prin GPIO) și a cărui interfață o pot costumiza (UI minimal dar cu overlay de scrolling text, imagini sau Picture in Picture etc).

Sunt familiarizat cu Python și Javascript. Am reușit să costumizez playerul Kodi să facă ce vreau eu printr-un script Python, dar e greoi și parcă aș face ceva de la 0 de dragul de a învăța.

Problema cu video este că pe dispozitive cu resurse limitate se poate atinge ușor limita de procesare și asta poate duce la o redare greoaie a clipului. Kodi cel puțin avea built-in accelerare grafică și alte magii de genul.

Am încercat deja să folosesc API-ul Vlc sau module video pentru Python dar nu am obținut experiența dorită.

Sunt curios dacă folosind un alt limbaj de programare pot obține ceva bonusuri pe partea de performanță. Și aici este rugămintea mea: îmi poate spune cineva care este diferența dintre C, C# și C++ și dăcă vre unul din aceste limbaje mă poate ajuta în dezvoltarea produsului dorit?


(cosmos) #2

C este liguna franca a limbajelor de programare. A influentat multe alte limbaje cum ar fi c++, java, c#. php, js. C a aparut la inceputul anilor '70
C++ este un limbaj care a adus conceptele de oop. Clase, mosteniri etc.
Managementul memoriei este la latitudinea programatorului. Nu au un GC integrat, deci atentie :slight_smile:

Ambele limbaje compileaza in cod masina, deci performanta este maxima.

Java si C# sunt limbaje complet obiect orientate. Au garbage colector si executia efectiva a codului este asugurata de o masina virtuala, jvm in cazul java si cli in cazul C#.

Pt partea de performanta, C++ ar fi o alegere buna. Raspbian este pana la urma un Linux. Actualmente C# are suport pe Linux prin .net core, dar nu stiu car de bine este optimizata pt dispozitive integrate

Poti folosi ffmpeg pt randarea videoclipurilor. Are multe optiuni si stie o gramada de formate


(Adavidoaiei Dumitru-Cornel) #3

C, C++ se compileaza in cod binar nativ binar care ruleaza direct pe procesor, sunt cele mai puternice ca si performanta, C# si Java genereaza cod intermediar care ruleaza peste o masina virtuala care ruleaza peste procesor, aceasta de obicei e un stack machine, ffmpeg e scris in C, C++, dar exista wrapere C#, Java ca sa il accesezi din alte limbaje de programare, oricum ffmpeg mi s-a parut greu de folosit fiindca se intampla sa nu proceseze video-ul fara sa nu intoarca nici o eroare si are tot felul de trickuri.

Am vazut un articol recent cum sa faci videostreaming in .NET Core cu WebAPI.


(George Calianu) #4

Eu am lucrat pe Raspberry in Go. Merge un IDE ca sa poti lucra/depana direct pe el (important!), ai librarii de GPIO, daca vrei web nu ai nevoie de un server (Apache,Nginx,etc…) si poti folosi MySql/Sqlite…adica ai un ecosistem care merge bine in resurse mici. Daca o iei de la zero si te incanta idea e o varianta… :sunglasses:


(István F.) #5

Ce problema de performante ai cu Raspberry Pi ? E un procesor destul de limitat si la 720p iti face probleme daca se incalzeste putin mai tare sau daca nu ii dai destul curent.

https://www.raspberrypi.org/documentation/raspbian/applications/omxplayer.md e singurul player cu decoding h/w din start, in rest si VLC trebuie compilat special sa ai decoding H/W.

Mai multe detalii pentru kiosk browsing si redare de video :
https://www.raspberrypi.org/forums/viewtopic.php?f=66&t=40860
si

Problema ta nu e limbajul in care e scris, problema e ca tu nu prea poti afisa nimic altceva decat video ca sa iti mearga decoding-ul hardware fara lag. Poti controla omxplayer cu JS/Electron linistit, dar video-ul trebuie redat prin omxplayer pe X.Org direct si daca imi amintesc bine doar pe full screen va fi redat ok.


(Adavidoaiei Dumitru-Cornel) #6

Este facut in C# o sa ma uit pe el.


(Stanciu Bogdan Mircea) #7

Folosesc Raspberry pentru că am unul la îndemâna și e o soluție facilă pentru testare. Dacă voi avea nevoie pot trece pe alte mașini ce pot rula aproape de 4k. Pi-ul nu este neapărat o problemă aici.

p.s. omxplayer este, printre altele, în opțiunile de redare ale Kodi. Cu un mic overclock, un ventilator și Kodi versiunea 15 nu am avut probleme (alte versiuni mai noi nu erau stabile pe Raspberry).


(Sandu Liviu Catalin) #8

Nimeni nu poate sa iti explice diferenta dintre C, C++ si C#. Orice raspuns dat aici il poti gasii si pe google. Nimeni nu stie care este nivelul tau actual sau ce esti tu capabil sa intelegi. Asa ca primesti respuns pe masura cerintei.

Cu siguranta nu vrei sa folosesti C. In special daca ai doar experienta in limbaje care fac totul pentru tine. Si cu toate ca C# pare o alegere buna. Nu cred ca vrei sa te ocupi de zeci de wrappere la API-uri externe cand nu gasesti ce ai nevoie. O solutie viabila dar asigura-te ca intelegi cu ce te incurci. Si la final, varianta evidenta ramane C++. Este aproape interschimbabil cu C dar permite implementarea unui cod care se intretine singur precum C#. Undeva la mijloc. Apropo, am spus ca permite. Nu neaparat ca face asta pentru tine.

Cu toate astea. Recomand sa arunci un ochi si peste mpv. Este similar cu VLC doar ca fara prea multa interfata. Un player simplu doar cu o fereastra si pe care il poti introduce in aplicatia ta deoarece expune un API ca si VLC. Exemple de aplicatii care folosesc acest player daca vrei sa studiezi ceva.

(off) Eu il folosesc de cativa ani ca player principal si m-am obisnuit cu el. E doar un singur executabil portabil. Mai simplu de atat nu se poate.