Jestem zainteresowany tworzeniem aplikacji na iPhone'a, która umożliwia strumieniowe przesyłanie wideo z centralnego serwera w stylu YouTube. Zastanawiam się, czy ktoś kiedykolwiek próbował to zrobić wcześniej, jaka jest ścieżka najmniej odpornych, istniejących interfejsów API itp.? Naprawdę nie wiem nic o tym, jak to się robi. Czy pracowałbym z gniazdkami? Po prostu szukam tu jakiegoś kierunku. Dzięki!Pisanie aplikacji do strumieniowego przesyłania wideo do iPhone'a
Odpowiedz
Jeśli masz serwer streamingowy gotowy i gotowy, całkiem łatwo jest zaimplementować kontroler wideo, który wyskoczy w stylu youtube.
NSString *videoURLString = @"http://path-to-iphone-compliant-video-stream";
NSURL *videoURL = [NSURL URLWithString:videoURLString];
MPMoviePlayerController moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:videoURL];
[moviePlayer prepareToPlay];
[moviePlayer play];
[self.view addSubview:moviePlayer.view];
trzeba obsłużyć kontroler że widok wyświetlacza odtwarzacza wideo (która jest self
w tym przypadku).
iOS 3.2 lub nowszym W MPMoviePlayerViewController jeszcze łatwiejsze:
NSString *videoURLString = @"http://path-to-iphone-compliant-video-stream";
NSURL *videoURL = [NSURL URLWithString:videoURLString];
MPMoviePlayerViewController *moviePlayerView = [[[MPMoviePlayerViewController alloc] initWithContentURL:videoURL] autorelease];
[self presentMoviePlayerViewControllerAnimated:moviePlayerView];
presentMoviePlayerViewControllerAnimated
jest dodatkowa metoda A MEDIAPLAYER do FWViewController
które znajdziesz w iOS 3.2 lub nowszym i dba o stworzenie kontrolera widoku i przesuwając ją na stos, animując go animacją zsuwania się z dołu, jak w youtube.app.
Filmy wideo QuickTime są już przesyłane strumieniowo do telefonu. Ścieżką najmniejszego oporu byłoby użycie kontrolera odtwarzacza multimediów i skierowanie go do pliku multimediów strumieniowych na serwerze transmisji strumieniowej.
Apple ma szczegółowy artykuł na temat konfiguracji po stronie serwera do strumieniowania multimediów:
i Best Practices UWAGA:
https://developer.apple.com/library/content/technotes/tn2224/_index.html
Nie tylko zawiera on informacje o architekturze usługi transmisji strumieniowej i narzędzia użyte do jego zbudowania, ale ma również pewne wymagania co do tego rodzaju usługi, które muszą zostać spełnione, oraz odnośniki do strumieni testowych na żywo.
Ten kod służy do korzystania z małej ilości pamięci. Na streaming video ....
-(IBAction)playMovie:(NSURL *) theURL
{
NSURL *fileURL = theURL;
MPMoviePlayerController *moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:fileURL];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(moviePlaybackComplete:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:moviePlayerController];
[self.view addSubview:moviePlayerController.view];
moviePlayerController.useApplicationAudioSession = NO;
moviePlayerController.fullscreen = YES;
[moviePlayerController play];
}
- (void)moviePlaybackComplete:(NSNotification *)notification
{
MPMoviePlayerController *moviePlayerController = [notification object];
[[NSNotificationCenter defaultCenter] removeObserver:self
name:MPMoviePlayerPlaybackDidFinishNotification
object:moviePlayerController];
[moviePlayerController.view removeFromSuperview];
[moviePlayerController release];
}
Chociaż dotychczasowe odpowiedzi są dobre, jeśli trzeba użyć strumieni innych niż HTTP, RTMP (MMS lub na przykład) lub spoza firmy Apple obsługiwanych kodeków audio/wideo, robi się nieco bardziej skomplikowane.
Sam nie jestem ekspertem, ale używam tego VideoStreaming SDK, aby rozwiązać te problemy, co znacznie ułatwia personalizację klienta (streaming w tle, wstrzymywanie strumieni itp.). Może być wart obejrzenia, jeśli masz te wymagania.
2018 odpowiedź Można użyć AVPlayerViewController
od MPMoviePlayerController
jest przestarzała od iOS 9
NSURL *url = [NSURL URLWithString:videoUrl];
_playerViewController = [[AVPlayerViewController alloc] init];
_playerViewController.player = [AVPlayer playerWithURL:url];
_playerViewController.player.volume = 1;
_playerViewController.showsPlaybackControls = YES;
_playerViewController.view.frame = CGRectMake(....);
[self.view addSubview:_playerViewController.view];
To nie działa na mnie w dowolny sposób. – Deepukjayan
czy ten kod jest używany do przesyłania strumieniowego? – Dilip