Pull to refresh
33
0

iOS developer

Send message
Я ждал, что API Siri позволит распознавать любую речь внутри моего приложения, но получил возможность вставить кусочек моего приложения в Siri. На данный момент я пользуюсь только двумя сценариями Siri, которые выглядят примерно так:

  • Установи будильник на 7 утра
  • Напомни о конференции в четверг в 15-30

Новое API добавляет с моей точки зрения только один полезный use case — «Вызови UBER/Яндекс.такси», и думаю именно для этих компаний оно и полезно.

Не думаю, что кто-то будет активно пользоваться «Siri, отправить деньги», ведь это может быть и так:
— Siri, отправь триста долларов моему брату
— Окей, я отправляю три тысячи сто долларов в Apple.

Спасибо, проверил, добавил ваше предупреждение в начало статьи
Попробуй перезагрузить iPhone, вдруг поможет (лично у меня разовая перезагрузка Mac и iPhone устранила несколько UI багов)
Среди новых команд к Siri вычитал такую «Насколько мощный мой компьютер». Попробовал… Видимо Siri видала железо помощнее моего Mac Pro :)

image
Да, macOS Sierra я тоже поставил. Традиционно перестали работать мои любимые CleanMyMac и HandsOff (Фаервол), но надеюсь в ближайшее время мне удастся их обновить.Что касается Xcode 8 beta — симуляторы работают, так же в Xcode немного изменился шрифт (особенно заметно на знаках препинания).

Из того, что мне не понравилось (остальным возможно понравится) — в Xcode 8 переработали панель инструментов позиционирования (скрин), больше нет универсальной формы для всех девайсов — под каждый девайс отдельные настройки отступов. Кнопка «Clear Constaints» у меня перестала работать вовсе, никакой реакции, пришлось удалять «Constaints» вручную по одной из левого списка с иерархией форм. Перезагрузка не помогла. Буду разбираться.

Но Xcode 7.3 (стабильный) у меня остался, так что нет причин переживать за невозможность собрать рабочий проект.

image
Ну я же написал, что «есть и другие методы обхода», спасибо за способ, полезный коммент, забираю к себе в заметки. Мне кстати по данной теме еще понравилось, как некоторые приложения обходят запрет за воспроизведение звуков во время телефонного звонка — они воспроизводят музыку через локальные in-app уведомления.
Ну все верно, iOS не позволяет создавать новые звуки в фоне, но разрешает в фоне держать «аудиопоток», который остается активным, и в котором можно будет воспроизводить звуки в дальнейшем. Помимо описанного в статье способа обхода запрета запуска новых звуков в iOS, есть и другие методы, которые и используют создатели iOS музыкальных плееров.

Но если вы попробуете запустить в фоне звук с помощью классического метода:

AVAudioPlayer *avPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:
    [NSURL fileURLWithPath:@"имя_файла.caf"] error:nil];
[avPlayer play];


— то звук в фоне не запустится. Именно поэтому, при воспроизведении музыки из VK через Safari на iOS — следующий трек не включается, если приложение свернуто.
Первостепенная, в идеале хотелось бы, чтобы Core Audio стало частью новых общественных методов и аудио звонки вошли бы в состав стандартного VK SDK
Да, только публичная информация, ФИО и список друзей.
Спасибо за ссылку, поигрался с приложением, работает :)
Скиньте ссылку, пожалуйста, или название приложения, где это можно сделать.
Действительно, спасибо за ссылку
Спасибо, я к сожалению в SIP мало понимаю, но постараюсь разобраться. Получается такая ситуация: у нас есть два iPhone, без выделенных IP, которые нужно соединить по UDP протоколу. Открыть UDP порт для принятия данных телефон не может. Каждый из них сначала опросит STUN сервер, чтобы узнать, что у него нет выделенного IP, хотя нужно ли это действие, когда и так понятно, что выделенного IP нету? Затем каждый из iPhone создаст постоянное TCP(!) соединение со своим TURN сервером, для того, чтобы иметь возможность через TURN сервер принимать (проксировать) UDP данные. В итоге, для того, чтобы соединить два телефона, у нас висит 2 TCP соединения, 2 UDP соединения (от клиентов на TURN сервер противоположного iPhone), да и еще коммуникация между TURN серверами + первоначальный опрос STUN серверов? И для чего такая сложная топология нужна — только для того, чтобы при потере пакетов не заморачиваться на повторную отправку данных? Верно я понимаю данную схему или допустил ошибку? Буду благодарен, если объясните.
Все верно, в интернете есть примеры iOS RTP проектов, я так же пытался собрать и XMPP проект, но при выходе новых версий iOS — эти проекты у меня просто перестали компилироваться. Причем в старых версиях XCODE эти проекты собирались, но Apple запретил нам пользоваться старыми версиями XCODE, скаченными со сторонних ресурсов, под угрозой исключения приложений из App Store. Лично у меня не хватило терпения разобраться со всеми ошибками компилятора, если у вас есть рабочие iOS примеры — поделитесь с нами, пожалуйста.
Я понимаю, что, как сотрудник Voximplant, вы пытаетесь рекламировать свой продукт, возможно это и правильно, но не понимаю, как iOS пользователи без внешнего IP могут приватно совершать P2P звонки, не пропуская весь трафик через ваши сервера. Я понимаю, что большинство VoIP работают на UDP, но мне хотелось провести эксперимент с гарантированной доставкой пакетов, поэтому я попробовал использовать TCP для гарантированной передачи зашифрованных пакетов, чтобы принимающая сторона могла их гарантированно расшифровать.
Платные решения я не рассматриваю по трем причинам (помимо той, что большинство этих решений написано на том же Core Audio):
  • Есть в наличии свои сервера.
  • Я планирую сделать приватные чаты с шифрованием по паролю. Использовать сторонние сервера — удар по приватности пользователей.
  • Работая со звуком на «низком уровне», есть возможность создавать голосовые фильтры, модифицировать голос, что я и хочу сделать в дальнейших обновлениях.
Добавить поддержку видео в мое приложение на данном этапе — довольно просто, но тема для отдельной статьи.
Как я понимаю, "временный штампы" нужны для синхронизации видео потока с аудио потоком и субтитрами, а так же для обнаружения пропущенных семплов.
Если вы посмотрите на код активации Callback в статье, вы увидите эту метку — AudioTimeStamp * inTimeStamp:
#pragma mark ======== AudioUnit recording callback =========
static OSStatus PushCurrentInputBufferIntoAudioUnit(void * inRefCon,
    AudioUnitRenderActionFlags * ioActionFlags,
    const AudioTimeStamp * inTimeStamp,
    UInt32 inBusNumber,
    UInt32 inNumberFrames,
    AudioBufferList * ioData)
{
    //inTimeStamp - это и есть наша временная метка
} 

struct AudioTimeStamp {
    Float64 mSampleTime;   // временная метка в количестве семплов
    UInt64  mHostTime;   // временная метка в абсолютном системном времени
    // ...
    UInt32 mFlags;   // маска, указывающая на то, какие из полей заполнены
 };
Абсолютно верный и уместный комментарий, я планировал на сервере открыть 2 порта, один TCP: для авторизации и обменом ВК информацией, второй UDP: для пересылки аудио пакетов. Возможно, попробую UDP позже.
К сожалению по вашему линку устаревшая инструкция по сборке, в xcode 7.3 — pjsip не собирается на iOS, огромное количество ошибок. Часть ошибок я попробовал исправить, но потратив 10 минут, скомпилировать на iOS мне не удалось. Возможно, потратив больше времени, можно собрать pjsip на iOS 9, если у вас есть данный опыт, поделитесь готовым архивом с проектом. Тут еще дело в том, что мой сервер, написанный с нуля, помимо распределения аудио данных, рассылает IN-APP нотификации и синхронизирует информацию о VK друзьях с базой данных. В принципе можно модифицировать Kamailio сервер, но не уверен, что это тривиальная задача.
Я не гоняю сырой wav, а использую нативный "Препроцессор".
Если нужно именно mp3, то ищем в статье строчку кода:
audioFormat.mFormatID = kAudioFormatLinearPCM;

Заменяем на
audioFormat.mFormatID = kAudioFormatMPEGLayer3;
1

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity