Как транслировать музыкальные файлы Rhapsody RAD/EA?

Я пишу приложение для iOS, которое взаимодействует с музыкальным сервисом Rhapsody SDK. Я застрял на том этапе, когда мне нужно объединить части RAD и EA музыкального файла. Согласно их документам:

После того, как информация о воспроизведении дорожки была возвращена, вы можете приступить к извлечению аудиоданных Rhapsody. Сначала загрузите в клиент свойство URL-адреса мультимедиа, возвращенное методом getTrackPlaybackInfos. Для большинства форматов Rhapsody, разрешенных для потоковой передачи, требуется метод безопасности, используемый Rhapsody, который называется RAD/EA. Модель безопасности RAD/EA допускает немедленную загрузку через HTTP большей части дорожки (известной как RAD-часть аудио). Затем клиент загружает небольшую зашифрованную часть файла (известную как часть файла EA) каждые 30 секунд, чтобы составить весь музыкальный файл.

Если URL-адрес мультимедиа содержит RAD, вызовите метод getEA, чтобы получить необходимое аудио (EA). Используйте идентификатор сеанса, версию RAD (3, если иное не указано вашим представителем Rhapsody Direct), формат и битрейт, возвращаемые при вызове функции getTrackPlaybackInfos. Вы должны вызвать метод getEA несколько раз, чтобы воспроизвести всю звуковую дорожку. Параметр position содержит смещение в блоке EA, с которого начинается извлечение аудиоданных, а параметр count содержит фактическое количество возвращаемых байтов. Например, при первом вызове getEA вы должны установить для параметра position значение 0, а для параметра count — значение 4096. Это вернет 4096 байтов аудиоданных, начиная с начала дорожки. При втором вызове для получения EA вы должны установить параметр position равным 4096, а параметр count — 4096. При третьем вызове параметр position будет равен 8192, а параметр count — 4096. Продолжайте вызывать метод getEA, пока не будет получена вся дорожка. играл.

Я могу найти файл RAD достаточно легко. Но что мне не ясно, так это то, как мне повторно объединить файлы RAD и EA в потоковый / воспроизводимый медиафайл? Я думаю, что это первый раз, когда Google подвел меня. Я даже не могу найти подсказку о том, как действовать дальше.


person bejonbee    schedule 10.09.2012    source источник
comment
Вам удалось его стримить?   -  person pvllnspk    schedule 18.01.2013
comment
Нет. От Rhapsody мы тоже не могли получить большой помощи. После разговора с ними создается впечатление, что они переделывают/обновляют свою систему и API, не затрачивая много ресурсов на старую. Так что мы ждем/надеемся, что они это сделают, и что это на уровне API rdio и Spotify.   -  person bejonbee    schedule 18.01.2013


Ответы (1)


  1. О RAD/EA: на сайте Rhapsody есть несколько примеров того, как получить воспроизводимый музыкальный файл из входных файлов RAD и EA (примеры на Java и C++)

  2. RAD файл, который мы можем скачать напрямую

  3. Проблема с файлом EA - как его создать? В документации написано, что нам нужно вызывать метод getEA каждые 30 секунд, но тут возникают следующие вопросы:

    • How to create an EA file (that as I understand should have a special structure with the special file headers) from the received from the WS getEA method bytes?
    • Как обращаться с режимом OFFLINE, если нам нужно вызывать метод getEA каждые 30 секунд для декодирования файла RAD?

Если у вас есть, что добавить - пожалуйста... Буду рад любой новой информации.

Решение:

  1. Загрузите файл РАД.

  2. Вызовите getEA — мы получим здесь массив каких-то ASCII-кодов. См. здесь, как преобразовать его в массив байтов в Java: строка символов

  3.         RadStream rs = new RadStream(getRadSource());
            Log.e(TAG, "" + rs.getHeader());
    
            EaStream es = new EaStream(getEaSource());
            Log.e(TAG, "" + es.getHeader());
    
            RadEaStream radea = new RadEaStream(rs, es);
    
            int counter = 0;
            FileOutputStream out = new FileOutputStream(fileWMA);
            for (int c = radea.read(); c >= 0; c = radea.read()) {
                out.write(c);
                counter += 1;
            }
            out.close();
    

Для меня это работает.

person pvllnspk    schedule 18.01.2013
comment
Мне удалось заставить их пример кода работать нормально. Я также могу загрузить части RAD и EA через API. Моя проблема в том, что когда я применяю их пример кода к файлам, которые я получаю от API, он не может декодировать. Я не смог пройти мимо этого и до сих пор не смог получить никакой помощи от Rhapsody. - person bejonbee; 19.01.2013