Jakie techniki najlepiej przesyłać na żywo Dane z kamery wideo iPhone ' a do komputera?

Chciałbym streamować wideo z aparatu iPhone do aplikacji działającej na komputerze Mac. Pomyśl trochę jak czat wideo, ale tylko w jeden sposób, z urządzenia do aplikacji odbiornika (i nie jest to czat wideo).

Moje podstawowe zrozumienie do tej pory:

  1. możesz użyć AVFoundation, aby uzyskać "na żywo" dane z kamery wideo bez zapisywania do pliku, ale są to nieskompresowane Dane i dlatego musiałbym poradzić sobie z kompresją na własną rękę.
  2. nie ma wbudowanej obsługi AVCaptureOutput do wysyłania do sieci lokalizacja, musiałbym to rozwiązać sam.

Czy mam rację co do powyższego, czy już jestem off-track?

Apple Tech Q&A 1702 dostarcza informacji na temat zapisywania pojedynczych klatek jako obrazów - czy jest to najlepszy sposób na to? Tylko oszczędzanie 30fps a potem coś w stylu ffmpeg do kompresji?

Jest wiele dyskusji na temat transmisji na żywo do iPhone ' a, ale znacznie mniej informacji na temat osób, które wysyłają wideo na żywo. Liczę na jakąś babkę uderzeń, by skierować mnie we właściwym kierunku.

Author: Hunter, 2010-10-19

2 answers

Zależy to w dużej mierze od rozdzielczości docelowej i rodzaju szybkości wyświetlania klatek na sekundę.

Z abstrakcyjnego punktu widzenia, prawdopodobnie miałbym wątek przechwytywania, który wypełniałby bufor bezpośrednio z AVCaptureOutput, oraz wątek komunikacyjny, który wysyłałby i rezero bufor (wyściełany w razie potrzeby) do wcześniej określonego hosta co x milisekundy.

Po wykonaniu wstępnego transferu danych pracowałbym nad osiągnięciem 15fps przy najniższej rozdzielczości, i pracuję aż do przepełnienia bufora, zanim wątek komunikacyjny będzie mógł transmitować, co wymagałoby równoważenia rozdzielczości obrazu, rozmiaru bufora (prawdopodobnie zależnego od GSM, a wkrótce będzie to rozmiar ramki CDMA), i wreszcie maksymalnej szybkości, z jaką można transmitować ten bufor.

 19
Author: Greg Buehler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-10 03:24:54

Możesz użyć AVCaptureVideoDataOutput i sampleBufferDelegate do przechwytywania surowych skompresowanych ramek, a następnie wystarczy je streamować przez sieć. AVFoundation zapewnia API do kodowania ramek do lokalnych plików wideo, ale nie zapewnia żadnych do przesyłania strumieniowego do sieci. Najlepszym rozwiązaniem jest znalezienie biblioteki, która strumieniuje surowe klatki przez sieć. Zacznę od ffmpeg; wierzę, że libavformat obsługuje RTSP, spójrz na kod ffserver.

Zauważ, że powinieneś skonfigurować AVCaptureVideoDataOutput, aby dać ci skompresowane ramki, aby uniknąć konieczność kompresji surowych klatek wideo bez korzyści z kodowania sprzętowego.

 24
Author: Chris Miles,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-13 07:28:14