Ich habe eine Windows-Anwendung entwickelt, die Video von einem externen Gerät mit DirectShow aufnimmt. Die Bildauflösung beträgt 640x480 und die Videos ohne Komprimierung haben sehr große Größen (ca. 27MB pro Sekunde).Echtzeit-Videokodierung in DirectShow
Mein Ziel ist es, diese Größe so weit wie möglich zu reduzieren, also suche ich nach einem Encoder, mit dem ich das Video in Echtzeit komprimieren kann. Es könnte H.264, MPEG-2 oder irgendetwas anderes sein. Es muss mir erlauben, das Video auf Festplatte zu speichern, und es wäre am besten, wenn ich es auch in Echtzeit über das Netzwerk streamen könnte (Wi-Fi, also sollte die Größe etwa 1 MB pro Sekunde oder weniger betragen). Der erhebliche Qualitätsverlust wäre inakzeptabel.
Ich habe herausgefunden, dass es sehr schwierig ist, einen geeigneten DirectShow-Filter für diese Aufgabe zu bekommen. Es kann davon ausgegangen werden, dass der Client-Rechner einigermaßen modern ist (schnelle 2-Kern-CPU) und CUDA/OpenCL nutzen kann. Es gibt ein paar Apps, die es erlauben, Video mit CUDA zu kodieren und eine gute Leistung zu bieten, aber ich habe keinen passenden DirectShow-Filter oder eine API gefunden, mit der man einen entwickeln könnte. Die NVIDIA nvcuvenc.dll scheint private API zu haben, so dass ich sie nicht direkt verwenden kann. Alle CPU-basierten Encoder, die ich gefunden habe, sind zu langsam für meine Anforderungen, aber vielleicht habe ich etwas verpasst.
Kann mir jemand eine Lösung empfehlen, d. H. Einen Encoder (kostenpflichtig oder kostenlos, der in einer Closed-Source-App verwendet werden kann), der eine gute Leistung erzielen kann, unabhängig davon, ob er CPU/CUDA/OpenCL oder DirectCompute verwendet? Oder sollte ich vielleicht einen externen Hardware-Video-Encoder verwenden?
Mit freundlichen Grüßen,
MadBadger
Ich weiß nicht, ob Sie eine Lösung dafür gefunden haben, aber in der Zwischenzeit habe ich die Transport Stream-Kodierung für mein Produkt entwickelt - vielleicht wäre eine solche Lösung auch akzeptabel Sie, seit Sie über das Streaming über das WiFi sprechen –