2016-09-16 3 views
0

Этот код SurfaceView синхронизации и медиаплеер для потоковой передачи через ИнтернетAndroid: MediaPlayer isPlaying: 0

Мой код:

static SurfaceView   videoSurface; 
static SurfaceHolder   videoHolder; 
static MediaPlayer   mediaPlayer; 

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.page); 
     videoSurface = (SurfaceView) findViewById(R.id.surfView); 
     videoHolder = videoSurface.getHolder(); 
     videoHolder.addCallback((Callback) this); 

     mediaPlayer = new MediaPlayer(); 

     new Thread(new Runnable() { 

       @Override 
       public void run() { 
        String link = "link.m3u8"; 

        imgPlay.setOnClickListener(new OnClickListener() { 

        @Override 
        public void onClick(View arg0) {  
         play(link); 
        } 
       }); 
     } 
    }).start(); 
} 

public static void play(final String link) { 
     new Thread(new Runnable() { 

      @Override 
      public void run() { 
       try { 
        if (mediaPlayer == null) { 
         mediaPlayer = new MediaPlayer(); 
         mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
        } 
        mediaPlayer.setDisplay(videoHolder); 
        mediaPlayer.setDataSource(link); 
        mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 

         public void onPrepared(MediaPlayer mp) { 
          mp.start(); 
         } 
        }); 
       } 
       catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
      }).start(); 
    } 

Этот код работает, но после того, как несколько вторых

Если после загрузки полной я нажмите on Ошибка 0

Но если я подожду несколько секунд и после нажатия сыграйте с вами t проблема!

+0

Вы начинаете темы, как если бы они были фейерверками – lelloman

+0

Хорошо, я использую это в пользовательском интерфейсе, но не работаю – Mohammad

ответ

1
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 
import android.view.View; 
import android.widget.ImageView; 
import android.widget.Toast; 

import java.io.IOException; 

public class MediaActivity extends AppCompatActivity implements SurfaceHolder.Callback { 
static SurfaceView videoSurface; 
static SurfaceHolder videoHolder; 
static MediaPlayer mediaPlayer; 
private ImageView imgPlay; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_media); 

    videoSurface = (SurfaceView) findViewById(R.id.surfView); 
    videoHolder = videoSurface.getHolder(); 
    videoHolder.addCallback(this); 
    imgPlay = (ImageView) findViewById(R.id.imgPLay); 

    final String link = "Your Link here"; 
    mediaPlayer = new MediaPlayer(); 
    try { 
     mediaPlayer.setDataSource(link); 
    } catch (IllegalArgumentException e) { 
     Toast.makeText(getApplicationContext(), "You might not set the URI correctly!", Toast.LENGTH_LONG).show(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    new Thread(new Runnable() { 

     @Override 
     public void run() { 

      imgPlay.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View arg0) { 
        try { 

         try { 
          mediaPlayer.prepare(); 
         } catch (IllegalStateException e) { 
          Toast.makeText(getApplicationContext(), "You might not set the URI correctly!", Toast.LENGTH_LONG).show(); 
         } catch (IOException e) { 
          Toast.makeText(getApplicationContext(), "You might not set the URI correctly!", Toast.LENGTH_LONG).show(); 
         } 
         mediaPlayer.start(); 

         mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
          @Override 
          public void onCompletion(MediaPlayer mp) { 
           Log.i("Completion Listener", "Song Complete"); 
           mp.stop(); 
           mp.reset(); 
           try { 
            mp.prepare(); 
           } catch (IOException e) { 
            e.printStackTrace(); 
           } 
           mp.start(); 
          } 
         }); 
         mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 

          public void onPrepared(MediaPlayer mp) { 
           mp.start(); 
          } 

         }); 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
       } 
      }); 
     } 
    }).start(); 
} 

@Override 
public void surfaceCreated(SurfaceHolder holder) { 

} 

@Override 
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 

} 

@Override 
public void surfaceDestroyed(SurfaceHolder holder) { 

} 
} 
Смежные вопросы