Everyplay держит мой микрофон UNITY3D iOS

У меня есть один вопрос по поводу реализации функции записи видео Everyplay на устройствах iOS.

Проблема возникает, когда я заканчиваю запись. Я перехожу к предварительному просмотру видео Everyplay, где вы можете редактировать видео и делиться им. Затем, когда я возвращаюсь к своей игре при нажатии на кнопку «Назад» или после публикации видео, я не могу использовать микрофон в Unity.

Я думаю, что Everyplay все еще держит мой микрофон, но я не знаю, как его освободить. У меня такая же реализация на Android, и она отлично работает. Я думаю, что проблема существует, потому что на iOS у вас есть возможность редактировать видео с помощью микрофона или камеры.

Есть предположения?


person Dookeybre    schedule 17.04.2014    source источник
comment
Происходит ли это также, если в настройках плеера включить Подготовить IOS к записи? Вы должны остановить свой предыдущий экземпляр микрофона перед входом в видеоредактор и инициализировать новый, когда вернетесь из редактора и вам снова понадобится.   -  person Pauli Ojanen    schedule 17.04.2014
comment
Спасибо за быстрый ответ. Включена подготовка iOS к записи. Я выключаю микрофон, прежде чем закончу запись видео, и я жду 2 секунды, когда вернусь к игре, прежде чем снова включить микрофон, но проблема все еще существует.   -  person Dookeybre    schedule 17.04.2014


Ответы (1)


Мне не удалось воспроизвести вашу проблему на iOS7. Однако проблема действительно существовала на iOS6. Я сделал небольшой взлом, который, кажется, исправляет это на моем устройстве.

EveryplayMicHack.cs (скопируйте это в папку Plugins / Everyplay / Scripts):

using UnityEngine;
using System.Runtime.InteropServices;

public class EveryplayMicHack {
    public static void EnableRecording() {
#if UNITY_IPHONE && !UNITY_EDITOR
        SetPreferredSampleRate(AudioSettings.outputSampleRate);
#endif
    }

#if UNITY_IPHONE && !UNITY_EDITOR
    [DllImport ("__Internal")]
    private static extern void SetPreferredSampleRate(int sampleRate);
#endif
}

EveryplayMicHack.h (скопируйте это в папку Plugins / iOS)

#import <AVFoundation/AVFoundation.h>

void SetPreferredSampleRate(int sampleRate);

EveryplayMicHack.m (скопируйте это в папку Plugins / iOS)

#import "EveryplayMicHack.h"

void SetPreferredSampleRate(int sampleRate) {
    AVAudioSession *audioSession = [AVAudioSession sharedInstance];
    [audioSession setPreferredHardwareSampleRate:sampleRate error:nil];
}

И перед инициализацией микрофона вызовите: EveryplayMicHack.EnableRecording ();

// Something like this
EveryplayMicHack.EnableRecording();

myMicAudioSource.clip = null;
myMicAudioSource.clip = Microphone.Start("Built-in Microphone", ...

Надеюсь, это сработает и для вас! :)

person Pauli Ojanen    schedule 17.04.2014
comment
Спасибо, что помогли мне решить эту проблему. Это исправление сработало для меня. - person Dookeybre; 22.04.2014