как я могу воспроизводить потоковое видео в фоновом режиме на iOS [duplicate]

Я считаю, что этот небольшой фрагмент делает работу довольно хорошо.

public static IEnumerable<List<T>> Chunked<T>(this List<T> source, int chunkSize)
{
    var offset = 0;

    while (offset < source.Count)
    {
        yield return source.GetRange(offset, Math.Min(source.Count - offset, chunkSize));
        offset += chunkSize;
    }
}
8
задан S S 15 March 2013 в 08:17
поделиться

4 ответа

0
ответ дан Community 21 August 2018 в 03:18
поделиться

Попробуйте этот код в вашем applicationDidEnterBackground:

UIApplication *app = [UIApplication sharedApplication]; 
bgTask = 0;

backgroundTimer = [NSTimer scheduledTimerWithTimeInterval:60 target:self selector:@selector(backgroundTask) userInfo:nil repeats:YES];

bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ 
[app endBackgroundTask:bgTask];

Я нашел его где-то в стеке для меня

Также ознакомьтесь с этим руководством, которое охватывает фоновые режимы, включая фон аудио .. http://www.raywenderlich.com/29948/backgrounding-for-ios

0
ответ дан David 21 August 2018 в 03:18
поделиться

С удивлением я могу сказать, что это может быть достигнуто, и я просто это сделал.

Этот метод поддерживает все возможности:

  • Экран заблокирован пользователем; / g0]
  • нажата кнопка Home,
  • Переключиться на другое приложение.

Пока у вас есть экземпляр AVPlayer, работающий под управлением iOS, предотвращает автоматическую блокировку устройство.

Сначала вам нужно настроить приложение для поддержки звукового фона из файла Info.plist, добавляя в массив UIBackgroundModes элемент audio.

Затем введите ваш appDelegate.m в - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions:

эти методы

[[AVAudioSession sharedInstance] setDelegate: self];    
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];

и #import <AVFoundation/AVFoundation.h>

Затем в вашем представлении контроллер, который управляет AVPlayer

-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
    [self becomeFirstResponder];
}

и

- (void)viewWillDisappear:(BOOL)animated
{
    [mPlayer pause];    
    [super viewWillDisappear:animated];
    [[UIApplication sharedApplication] endReceivingRemoteControlEvents];
    [self resignFirstResponder];
}

, затем ответьте на

- (void)remoteControlReceivedWithEvent:(UIEvent *)event {
    switch (event.subtype) {
        case UIEventSubtypeRemoteControlTogglePlayPause:
            if([mPlayer rate] == 0){
                [mPlayer play];
            } else {
                [mPlayer pause];
            }
            break;
        case UIEventSubtypeRemoteControlPlay:
            [mPlayer play];
            break;
        case UIEventSubtypeRemoteControlPause:
            [mPlayer pause];
            break;
        default:
            break;
    }
}

. Другой прием необходим для возобновления воспроизведения, если пользователь нажимает кнопку «домой» (в в этом случае воспроизведение приостанавливается с исчезновением).

Когда вы управляете воспроизведением видео (у меня есть методы play: и pause:), установите

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:nil];

и

[[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidEnterBackgroundNotification object:nil];
[g 16] и соответствующий метод, который будет запускать таймер и возобновить воспроизведение.

- (void)applicationDidEnterBackground:(NSNotification *)notification
{
    [mPlayer performSelector:@selector(play) withObject:nil afterDelay:0.01];
}
15
ответ дан MacTeo 21 August 2018 в 03:18
поделиться
  • 1
    хорошо спасибо, позвольте мне проверить это, и я дам вам знать, если это работает или нет – S S 21 March 2013 в 08:06
  • 2
    на самом деле приложение YouTube может воспроизводить видео (через воздушный режим) в фоновом режиме. это потрясающе – chings228 6 May 2013 в 10:30
  • 3
    Спасибо за код! У меня есть все настройки в моем проекте, и он работает с кнопкой «Домой» и переключается на другое приложение, но lockscreen останавливает видео. Тем не менее, я обнаружил, что, когда я комментирую раздел AVPlayerLayer, он играет на заблокированном экране. Я, очевидно, нуждаюсь в PlayerLayer, чтобы увидеть видео. Любая идея, как получить AVPlayerLayer, чтобы просто пойти с потоком, который AVPlayer кажется прекрасным, и не прекращать играть при блокировке телефона? – Nerrolken 13 August 2013 в 19:53
  • 4
    @AlexanderWinn это немного поздно, но AVPlayerLayer НЕ должен идти с потоком lol. Посмотрите на документацию на Apple здесь: developer.apple.com/library/ios/qa/qa1668/_index.html в частности, «Если текущий элемент AVPlayer отображает видео на дисплее устройства, воспроизведение AVPlayer автоматически приостанавливается, когда приложение отправляется на задний план. Существует два способа предотвратить эту паузу: [...] & quot; – user2734823 10 August 2014 в 02:09
  • 5
    Это была большая помощь! Обратите внимание, что в iOS 8 вам не нужно будет устанавливать делегат, поскольку он устарел – Anconia 26 July 2015 в 17:23
0
ответ дан Vinay Kumar 21 August 2018 в 03:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: