Audioflinger Server Audioflinger Adioflinger Server Adioflinger Server!, Fatal Signal 11Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Audioflinger Server Audioflinger Adioflinger Server Adioflinger Server!, Fatal Signal 11

Сообщение Anonymous »

У меня есть два фрагмента (слева и вправо), и я попадаю в левый фрагмент в списке радиопричин. Нажав на один из этих потоков, правильный фрагмент должен изменить имя потока и начать воспроизводить поток с данным URI. Проблема в том, что это заставляет мое приложение делать формирование! I did error handling, but after calling such a stream I get:



03-20 14:23:28.192: A/libc(1021): Fatal signal 11 (SIGSEGV) at
0x00000000 (code=1)

03-20 14: 23: 28.192: w /audiosystem (1021): сервер Audioflinger умер! E /MediaPlayer (1021): ошибка (100, 0) < /p>

03-20 14: 23: 28.192: i /servicemanager (1021): ожидание обслуживания
media.audio_flinger ... < /p>

03-20 14: 23: 2352: i /daliik). ThreadId = 3: Реакция на сигнал 3

03-20 14: 23: 28.782: i/dalvikvm (1021): написал следы стека для
'/data/anr/traces.txt'br/>
03-20 14: 29.1919191919: 29.19: 29.1919: 29.19: 29.19: 29. I /ServiceManager (1021): ожидание службы
media.audio_flinger ... < /p>
< /blockquote>

Я не знаю, почему. Есть ли другой способ обработки ошибок? Или есть способ проверить все потоки перед вызовом MediaPlayer.SetDatasource (URI), чтобы избежать подготовки Defekt Uris? (См. Мой код в конце) Когда я стараюсь очень быстро переключаться с одного канала на другой, все очень хорошо. Похоже, что восстановление медиаплеера занимает очень много времени. Когда я не переосмысливаю, я получаю время выполнения, когда я снова звоню в MediaPlayer.SetDataSource (..). Есть ли способ позвонить .SetDataSource два раза на одном объекте MediaPlayer?package net.smart4life.tvplay.model;

import java.io.IOException;
import java.lang.reflect.Method;
import java.util.AbstractCollection;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnBufferingUpdateListener;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnErrorListener;
import android.media.MediaPlayer.OnInfoListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.util.Log;

/**
* A wrapper class for {@link android.media.MediaPlayer}.
*
* Encapsulates an instance of MediaPlayer, and makes a record of its internal
* state accessible via a {@link MediaPlayerWrapper#getState()} accessor.
*/
public class MediaPlayerStateWrapper {

private static String tag = "MediaPlayerWrapper";
private MediaPlayer mPlayer;
private State currentState;
private MediaPlayerStateWrapper mWrapper;

public MediaPlayerStateWrapper() {
mWrapper = this;
mPlayer = new MediaPlayer();
currentState = State.IDLE;
mPlayer.setOnPreparedListener(mOnPreparedListener);
mPlayer.setOnCompletionListener(mOnCompletionListener);
mPlayer.setOnBufferingUpdateListener(mOnBufferingUpdateListener);
mPlayer.setOnErrorListener(mOnErrorListener);
mPlayer.setOnInfoListener(mOnInfoListener);
}

/* METHOD WRAPPING FOR STATE CHANGES */
public static enum State {
IDLE, ERROR, INITIALIZED, PREPARING, PREPARED, STARTED, STOPPED, PLAYBACK_COMPLETE, PAUSED;
}

public void setDataSource(String path) {
if (currentState == State.IDLE) {
try {
mPlayer.setDataSource(path);
currentState = State.INITIALIZED;
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} else
throw new RuntimeException();
}

public void prepareAsync() {
Log.d(tag, "prepareAsync()");
if (EnumSet.of(State.INITIALIZED, State.STOPPED).contains(currentState)) {
mPlayer.prepareAsync();
currentState = State.PREPARING;
} else
throw new RuntimeException();
}

public boolean isPlaying() {
Log.d(tag, "isPlaying()");
if (currentState != State.ERROR) {
return mPlayer.isPlaying();
} else
throw new RuntimeException();
}

public void seekTo(int msec) {
Log.d(tag, "seekTo()");
if (EnumSet.of(State.PREPARED, State.STARTED, State.PAUSED,
State.PLAYBACK_COMPLETE).contains(currentState)) {
mPlayer.seekTo(msec);
} else
throw new RuntimeException();
}

public void pause() {
Log.d(tag, "pause()");
if (EnumSet.of(State.STARTED, State.PAUSED).contains(currentState)) {
mPlayer.pause();
currentState = State.PAUSED;
} else
throw new RuntimeException();
}

public void start() {
Log.d(tag, "start()");
if (EnumSet.of(State.PREPARED, State.STARTED, State.PAUSED,
State.PLAYBACK_COMPLETE).contains(currentState)) {
mPlayer.start();
currentState = State.STARTED;
} else
throw new RuntimeException();
}

public void stop() {
Log.d(tag, "stop()");
if (EnumSet.of(State.PREPARED, State.STARTED, State.STOPPED,
State.PAUSED, State.PLAYBACK_COMPLETE).contains(currentState)) {
mPlayer.stop();
currentState = State.STOPPED;
} else
throw new RuntimeException();
}

public void reset() {
Log.d(tag, "reset()");
mPlayer.reset();
currentState = State.IDLE;
}

/**
* @return The current state of the mediaplayer state machine.
*/
public State getState() {
Log.d(tag, "getState()");
return currentState;
}

public void release() {
Log.d(tag, "release()");
mPlayer.release();
}

/* INTERNAL LISTENERS */
private OnPreparedListener mOnPreparedListener = new OnPreparedListener() {

@Override
public void onPrepared(MediaPlayer mp) {
Log.d(tag, "on prepared");
currentState = State.PREPARED;
mWrapper.onPrepared(mp);
mPlayer.start();
currentState = State.STARTED;
}
};
private OnCompletionListener mOnCompletionListener = new OnCompletionListener() {

@Override
public void onCompletion(MediaPlayer mp) {
Log.d(tag, "on completion");
currentState = State.PLAYBACK_COMPLETE;
mWrapper.onCompletion(mp);
}
};
private OnBufferingUpdateListener mOnBufferingUpdateListener = new OnBufferingUpdateListener() {

@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
Log.d(tag, "on buffering update");
mWrapper.onBufferingUpdate(mp, percent);
}
};
private OnErrorListener mOnErrorListener = new OnErrorListener() {

@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
Log.d(tag, "on error");
currentState = State.ERROR;
mWrapper.onError(mp, what, extra);
return false;
}
};
private OnInfoListener mOnInfoListener = new OnInfoListener() {

@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
Log.d(tag, "on info");
mWrapper.onInfo(mp, what, extra);
return false;
}
};

/* EXTERNAL STUBS TO OVERRIDE */
public void onPrepared(MediaPlayer mp) {
}

public void onCompletion(MediaPlayer mp) {
}

public void onBufferingUpdate(MediaPlayer mp, int percent) {
}

boolean onError(MediaPlayer mp, int what, int extra) {
// Error Handling of type: "MEdiaPlayer error(100,0)
mp.stop();
mp.release();
return false;
}

public boolean onInfo(MediaPlayer mp, int what, int extra) {
return false;
}

/* OTHER STUFF */
public int getCurrentPosition() {
if (currentState != State.ERROR) {
return mPlayer.getCurrentPosition();
} else {
return 0;
}
}

public int getDuration() {
// Prepared, Started, Paused, Stopped, PlaybackCompleted
if (EnumSet.of(State.PREPARED, State.STARTED, State.PAUSED,
State.STOPPED, State.PLAYBACK_COMPLETE).contains(currentState)) {
return mPlayer.getDuration();
} else {
return 100;
}
}
}
< /code>

Вот мой тестфрагмент (правый фрагмент). ПРИМЕЧАНИЕ. Левый фрагмент вызывает метод «NewChannel (RadioChannel)» из TestFragment, каждый раз, когда нажимали список.package net.smart4life.tvplay.fragment;

import java.io.IOException;

import net.smart4life.tvplay.R;
import net.smart4life.tvplay.model.MediaPlayerStateWrapper;
import net.smart4life.tvplay.model.RadioChannel;
import android.app.Fragment;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnErrorListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;

public class TestFragment extends Fragment {

private RadioChannel radioCh;
private TextView tv_RadioCh;
private MediaPlayerStateWrapper mediaWrapper;
private View view;

// firstcall
public TestFragment(RadioChannel radioChannel) {
this.radioCh = radioChannel;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);

setRetainInstance(true);

tv_RadioCh = (TextView) view.findViewById(R.id.radioText);

mediaWrapper = new MediaPlayerStateWrapper();

newChannel(radioCh);
}

public void newChannel (RadioChannel radioChannel) {
this.radioCh = radioChannel;
Log.e("RadioChannel", radioCh.getName());
tv_RadioCh.setText(radioCh.getName());

if(mediaWrapper.isPlaying()) {
mediaWrapper.stop();
mediaWrapper.reset();
} else if(mediaWrapper.getState() == MediaPlayerStateWrapper.State.PREPARING) {
mediaWrapper.release();
mediaWrapper = new MediaPlayerStateWrapper();
}
mediaWrapper.setDataSource(radioCh.getUrl().toString());
mediaWrapper.prepareAsync();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

view = inflater.inflate(R.layout.fragment_radio_player, container,
false);

return view;
}

@Override
public void onDetach() {
super.onDetach();

mediaWrapper.release();
}

}
< /code>

Pros, не могли бы вы помочь мне с одним или обоими вопросами? < /p>

Подробнее здесь: https://stackoverflow.com/questions/155 ... -signal-11
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Android Fatal Signal 11 (Sigsegv) по адресу 0x636f7d89 (code = 1). Как его можно отследить?
    Anonymous » » в форуме Android
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Сервер Android MediaPlayer AudioStream AudioFlinger умер!, Фатальный сигнал 11
    Anonymous » » в форуме Android
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Как получить уникальный идентификатор пользователя One Signal на мобильном устройстве?
    Anonymous » » в форуме Android
    0 Ответы
    46 Просмотры
    Последнее сообщение Anonymous
  • Как получить уникальный идентификатор пользователя One Signal на мобильном устройстве?
    Anonymous » » в форуме IOS
    0 Ответы
    39 Просмотры
    Последнее сообщение Anonymous
  • Невозможно собрать JNI для Signal Protocol — проблема «Отказано в разрешении»
    Anonymous » » в форуме Android
    0 Ответы
    71 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»