2010-12-17 11 views
9

Zgodnie z tym What Techniques Are Best To Live Stream iPhone Video Camera Data To a Computer? można uzyskać skompresowane dane z kamery iphone, ale jak czytałem w odwołaniu AVFoundation otrzymasz tylko nieskompresowane dane.Jaki jest najlepszy sposób przesyłania strumieniowego na żywo przez kamerę iPhone na serwer multimediów?

więc pytania są:

1) Jak zdobyć skompresowanych ramek i audio z kamery iPhone?

2) Kodowanie nieskompresowanych ramek za pomocą API ffmpeg jest wystarczająco szybkie, aby przesyłać strumieniowo w czasie rzeczywistym?

Każda pomoc będzie naprawdę doceniana.

Dzięki.

+1

Jak to rozwiązałeś? – DivineDesert

+0

Skończyło się na uzyskiwaniu nieskompresowanych danych (ramek i audio) z AVFoundation i kodowania + przesyłania strumieniowego przy użyciu API FFmpeg. Działa całkiem nieźle w iPhone 4, osiągając nawet 30 klatek na sekundę z rozdzielczością 192x240. W wyższych rozdzielczościach spada zbyt wiele klatek. –

+0

@AlexandreOS Jak to zrobić, proszę, udostępnij, pomocne dla nas, Dzięki – Ron

Odpowiedz

8

Najprawdopodobniej już wiem ....

1) Jak zdobyć skompresowanych ramek i audio z kamery iPhone?

Nie możesz tego zrobić. Interfejs API AVFoundation zapobiegał temu pod każdym kątem. Próbowałem nawet nazwanych potoków i jakiegoś innego sprytnego unixowego foo. Bez takiego szczęścia. Nie masz wyboru, musisz napisać to do pliku. W swoim połączonym poście użytkownik sugeruje ustawienie wywołania zwrotnego w celu dostarczenia zakodowanych ramek. O ile mi wiadomo, nie jest to możliwe w przypadku strumieni H.264. Uczestnik przechwytywania dostarczy obrazy zakodowane w określonym formacie pikseli. To właśnie Movie Writers i AVAssetWriter kodują.

2) Kodowanie nieskompresowanych ramek za pomocą API ffmpeg jest wystarczająco szybkie, aby przesyłać strumieniowo w czasie rzeczywistym?

Tak jest. Będziesz jednak musiał użyć biblioteki libx264, która przeniesie Cię na terytorium GPL. To nie jest dokładnie zgodne ze sklepem z aplikacjami.

Proponuję użyć AVFoundation i AVAssetWriter ze względu na wydajność.

+3

Właściwie 1 jest częściowo błędne. Napisałem bibliotekę, która dostarcza dane H.264 w czasie rzeczywistym, ponieważ jest kodowana bez użycia prywatnego API. –

+1

Czy możesz udostępnić nam tę bibliotekę? Byłoby bardzo dobrze mieć alternatywny sposób na uzyskanie strumieni H.264 bez korzystania z biblioteki libx264. Właśnie dlatego skończyłem używać kodeków mpeg z FFmpeg. –

+0

@AlexandreOS Niestety moja biblioteka ma licencję komercyjną. Mogę w przyszłości wydać go na podstawie podwójnej licencji. –

4

Zgadzam się ze Stevem. Dodałbym, że próbując z API Apple'a, będziesz musiał zrobić kilka naprawdę paskudnych hakerów. AVAssetWriter domyślnie spędza sekundę zanim rozleje swój bufor do pliku. Nie znalazłem sposobu na zmianę tego ustawienia. Wydaje się, że sposobem na wymuszenie małych zapisów plików i plików blisko z wykorzystaniem wielu AVAsetWriters. Ale wtedy to wprowadza mnóstwo kosztów ogólnych. To nie jest piękne.

Zdecydowanie złożyć nowe żądanie funkcji za pomocą Apple (jeśli jesteś programistą iOS). Im więcej z nas to robi, tym bardziej prawdopodobne, że dodadzą jakiegoś pisarza, który może zapisywać do bufora i/lub do strumienia.

Dodatkiem do tego, co Steve powiedział w sprawie x264 GPL, jest to, że uważam, że można uzyskać komercyjną licencję na to, co jest lepsze niż na licencji GPL, ale oczywiście kosztuje to pieniądze. Ale to oznacza, że ​​nadal możesz z niego korzystać i uzyskać całkiem dobre wyniki, i nie musisz otwierać własnego źródła aplikacji. Nie tak dobry jak rozszerzony Apple API, który używa swoich sprzętowych kodeków, ale nie jest zły.

Powiązane problemy