Я разработал приложение, использующее преимущества встроенного в Android MediaPlayer. Исходный код моего класса, использующего Media Player, приведен ниже.
Проблема в том, что только на некоторых устройствах после нескольких миллисекунд воспроизведения (я слышу только голос, экран остается черным) я продолжаю получать ошибку (100,0), о которой говорится в документации
public static final int MEDIA_ERROR_SERVER_DIED
Медиа-сервер умер. В этом случае приложение должно освободить объект MediaPlayer и создать экземпляр нового.
На форумах я обнаружил, что мне нужно перезагружать плеер каждый раз, когда я его получаю... но я получаю его через короткое время, а затем он умирает навсегда. Я не могу сбрасывать плеер каждую секунду, так как воспроизведение бесполезно. Я не могу понять, почему на некоторых устройствах возникает эта проблема, а на других нет. Тот, который я знаю, имеет ОС Android > 4.0.
Конечно, сначала вызываются init(), а затем showVideo(). Затем вызывается последний onError с кодом 100. Каково потенциальное решение, позволяющее обеспечить непрерывную работу потоков и не прерывать их?
public class NativePlayer extends Player implements OnBufferingUpdateListener,
OnCompletionListener, OnErrorListener, OnInfoListener {
private VideoView videoview;
private PlayerListener listener;
private MainActivity context;
private final Logger logger = LoggerFactory.getLogger(NativePlayer.class);
@Override
public void init(MainActivity activity) {
this.videoview = (VideoView) activity.findViewById(R.id.video);
context = activity;
}
@Override
public void showVideo(final String url, final PlayerListener _listener) {
listener = _listener;
videoview.setVisibility(View.VISIBLE);
try {
Uri video = Uri.parse(url);
videoview.setVideoURI(video);
} catch (Exception e) {
logger.error("Error playing video", e);
listener.onVideoError();
return;
}
videoview.setOnCompletionListener(this);
videoview.setOnErrorListener(this);
videoview.requestFocus();
videoview.setOnPreparedListener(new OnPreparedListener() {
public void onPrepared(MediaPlayer mp) {
videoview.start();
if (listener != null) {
listener.onVideoStarted();
}
}
});
}
@Override
public void onStop() {
stop();
}
private void stop() {
if (videoview == null) {
return;
}
if (videoview.isPlaying()) {
videoview.stopPlayback();
}
}
@Override
public void onDestroy() {
}
@Override
public void onCompletion(MediaPlayer mp) {
stop();
}
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
if (listener != null) {
listener.onVideoError();
}
return false;
}
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
if (listener != null) {
listener.onInfo(what, extra);
}
return false;
}
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
if (listener != null) {
listener.onBufferingUpdate(percent);
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/198 ... erver-died
Ошибка потоковой передачи Android MediaPlayer: 100: MEDIA_ERROR_SERVER_DIED ⇐ Android
Форум для тех, кто программирует под Android
1767089035
Anonymous
Я разработал приложение, использующее преимущества встроенного в Android MediaPlayer. Исходный код моего класса, использующего Media Player, приведен ниже.
Проблема в том, что только на некоторых устройствах после нескольких миллисекунд воспроизведения (я слышу только голос, экран остается черным) я продолжаю получать ошибку (100,0), о которой говорится в документации
public static final int MEDIA_ERROR_SERVER_DIED
Медиа-сервер умер. В этом случае приложение должно освободить объект MediaPlayer и создать экземпляр нового.
На форумах я обнаружил, что мне нужно перезагружать плеер каждый раз, когда я его получаю... но я получаю его через короткое время, а затем он умирает навсегда. Я не могу сбрасывать плеер каждую секунду, так как воспроизведение бесполезно. Я не могу понять, почему на некоторых устройствах возникает эта проблема, а на других нет. Тот, который я знаю, имеет ОС Android > 4.0.
Конечно, сначала вызываются init(), а затем showVideo(). Затем вызывается последний onError с кодом 100. Каково потенциальное решение, позволяющее обеспечить непрерывную работу потоков и не прерывать их?
public class NativePlayer extends Player implements OnBufferingUpdateListener,
OnCompletionListener, OnErrorListener, OnInfoListener {
private VideoView videoview;
private PlayerListener listener;
private MainActivity context;
private final Logger logger = LoggerFactory.getLogger(NativePlayer.class);
@Override
public void init(MainActivity activity) {
this.videoview = (VideoView) activity.findViewById(R.id.video);
context = activity;
}
@Override
public void showVideo(final String url, final PlayerListener _listener) {
listener = _listener;
videoview.setVisibility(View.VISIBLE);
try {
Uri video = Uri.parse(url);
videoview.setVideoURI(video);
} catch (Exception e) {
logger.error("Error playing video", e);
listener.onVideoError();
return;
}
videoview.setOnCompletionListener(this);
videoview.setOnErrorListener(this);
videoview.requestFocus();
videoview.setOnPreparedListener(new OnPreparedListener() {
public void onPrepared(MediaPlayer mp) {
videoview.start();
if (listener != null) {
listener.onVideoStarted();
}
}
});
}
@Override
public void onStop() {
stop();
}
private void stop() {
if (videoview == null) {
return;
}
if (videoview.isPlaying()) {
videoview.stopPlayback();
}
}
@Override
public void onDestroy() {
}
@Override
public void onCompletion(MediaPlayer mp) {
stop();
}
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
if (listener != null) {
listener.onVideoError();
}
return false;
}
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
if (listener != null) {
listener.onInfo(what, extra);
}
return false;
}
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
if (listener != null) {
listener.onBufferingUpdate(percent);
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/19869473/android-mediaplayer-streaming-error-100-media-error-server-died[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия