Урок 126. Медиа. MediaPlayer – аудио/видео плеер, основные возможности

Обсуждение уроков
Аватара пользователя
IgNa
Сообщения: 345
Зарегистрирован: 30 сен 2013, 12:18

Re: Урок 126. Медиа. MediaPlayer – аудио/видео плеер, основн

Сообщение IgNa » 16 фев 2014, 17:12

:roll: не помогает
как я уже только не пробовал объявлять и где я только не вставлял инициализацию своего массива allpath[]
но public void onCompletion(MediaPlayer arg0) { - эй это пофигу

Весь код для волонтеров

Код: Выделить всё

package om.example.jk;

import java.io.IOException;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;

import android.os.Binder;
import android.os.IBinder;
import android.util.Log;


public class MusicService extends Service  implements  OnCompletionListener{
    private static final String TAG = "TAG";
    public String allpath[] ;
    public int a=0;  
 
	private final IBinder mBinder = new ServiceBinder();
	    Intent intent;

    MediaPlayer mPlayer;
    private int length = 0;
    public String musicfile;

    public MusicService() { }

    public class ServiceBinder extends Binder {
     	 MusicService getService()
    	 { 
    		return MusicService.this;
    		
    	 }
     
    }

    @Override
    public IBinder onBind(Intent arg0){return mBinder;}
	
    @Override
    public void onCreate (){
	  super.onCreate();
	  String allpath[] = new String[95];	 
	
	   mPlayer = MediaPlayer.create(this, R.raw.mile);
    
    }
   

    @Override
	public int onStartCommand (Intent intent, int flags, int startId){
	a=0;
	
        	 
    allpath=intent.getStringArrayExtra("key"); 
		  musicfile = allpath[a];
		  Log.d(TAG, "<><><>!!!:"+ allpath[0]);
		  Log.d(TAG, "<><><>!!!:"+ allpath[1]);

    	try {
      	    mPlayer.stop();
    	}finally {
		
		}
        	
        	try {
        		mPlayer = new MediaPlayer();
				mPlayer.setDataSource(allpath[a]);
				mPlayer.prepare();
	        	mPlayer.start();
	        	mPlayer.setOnCompletionListener(this);
			} catch (IllegalArgumentException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (SecurityException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IllegalStateException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
        
     
         return  START_NOT_STICKY;  // безсамовосстановления
	}

    
	public void pauseMusic()
	{
				
		//if(mPlayer.isPlaying())
	//	{
		//	mPlayer.pause();
		//	length=mPlayer.getCurrentPosition();

	//	}
	}
	public void looptrue(){
	
		
	   	try {
	   		mPlayer.setLooping(true);
    	}finally {    }
		
		}
	public void loopfalse()
	{
		mPlayer.setLooping(false);
	}
	
	
	
	
	public void resumeMusic()
	{
		if(mPlayer.isPlaying()==false)
		{
			mPlayer.seekTo(length);
			mPlayer.start();
		}
	}

	public void stopMusic()
	{
		mPlayer.stop();
	//	mPlayer.release();
	//	mPlayer = null;
	}

	@Override
	public void onDestroy ()
	{
		super.onDestroy();
		if(mPlayer != null)
		{
		try{
		 mPlayer.stop();
		 mPlayer.release();
			}finally {
				mPlayer = null;
			}
		}
	}


	
	
	
	
	
	
	
	
	

	
	public void onCompletion(MediaPlayer arg0) {
	
		a=a+1;
		if (a==3)stopMusic();
		musicfile = allpath[a];
		Log.d(TAG, "-----------------------:"+musicfile);
			try {
				mPlayer.setDataSource(musicfile);
			} catch (IllegalArgumentException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (SecurityException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IllegalStateException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	
	
			try {
				mPlayer.prepare();
			} catch (IllegalStateException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		
    	mPlayer.start();
    	mPlayer.setOnCompletionListener(this);
		

}
} 
Изображение

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 126. Медиа. MediaPlayer – аудио/видео плеер, основн

Сообщение altwin » 16 фев 2014, 17:24

IgNa писал(а): :roll: не помогает
как я уже только не пробовал объявлять и где я только не вставлял инициализацию своего массива allpath[]
но public void onCompletion(MediaPlayer arg0) { - эй это пофигу
если просто посмотреть где ты используешь allpath:
1. в самом классе MusicService, как public String allpath[] ; (не инициализированно)
2. метод onCreate, как String allpath[] = new String[95]; (инициализированно но пусто)
3. метод onStartCommand, как allpath=intent.getStringArrayExtra("key"); (откуда тут "key" берется?)
musicfile = allpath[a];
(a = 0, т.е. по прежнему пусто ты ничего еще не положил)
Log.d(TAG, "<><><>!!!:"+ allpath[0]); (ничего нет)
Log.d(TAG, "<><><>!!!:"+ allpath[1]); (ничего нет)
4. в try, как mPlayer.setDataSource(allpath[a]); (там ничего все еще нет...)
5. метод onCompletion, как String allpath[] = new String[95]; (т.е. даже если бы там что то и было уже нет и снова просто инициализированн пустой массив)
musicfile = allpath[a]; (a = 1, и опять там пусто)

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

P.S. тебе очень нужны основы java, тут кроме сгенерированного кода, все очень плохо. Лучше не торопиться и понять, что нет ничего плохого в том, чтобы начать с начала не перескакивая в дебри... И ты не сделал ничего из того, что я писал, т.е. наверно не понял, я бы очень советовал не торопиться и подучить java. Хотя бы курс специалиста пройди(на торренте есть 2013... );)
Изображение

Аватара пользователя
IgNa
Сообщения: 345
Зарегистрирован: 30 сен 2013, 12:18

Re: Урок 126. Медиа. MediaPlayer – аудио/видео плеер, основн

Сообщение IgNa » 16 фев 2014, 17:40

altwin писал(а):
IgNa писал(а): :roll: не помогает
как я уже только не пробовал объявлять и где я только не вставлял инициализацию своего массива allpath[]
но public void onCompletion(MediaPlayer arg0) { - эй это пофигу
если просто посмотреть где ты используешь allpath:
1. в самом классе MusicService, как public String allpath[] ; (не инициализированно)
2. метод onCreate, как String allpath[] = new String[95]; (инициализированно но пусто)
3. метод onStartCommand, как allpath=intent.getStringArrayExtra("key"); (откуда тут "key" берется?)
musicfile = allpath[a];
(a = 0, т.е. по прежнему пусто ты ничего еще не положил)
Log.d(TAG, "<><><>!!!:"+ allpath[0]); (ничего нет)
Log.d(TAG, "<><><>!!!:"+ allpath[1]); (ничего нет)
4. в try, как mPlayer.setDataSource(allpath[a]); (там ничего все еще нет...)
5. метод onCompletion, как String allpath[] = new String[95]; (т.е. даже если бы там что то и было уже нет и снова просто инициализированн пустой массив)
musicfile = allpath[a]; (a = 1, и опять там пусто)

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

P.S. тебе очень нужны основы java, тут кроме сгенерированного кода, все очень плохо. Лучше не торопиться и понять, что нет ничего плохого в том, чтобы начать с начала не перескакивая в дебри... И ты не сделал ничего из того, что я писал, т.е. наверно не понял, я бы очень советовал не торопиться и подучить java. Хотя бы курс специалиста пройди(на торренте есть 2013... );)

По порядку:
1) в самом классе MusicService - есть строка public String allpath[] ; ( считаю это объявлением)

2. метод onCreate, как String allpath[] = new String[95]; (инициализированно но пусто) - СОГЛАСЕН !, но других мест нету
3.метод onStartCommand, как allpath=intent.getStringArrayExtra("key"); (откуда тут "key" берется?)
он приходит из mainactivivty через интент вместе с массивом - здесь всё чисто

musicfile = allpath[a];
(a = 0, т.е. по прежнему пусто ты ничего еще не положил)
нет а = 0, значит путь равен первой строке массива - именно он у меня и играет бесконечно)))
4. в try, как mPlayer.setDataSource(allpath[a]); (там ничего все еще нет...)
там тот же первый путь из массива при а= 0

5. метод onCompletion, как String allpath[] = new String[95]; (т.е. даже если бы там что то и было уже нет и снова просто инициализированн пустой массив)
musicfile = allpath[a]; (a = 1, и опять там пусто)


Согласен, но здесь я уже убрал инициализацию - ты слишком быстро прочитал пост
( я эксперементировал просто)
Изображение

Аватара пользователя
IgNa
Сообщения: 345
Зарегистрирован: 30 сен 2013, 12:18

Re: Урок 126. Медиа. MediaPlayer – аудио/видео плеер, основн

Сообщение IgNa » 16 фев 2014, 17:51

И всё-таки где и как объявить и проинициализировать строковый массив типа public String allpath[] что бы он, ( полученный через интент) был доступен для каждого метода service??
Изображение

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 126. Медиа. MediaPlayer – аудио/видео плеер, основн

Сообщение altwin » 16 фев 2014, 17:56

он приходит из mainactivivty через интент вместе с массивом - здесь всё чисто
нет а = 0, значит путь равен первой строке массива - именно он у меня и играет бесконечно)))
значит в массиве обе строки одинаковые.
Изображение

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 126. Медиа. MediaPlayer – аудио/видео плеер, основн

Сообщение altwin » 16 фев 2014, 17:57

IgNa писал(а):И всё-таки где и как объявить и проинициализировать строковый массив типа public String allpath[] что бы он, ( полученный через интент) был доступен для каждого метода service??
в самом начале там, где ты его объявляешь. И вот это - allpath=intent.getStringArrayExtra("key"); вместе с объявлением intent туда же в начало класса.

P.S. ты же не будешь этот плеер в маркет выкладывать ? :)
Изображение

Аватара пользователя
IgNa
Сообщения: 345
Зарегистрирован: 30 сен 2013, 12:18

Re: Урок 126. Медиа. MediaPlayer – аудио/видео плеер, основн

Сообщение IgNa » 16 фев 2014, 18:18

Новая игформация - сделав прямо здесь прямо вот так
public class MusicService extends Service implements OnCompletionListener{
String allpath[] = new String[95];


Заметил вот что В методе public void onCompletion(MediaPlayer arg0) {
благодаря a = a +1 из моего массива каждый раз береся всё время новая строка ( вывожу в лог)
только вот медиаплеер всегда упрямо играеет только первую! Сейчас разбираюсь с этим
Изображение

Gannibal06
Сообщения: 1
Зарегистрирован: 18 апр 2014, 19:50

Re: Урок 126. Медиа. MediaPlayer – аудио/видео плеер, основн

Сообщение Gannibal06 » 18 апр 2014, 19:54

Привет всем!
Хотелось бы узнать, как надо запусать mediaplayer при помощи AlarmManager. Необходимо через PendingIntent переслать команду включения mediaplayer или это как-то по другому делается? Был бы признателен, если помогли)

Stinky_Asshole
Сообщения: 1
Зарегистрирован: 13 апр 2014, 16:24

Re: Урок 126. Медиа. MediaPlayer – аудио/видео плеер, основн

Сообщение Stinky_Asshole » 28 апр 2014, 23:03

Всем привет! Ребят, а как прикрутить Эквалайзер к медиаПлейеру?

WaNdera
Сообщения: 3
Зарегистрирован: 31 окт 2013, 23:55

Re: Урок 126. Медиа. MediaPlayer – аудио/видео плеер, основн

Сообщение WaNdera » 21 авг 2014, 00:33

При использовании потока формата aac (интернет-радио)перед проигрыванием возникает большая пауза. Можно ли ее как-нить уменьшить?

Realist
Сообщения: 134
Зарегистрирован: 08 фев 2014, 18:15

Re: Урок 126. Медиа. MediaPlayer – аудио/видео плеер, основн

Сообщение Realist » 25 авг 2014, 19:50

Подскажите как можно наложить трансляцию трека на SeekBar. Как управлять с него объектом MediaPlayer вроде ясно. А как сделать, чтобы бегунок отображал время произведения?

Spinner
Сообщения: 9
Зарегистрирован: 26 сен 2013, 20:51

Re: Урок 126. Медиа. MediaPlayer – аудио/видео плеер, основн

Сообщение Spinner » 28 авг 2014, 12:57

Realist писал(а):Подскажите как можно наложить трансляцию трека на SeekBar. Как управлять с него объектом MediaPlayer вроде ясно. А как сделать, чтобы бегунок отображал время произведения?
http://stackoverflow.com/questions/9481 ... r-progress
А для отображения времени ставишь две TextView по бокам seekBar'a и передаешь туда значения плеера getCurrentPosition() и getDuration().

Spinner
Сообщения: 9
Зарегистрирован: 26 сен 2013, 20:51

Re: Урок 126. Медиа. MediaPlayer – аудио/видео плеер, основн

Сообщение Spinner » 28 авг 2014, 22:25

А мне подскажите, плиз, как достать например с сайта http://vk-music.ru/ пути к mp3 файлам? Чтоб добавить их в setDataSource() и проигрывать в плеере

Realist
Сообщения: 134
Зарегистрирован: 08 фев 2014, 18:15

Re: Урок 126. Медиа. MediaPlayer – аудио/видео плеер, основн

Сообщение Realist » 29 авг 2014, 09:41

Spinner писал(а):А мне подскажите, плиз, как достать например с сайта http://vk-music.ru/ пути к mp3 файлам? Чтоб добавить их в setDataSource() и проигрывать в плеере
Могу подсказать только как достать пути к файлам с vk.com, как раз этим сейчас и занимаюсь=)

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 126. Медиа. MediaPlayer – аудио/видео плеер, основн

Сообщение altwin » 29 авг 2014, 09:47

Spinner писал(а):А мне подскажите, плиз, как достать например с сайта http://vk-music.ru/ пути к mp3 файлам? Чтоб добавить их в setDataSource() и проигрывать в плеере
Просто посмотрите, как это делают другие, к примеру: https://github.com/Angelys/vk_music_pla ... oader.java или тут: https://github.com/igurenko/VMusic/blob ... Store.java , оба делают то, что вам нужно.
Изображение

gagarin74
Сообщения: 5
Зарегистрирован: 13 ноя 2014, 17:33

Re: Урок 126. Медиа. MediaPlayer – аудио/видео плеер, основн

Сообщение gagarin74 » 08 дек 2014, 15:09

Добрый день.
Ребят прошу помощи.5 раз прочитал урок и эту ветку.
Большая просьба ПОЖАЛУЙСТА сделайте полностью проект в еклипсе,что бы он умел проигрывать файлик в корне системы в папке к примеру "MYMUSIC" .
Тобишь любой файлик mp3 назовем его music.mp3.
Просто что бы при запуске приложения проигрывался этот файл.
Ну реально не могу понять где я косячу. обчитался я про DATA_SD.

razmus
Сообщения: 82
Зарегистрирован: 26 мар 2013, 10:47

Re: Урок 126. Медиа. MediaPlayer – аудио/видео плеер, основн

Сообщение razmus » 03 мар 2015, 19:09

Добрый день
Скажите может ли компонент MediaPlayer проигрывать aac стрим? Пробовал подставлять http://185.9.144.122:8070/ep64.aac, но работы нет... получаю "ERROR/NuCachedSource2(109): source returned error -107, 10 retries left". Я так понял, он ищет поток MP3, но естественно его не находит. В доке написано, что aac поток должен воспроизводить. По результату гугления получил, что для воспроизведения используют aacdecoder-android, но там лицензия GNU Lesser GPL, а мне не подходит. Может кто на вскидку сказать есть ли решение проблемы с использованием стандартных компонентов?
Заранее благодарен!

Imangadjiev
Сообщения: 2
Зарегистрирован: 24 апр 2015, 21:03

Re: Урок 126. Медиа. MediaPlayer – аудио/видео плеер, основн

Сообщение Imangadjiev » 24 апр 2015, 21:05

Здравствуйте, есть такая трабла, почему то плеер глотает первые 100-300 миллисекунд из mp3 файла, когда воспроизводишь. Кто знает почему, у всех так?

lexx
Сообщения: 4
Зарегистрирован: 10 май 2015, 23:55

Re: Урок 126. Медиа. MediaPlayer – аудио/видео плеер, основн

Сообщение lexx » 18 июн 2015, 23:06

Доброго времени суток! Столкнулся с проблемой - не играет файл по HTTP, setOnErrorListener вылавливает ошибку с кодом MEDIA_ERROR_SERVER_DIED, extra = 0. что может разрывать коннект?

fermopili
Сообщения: 9
Зарегистрирован: 26 дек 2012, 23:32

Re: Урок 126. Медиа. MediaPlayer – аудио/видео плеер, основн

Сообщение fermopili » 25 сен 2015, 18:44

день добрый, столкнулся с таким глюком : запускаю цикл, пока не закончится аудио файл, однако текущая позиция никогда не достигает конца файла, для проверки вывожу текущуюпозицию в лог

Код: Выделить всё

     duration=mediaPlayer.getDuration();
     position=0;
     while(position<duration)
       { position=mediaPlayer.getCurrentPosition();
         Log.d(LOG_TAG, "duration="+duration+"   duration="+position); 
       }
может хто подскажет, разница всегда где-то 3%

Ответить