AVPLAYER VIDEO BUFFER FULL??? (Как сбросить / очистить буфер)
Так что я использую AVPlayerViewController и то, что я делаю, чтобы загрузить видео, в основном это:
У меня есть большое количество видео в моей базе данных, я звоню в базу данных, чтобы получить следующее видео после того, как текущее видео закончило воспроизводиться, проблема, я думаю, может быть связана с заполнением буфера? Посмотрев по стеку и по интернету, я не смог найти ответ, который мне помог.
Я пытаюсь выяснить, как я могу сбросить буфер после каждого воспроизведения видео, или, по крайней мере, узнать, когда в буфере недостаточно места, чтобы я мог отобразить изображение или что-то в то время, когда буфер загружается, чтобы я мог сделать вызов продолжить показ видео. Ниже мой код для AVPlayerViewController.
AVPlayerViewController *playerViewController = [[AVPlayerViewController
alloc] init];
playerViewController.player = [AVPlayer @"www.videoURL.com"];
self.avPlayerViewcontroller = playerViewController;
[playerViewController.view setFrame: userView.bounds];
[userView addSubview:playerViewController.view];
self.avPlayerViewcontroller.player.volume = 0.0;
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(volumeChanged:)
name:@"AVSystemController_SystemVolumeDidChangeNotification"
object:nil];
[playerViewController.player play];
[userImageView setHidden:NO];
Изменить:1) Я собираюсь воспроизвести около 15-25 видео, прежде чем видео дает мне это:
Изменить:2) Но если я закрою приложение, а затем снова открою его, видео воспроизводятся в приложении, как ничего плохого. Я не совсем уверен, что происходит.
1 ответ
Для любого, кто сталкивается с тем же сценарием, проблема для меня заключалась в том же блоке, в котором я делал вызов API, я инициализировал это:
AVPlayerViewController *playerViewController =
[[AVPlayerViewController alloc] init];
AVPlayerViewController был (STRONG) ссылкой, вызывая цикл сохранения в блоке, поэтому каждый раз, когда я делал вызов API для захвата нового видео, я запускал совершенно новый AVPlayerViewController, не освобождая предыдущий. Наряду с этим, я обнаружил, что у меня были и другие объекты в ответе об успешном API, и на него также ссылались как на сильный. Так что я вернулся, сделал это слабой ссылкой, а затем я переехал
AVPlayerViewController *playerViewController =
[[AVPlayerViewController alloc] init];
Чтобы представление действительно загружало метод, он инициализируется ОДИН РАЗ, а не каждый раз, когда появляется новый URL-адрес видео.
Мне потребовался целый день, чтобы выяснить, что происходит, потому что после того, как я посмотрел на других пользователей, у которых были проблемы с этим, я был так сосредоточен на "буферизации", или нехватка буферизации была виновником, но приходит к выводу, что это было просто плохо реализация объектов и смещений.
Удачи будущим программистам.