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 einemMPMoviePlayerController
. 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 keineCoreMedia.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 dieCMSampleBufferMakeDataReadyCallback
- 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 einerNSMutableData
einechar*
oder so ähnlich. AufAVFoundation 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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
MPMoviePlayerController verarbeiten kann, video-streaming, versuchen Sie, nur reicht es die URL direkt.
Als für das video nicht spielen, selbst wenn es gespeichert wird, sind Sie sicher, dass das video-format unterstützt wird? Sprach die Dokumentation:
Versuchen Sie es mit
-vcodec libx264 -vpre baseline
auf Ihrem ffmpeg Befehlszeile verwenden Sie das baseline-Profil.-f video4linux2
Flagge, obwohl die Einstellung-f m4v
(solange-f mp4
,-f 3gp
ecc) bringt mich zu einer "moov atom nicht gefunden" - Fehler.Anstatt den stream als UDP, versuchen Sie das senden der RTSP stream mit .. MPMoviePlayerController es spielen werde.
Carson McDonald ' umgesetzt hat, die eine ausgezeichnete Lösung für das HTTP-Live-Streaming, das er benutzt, von Linux bis iOS. Er ist ein user hier und seine Seite ist Ionen-Kanone.
Sehen diese Frage für mehr details.
http://wiki.videolan.org/Documentation:Streaming_HowTo/Streaming_for_the_iPhone