Webcam stream mit FFMpeg auf dem iPhone

Ich versuche zu senden und zu zeigen, eine webcam streamen von einem linux-server zu einer iPhone-app. Ich weiß nicht, ob es die beste Lösung, aber ich heruntergeladen und installiert FFMpeg auf linux-server (folgenden, für diejenigen, die wissen wollen, diese tutorial).
FFMpeg ist in Ordnung. Nach einer viel zu Wandern, konnte ich senden einen stream an den client starten

ffmpeg  -s 320x240 -f video4linux2 -i /dev/video0 -f mpegts -vcodec libx264 udp://192.168.1.34:1234

wo 192.168.1.34 ist die Adresse des client. Eigentlich ist der client ist ein Mac, aber es soll ja ein iPhone. Ich kenne den stream gesendet und empfangen werden, korrekt (getestet in verschiedenen Arten).

Jedoch ist es mir nicht gelungen zu beobachten, den stream direkt auf dem iPhone.
Ich dachte an verschiedene (mögliche) Lösungen:

  • erste Lösung: speichern Sie eingehende Daten in einem NSMutableData Objekt. Dann, wenn der stream endet, speichern und dann spielen Sie es mit einem MPMoviePlayerController. Hier ist der code:

    [video writeToFile:@"videoStream.m4v" atomically:YES];
    NSURL *url = [NSURL fileURLWithPath:@"videoStream.m4v"];
    
    MPMoviePlayerController *videoController = [[MPMoviePlayerController alloc] initWithContentURL:url];
    
    [videoController.view setFrame:CGRectMake(100, 100, 150, 150)];
    
    [self.view addSubview:videoController.view];
    
    [videoController play];

    das problem dieser Lösung ist, dass nichts gespielt wird (ich sehe nur ein Schwarzes Quadrat), auch wenn das video korrekt gespeichert (ich kann Sie spielen direkt von meiner Festplatte mit VLC). Außerdem, es ist nicht so eine tolle Idee. Es ist einfach, um die Dinge funktionieren.

  • Zweite Lösung: verwenden Sie CMSampleBufferRef zum speichern der eingehenden video. Sehr viel mehr Probleme, kommt mit dieser Lösung: Erstens, es gibt keine CoreMedia.framework in meinem system. Außerdem habe ich nicht bekommen, naja was heisst diese Klasse repräsentiert und, was soll ich tun, damit es funktioniert: ich meine, wenn ich starten (irgendwie) die Besetzung dieser "SampleBuffer" mit den bytes, die ich empfangen von UDP-Verbindung, dann wird Sie automatisch rufen Sie die CMSampleBufferMakeDataReadyCallback - Funktion, die ich bei der Schöpfung? Wenn ja, Wann? Wenn das Einzelbild abgeschlossen ist oder wenn der ganze Datenstrom empfangen wird?

  • Dritte Lösung: verwenden Sie AVFoundation framework (weder diese, auch tatsächlich auf meinem Mac). Ich Verstand nicht, wenn es eigentlich möglich die Aufnahme zu starten, von einer entfernten Quelle oder sogar von einer NSMutableData eine char* oder so ähnlich. Auf AVFoundation Programming Guide ich finde nicht, dass jeder Verweis sagen, ob es möglich ist oder nicht.


Ich weiß nicht, was man von dieser Lösung ist die beste für meine Zwecke. JEDER Vorschlag wäre, zu schätzen wissen.

Außerdem, es gibt auch ein anderes problem: ich habe keine segmenter-Programm um das video zu senden. Nun, wenn ich mich nicht immer falsch, segmenter zu teilen braucht die Quelle video in kleinere/kürzere Videos einfacher zu senden. Wenn es Recht ist, dann ist es vielleicht nicht unbedingt notwendig ist, um die Dinge funktionieren (kann später Hinzugefügt werden). Da jedoch der server läuft unter linux, ich kann nicht mit der Apple mediastreamsegmeter. Kann jemand empfehlen, eine opensource-segmenter zu verwenden in Verbindung mit FFMpeg?


UPDATE: ich bearbeitet meine Frage das hinzufügen von mehr Informationen über, was habe ich da jetzt und was meine Zweifel.

InformationsquelleAutor Manlio | 2011-06-07
Schreibe einen Kommentar