Как передать mp3 потоком с помощью чистого Java

Здесь есть две проблемы


Асинхронный вызов setData

setData вызывается в обратном вызове Promise.

Как только Promise разрешается, все обратные вызовы, ожидающие его, ставятся в очередь в очереди PromiseJobs . Все ожидающие задания в очереди PromiseJobs запускаются после завершения текущего сообщения и до начала следующего сообщения .

В этом случае текущее работающее сообщение - это ваш тест, поэтому ваш тест завершается до того, как обратный вызов Promise сможет его выполнить, и setData не вызывается до после вашего теста завершается.

]

Вы можете исправить это, используя что-то вроде setImmediate, чтобы отложить ваши утверждения до тех пор, пока не будут запущены обратные вызовы в PromiseJobs.

Похоже, вам также нужно вызвать component.update() для повторного рендеринга компонента с новым состоянием. (Я предполагаю, что это потому, что изменение состояния происходит вне act, поскольку нет никакого способа обернуть этот код обратного вызова в act.)

Все вместе, рабочий тест выглядит например:

it('should render a proper table data', done => {
  const mock = new MockAdapter(axios);
  mock.onGet('/path/to/api').reply(200, response.data);
  const component = mount();
  setImmediate(() => {
    component.update();
    console.log(component.debug());
    done();
  });
});

Предупреждение. Обновление ... не было включено в действие (...)

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

Изменения состояния, вызванные асинхронными вызовами к setData, инициированными функцией useEffect , всегда будут происходить за пределами act.

Вот очень простой тест, демонстрирующий это поведение:

import React, { useState, useEffect } from 'react';
import { mount } from 'enzyme';

const SimpleComponent = () => {
  const [data, setData] = useState('initial');

  useEffect(() => {
    setImmediate(() => setData('updated'));
  }, []);

  return (
{data}
); }; test('SimpleComponent', done => { const wrapper = mount(); setImmediate(done); });

Когда я искал дополнительную информацию, я наткнулся на enzyme выпуск № 2073 , открытый всего 10 часов назад. говорить об этом же поведении.

Я добавил вышеуказанный тест в комментарий , чтобы помочь разработчикам enzyme решить эту проблему.

9
задан npellow 18 March 2009 в 01:49
поделиться

3 ответа

Как Mario говорит, JMF - Платформа Java Media является хорошей начальной точкой.

То, что не говорит Mario, - то, что Sun уничтожил поддержку MP3 с тех пор 2.1.1b, как детализировано в "Моей Потерянной Потоковой передаче запись в блоге" Статьи MP3.

Таким образом, необходимо добавить плагин для поддержки MP3:
список Форматов JMF действительно упоминает MP3 (под ACM - поддержкой менеджера по Сжатию звука Окна - раздел), но только для Windows, а не с одним только JMF.

4
ответ дан 3 November 2019 в 07:14
поделиться

Вы могли использовать MP3SPI от JavaZoom для потоковой передачи файлов MP3

Поскольку это говорит относительно их веб-страницы: "MP3SPI является Интерфейсом Поставщика услуг Java, который добавляет MP3 (MPEG 1/2/2.5 Уровень 1/2/3) поддержка формата аудио Платформы Java. Это поддерживает потоковую передачу, кадры ID3v2, Эквалайзер...."

Люди уже использовали его для создания приложений тот поток от Shoutcast


Надеюсь, это поможет

1
ответ дан 3 November 2019 в 07:14
поделиться

Я думаю, что можно использовать Платформу Java Media от SUN для достижения того, что Вы хотите. Будучи этим официальная реализация SUN это было бы способом пойти. Я вполне уверен, что фактическая потоковая передача является собственной все же.

Я смотрел в FAQ, и я нашел следующий ответ:

Q: Будет JMF 2.1.1 потоковых передачи поддержки?

Да. JMF 2.1.1 оказывает RTP/RTSP потоковая передача поддержки.

JMF 2.1.1 также обеспечивает HTTP и поддержку потоковой передачи FTP на стороне клиента.

0
ответ дан 3 November 2019 в 07:14
поделиться
Другие вопросы по тегам:

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