Как приостановить и воспроизвести потоковый аудиоплеер J2ME с RTP
Вот как я пытаюсь воспроизвести аудиопоток с сервера через RTP.
try {
String url = "rtp://...";
Player p = Manager.createPlayer(url);
p.realize();
VideoControl video = (VideoControl) p.getControl("VideoControl");
Item itm = (Item) video.initDisplayMode(VideoControl.USE_GUI_PRIMITIVE, null);
midlet.form.append(itm);
p.start();
} catch (Exception e) {...}
Я пробовал http, и он работал хорошо. В http, весь медиа-контент загружается, а затем мы можем воспроизводить, приостанавливать и воспроизводить снова. Все в порядке. Я хочу воспроизвести аудио из RTP. Я хочу знать, как поставить проигрыватель на паузу (и данные не загружаются, сохраните запись, в которой воспроизведение мультимедиа было приостановлено), снова воспроизведите, когда пользователю необходимо воспроизвести (и начать загрузку снова с последней загруженной точки (не с начала)).
Насколько я знаю, смартфоны не могут поддерживать сеанс с сервером, так как мобильный телефон не сохраняет сеансы и отправляет обратно на сервер каждый раз, когда запрос отправляется на сервер (а просто отправляет запрос и получает ответ, нет управления сессиями). Возможно я не прав.
В любом случае, как я могу приостановить (и остановить загрузку) и воспроизвести снова (начать загрузку с последней точки, где загрузка была остановлена) аудио в приложении J2ME? Пожалуйста, дайте мне знать, если кто-нибудь знает хорошее решение, пример кода.
2 ответа
При потоковой передаче все мультимедийные данные НЕ загружаются сразу, а некоторые части мультимедийных файлов загружаются по мере воспроизведения. Когда проигрыватель создается с помощью локатора rtp/rtsp, достаточно вызвать player.stop(), чтобы остановить воспроизведение и любую дальнейшую загрузку носителя. Аналогично, player.start() достаточно для возобновления воспроизведения с того места, где оно было остановлено.
Вы должны иметь в виду, что, поскольку носитель не является локальным, если поток не возобновляется через некоторое время, потоковый сервер может посчитать, что поток истек по тайм-ауту, и вам потребуется восстановить поток.
Просто следуйте указаниям player.stop(),player.start(); достаточно функционировать