2013-12-20 12 views
5

Ich brauche einen synthetischen generierten Videostream in einem Programm wie Skype. Der Audioteil ist einfach. Es gibt ein Projekt namens Soundflower, das ein Adapter ist. Es zeigt auf der einen Seite ein virtuelles Audiozielgerät und auf der anderen Seite eine Videoquelle. Ich suche nach der gleichen Lösung für OSX. Außer ich brauche nur das Teil wie man es als virtuelle Kamera darstellt. Nicht missverstanden, ich brauche kein "gebrauchsfertiges" Werkzeug, ich brauche den Weg, wie ich es entwickeln kann. Ein gebrauchsfertiges Tool ist also nur beim Quellcode hilfreich.Erstellen einer virtuellen Kamera für OS X

In der Windows-Welt, wo ich herkam, programmierte ich bereits eine solche virtuelle Kamera mit DirectShow. Jetzt suche ich nach einer ähnlichen Lösung in der OSX-Welt.

+0

Konnten Sie das virtuelle Video-Zielgerät erstellen? Ich würde gerne wissen, wie Sie das erreicht haben. thx – user1988824

+0

Nein, das Projekt wurde fallen gelassen und ich habe aufgehört, nach einer Lösung zu suchen. –

Antwort

7

Dies hängt in gewissem Maße von der Anwendung ab, mit der Sie eine Schnittstelle erstellen möchten. Wenn es sich um eine Oldschool-QuickTime-App (32-Bit, 10.8 oder früher) handelt, müssten Sie eine QuickTime-Komponente vdig (Videodigitalisierer) schreiben. Dies ist im Grunde ein Plugin, das eine bestimmte Schnittstelle bereitstellt, die von jeder QT-kompatiblen App dynamisch aufgelistet und aufgerufen werden kann. Dies ist jedoch jetzt alles veraltet (ab 10.9)!

Der moderne Ansatz besteht darin, das Core Media I/O Framework zu verwenden. Leider ist es nicht so gründlich dokumentiert wie die meisten anderen Frameworks, da es nur von einem Bruchteil der Entwicklerbasis verwendet wird (die Hardwareschnittstellen erstellen müssen).

Es gibt ein SDK-Projekt zur Verfügung, die den Coremedia Framework sowie einige Beispielcode enthält:

Werfen Sie einen Blick speziell auf .

Sie werden wahrscheinlich keine kext (Kernel-Erweiterung) benötigen, da Sie keine Schnittstelle zu echter Hardware haben. Sie werden also hoffentlich nur mit der Implementierung der erforderlichen CMIO Schnittstellen und der Registrierung Ihres Gerätetyps zurecht kommen.

Es gibt ein großes Buch zur Verfügung, die für OS X und iOS Treiberentwicklung umfasst:

(Haftungsausschluss:. Die Autoren sind Hochschulen und Freunde von mir)

Quicktime war früher das DirectShow-Äquivalent. Jetzt haben CoreMedia und Freunde es mit einer viel moderneren und flexibleren API abgelöst.

+0

Vielen Dank für Ihre Antwort. Ich glaube nicht, dass jemand deine Antwort übertreffen kann, aber ich werde das eine Chance geben, wie ich auf eine Antwort hoffte, wie: "Sicher, es gibt ein Projekt XY, das genau das tut, was du willst und die Quelle ist BSD." :-) Du zeigst mir das steinerne dunkle Tal :-) Wie QuickTime ist DirectShow jetzt nach jahrelanger Folter von Entwicklern überholt (ich weiß nicht, ob QuickTime ein ähnliches Durcheinander war). Ich habe bereits begonnen, deinen Vorschlag herunterzuladen. Ich schätze, in ungefähr einer Stunde werden Sie Ihr grünes Häkchen bekommen. –

+0

Sicher. :) Deine Anfrage ist ein Nischenthema, also wäre ich etwas überrascht, wenn es ein fertiges Projekt gäbe, das genau das tut. Ich habe solche Proben für QT gesehen, aber nicht für CMIO. Aber dieses SDK hat ein vollständiges Beispiel, also sollten Sie in der Lage sein, das meiste von dem zu extrahieren, was Sie davon brauchen.Nachdem ich mit DirectShow und QuickTime gearbeitet habe, habe ich viele Narben von DS! QuickTime ist altmodisch, aber DS ist ein Albtraum. – gavinb

+1

ab Oktober 2015, das erwähnte CoreMediaIO SDK-Projekt kompiliert nicht auf Yosemite oder El Capitan. Ich habe versucht, das Problem zu lösen, indem ich den alten Quellcode im Ordner "source" löschte und die entsprechenden Frameworks hinzufügte, da sie anscheinend in Frameworks gebündelt wurden (hinzugefügt: accelerate, evenkit, audiotooolbox, coreaudio, coreaudio kit, carbon, audiounit). Dann stieß ich auf Kern-C++ - Fehler, die ich innerhalb von ein paar Stunden nicht loswerden konnte und beschloss, loszulassen, und ich hoffe, dass ein Apple-Mitarbeiter den Beispiel-Quellcode reparieren würde und wir alle glücklich sein würden, nie wieder ... – user1988824