SimpleExoplayer больше не передает поток mp3 из URL, когда я выбираю другой радиоканал из фрагмента - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть список радиоканалов, и я хочу транслировать через SimpleExoPlayer. У меня есть код ниже. Я впервые открываю приложение и начинаю играть на любом канале, он работает хорошо. Однако, когда я изменяю свой фрагмент, чтобы выбрать другой канал, он не воспроизводится. Может ли это быть вызвано playstate, потому что впервые его значение равно 3, и оно работает, для других событий его значение всегда равно 1 ?! Я действительно понятия не имею об этом.

public class NewPlayFragment extends Fragment {

private View view;
private Bundle args;
private SimpleExoPlayer simpleExoPlayer;
private TextView radioNameNew;
private ImageButton image_play_new, image_stop_new;
private String source, name;
private ImageView img_channel;
private static final String TAG = "NewPlayFragment";

public NewPlayFragment() {
    // Required empty public constructor
}

@SuppressLint("SetTextI18n")
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    view = inflater.inflate(R.layout.fragment_new_play, container, false);

    init();

    args = getArguments();
    assert args != null;
    String imageUrl = args.getString("imageUrl");
    name = args.getString("name");
    String signal = args.getString("signal");
    String source = args.getString("mimeMpegUrl");


    Picasso.get().load(imageUrl).into(img_channel);
    radioNameNew.setText(name + "  (" + signal + ")");


    setupPlayer();


    image_play_new.setOnClickListener(v -> {
        if (!source.isEmpty()) {
            simpleExoPlayer.setPlayWhenReady(true);
            simpleExoPlayer.getPlaybackState();
            image_play_new.setEnabled(false);
            image_stop_new.setEnabled(true);
        } else {
            Toast.makeText(getActivity(), "No broadcast available", Toast.LENGTH_LONG).show();
        }
    });

    image_stop_new.setOnClickListener(v -> {
        simpleExoPlayer.setPlayWhenReady(false);
        simpleExoPlayer.getPlaybackState();
        image_play_new.setEnabled(true);
        image_stop_new.setEnabled(false);

    });


    return view;
}


private void init() {
    img_channel = view.findViewById(R.id.img_channel);
    radioNameNew = view.findViewById(R.id.radioNameNew);
    image_play_new = view.findViewById(R.id.image_play_new);
    image_stop_new = view.findViewById(R.id.image_stop_new);
}


private void pausePlayer() {
    simpleExoPlayer.setPlayWhenReady(false);
    simpleExoPlayer.getPlaybackState();
}

private void startPlayer() {
    simpleExoPlayer.setPlayWhenReady(true);
    simpleExoPlayer.getPlaybackState();
}

private void setupPlayer() {

    DefaultRenderersFactory renderersFactory = new DefaultRenderersFactory(getActivity(), null,
            DefaultRenderersFactory.EXTENSION_RENDERER_MODE_OFF);

    TrackSelector trackSelector = new DefaultTrackSelector();

    simpleExoPlayer = ExoPlayerFactory.newSimpleInstance(renderersFactory, trackSelector);


    ExtractorMediaSource mediaSource = new ExtractorMediaSource(Uri.parse(source),
            new CacheDataSourceFactory(getActivity(), 100 * 1024 * 1024, 5 * 1024 * 1024),
            new DefaultExtractorsFactory(), null, null);
    simpleExoPlayer.prepare(mediaSource);

}

@Override
public void onDestroy() {
    simpleExoPlayer.release();
    super.onDestroy();
}

@Override
public void onPause() {
    pausePlayer();
    super.onPause();
}

1 Ответ

0 голосов
/ 08 апреля 2020

попробуйте это:

 public class NewPlayFragment extends Fragment {

private View view;
private Bundle args;
private SimpleExoPlayer simpleExoPlayer;
private TextView radioNameNew;
private ImageButton image_play_new, image_stop_new;
 private String source, name,signal,name;//this change
private ImageView img_channel;
private static final String TAG = "NewPlayFragment";

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                       Bundle savedInstanceState) {
   view = inflater.inflate(R.layout.fragment_new_play, container, false);

   init();
  args = getArguments();
   assert args != null;
  //1st remove String
  imageUrl = args.getString("imageUrl");
  //next 
  name = args.getString("name");
    //next
  signal = args.getString("signal");
  //and this
  source = args.getString("mimeMpegUrl");


  //...other code

setupPlayer();

  /* if you want that player playing automatic after fragment onCreate add this here
startPlayer();*/

//...other code

   return view;
}


private void setupPlayer() {

//this change
if(simpleExoPlayer!=null){
   simpleExoPlayer.stop
}

DefaultRenderersFactory renderersFactory = new DefaultRenderersFactory(getActivity(), null,
        DefaultRenderersFactory.EXTENSION_RENDERER_MODE_OFF);

TrackSelector trackSelector = new DefaultTrackSelector();

simpleExoPlayer = ExoPlayerFactory.newSimpleInstance(renderersFactory, trackSelector);

//... other code

}

@Override
public void onDestroy() {
   //and this changed setStop( not release)
   simpleExoPlayer.stop;
   super.onDestroy();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...