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-адрес видео.

Мне потребовался целый день, чтобы выяснить, что происходит, потому что после того, как я посмотрел на других пользователей, у которых были проблемы с этим, я был так сосредоточен на "буферизации", или нехватка буферизации была виновником, но приходит к выводу, что это было просто плохо реализация объектов и смещений.

Удачи будущим программистам.

Другие вопросы по тегам