Сессия:didReceiveFile: не воспроизводится аудиофайл (iPhone для просмотра)

У меня проблема с получением аудиофайла, который я записываю на своем iPhone, для воспроизведения из динамиков часов.

Вот код для отправки с iPhone на Watch.

- (void)sendLiveAudioRecordingToWatch
{
    NSError *error;
    NSFileManager *files = [NSFileManager defaultManager];
    NSString *docs = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
    NSString *record = [docs stringByAppendingPathComponent: @"LiveAudio.m4a"];

    NSURL *URL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier: @"group.myCompany.myApp"];
    NSURL *outputURL = [URL URLByAppendingPathComponent: @"PhoneToWatch.mp4"];

    NSString *path = [NSString stringWithFormat: @"%@", outputURL];
    NSLog(@"%@", [NSURL fileURLWithPath: path]);

    [files removeItemAtPath: [outputURL path] error: &error];
    BOOL fileExists = [files isReadableFileAtPath: record];
    if (fileExists)
    {
        NSLog(@"Live Audio Recording Saved!");
        [files copyItemAtPath: record toPath: [outputURL path] error: &error];
        if (!error)
        {
            NSLog(@"Temporary Recording Copied To Group");
            BOOL deleteRecord = [files removeItemAtPath: record error: &error];
            if (deleteRecord)
            {
                NSLog(@"Temporary Recording Removed");
                if ([WCSession isSupported])
                {
                    WCSession *session = [WCSession defaultSession];
                    NSLog(@"WCSession isSupported");
                    [session setDelegate: self];
                    [session activateSession];
                    if ([session isReachable])
                    {
                        NSLog(@"File Is Being Transferred");
                        [[WCSession defaultSession] transferFile: outputURL metadata: nil];
                    }
                    else
                    {
                        NSLog(@"Watch Not Reachable");
                    }
                }
            }
            else
            {
                NSLog(@"Failed To Delete Temorary File");
            }
        }
        else
        {
            NSLog(@"Error Copying Live Audio To Group");
        }
    }
    else
    {
        NSLog(@"Error Locating Temporary Audio Location");
    }
}

Вот код, который я получил для получения на Watch от iPhone.

- (void)session: (WCSession *)session didReceiveFile: (WCSessionFile *)file
{
    WKAudioFileAsset *asset = [WKAudioFileAsset assetWithURL: [file fileURL]];
    WKAudioFilePlayerItem *playerItem = [WKAudioFilePlayerItem playerItemWithAsset: asset];
    WKAudioFilePlayer *player = [WKAudioFilePlayer playerWithPlayerItem: playerItem];
    [player play];
}

iOS 9.2 watchOS 2.0

Кто-нибудь испытывал это или смог заставить это работать?

1 ответ

Я получил это работает. WKAudioFilePlayer используется для воспроизведения через устройство Bluetooth, а не через динамики Apple Watch. В WatchOS 2.0 и выше вы можете использовать:

[self presentMediaPlayerControllerWithURL:url options:options completion:^(BOOL didPlayToEnd, NSTimeInterval endTime, NSError * __nullable error){}];
Другие вопросы по тегам