2016-10-07 57 views
0

私はexoplayerを使ってURLを通してストリーミングビデオを再生しています。チュートリアルには再生とストップビデオの2つのボタンが含まれています。このコードで必要なすべての機能を備えた通常のメディアコントローラをどのように追加してメディアプレーヤーアプリとしてメディアコントローラを表示することができるのか分かりません。androidのExoPlayerにメディアコントローラを追加する

マイコード:

public class mainactivity extends AppCompatActivity implements ManifestFetcher.ManifestCallback<HlsPlaylist>, 
    ExoPlayer.Listener,HlsSampleSource.EventListener, AudioManager.OnAudioFocusChangeListener { 

private SurfaceView surface; 
private ExoPlayer player; 
private PlayerControl playerControl; 
private String video_url; 
private Handler mainHandler; 
private AudioManager am; 
private String userAgent; 
private ManifestFetcher<HlsPlaylist> playlistFetcher; 
private static final int BUFFER_SEGMENT_SIZE = 64 * 1024; 
private static final int MAIN_BUFFER_SEGMENTS = 254; 
public static final int TYPE_VIDEO = 0; 
private TrackRenderer videoRenderer; 
private MediaCodecAudioTrackRenderer audioRenderer; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_mainactivity); 
    surface = (SurfaceView) findViewById(R.id.surface_view); // we import surface 

    player = ExoPlayer.Factory.newInstance(2); 
    playerControl = new PlayerControl(player); // we init player 
    video_url = "urlhere.m3u8" + 
      ""; //video url 
    am = (AudioManager) this.getApplicationContext().getSystemService(Context.AUDIO_SERVICE); // for requesting audio 
    mainHandler = new Handler(); //handler required for hls 
    userAgent = Util.getUserAgent(this, "MainActivity"); //useragent required for hls 
    HlsPlaylistParser parser = new HlsPlaylistParser(); // init HlsPlaylistParser 
    playlistFetcher = new ManifestFetcher<>(video_url, new DefaultUriDataSource(this, userAgent), 
      parser); // url goes here, useragent and parser 
    playlistFetcher.singleLoad(mainHandler.getLooper(), this); //with 'this' we'll implement ManifestFetcher.ManifestCallback<HlsPlaylist> 
    //listener with it will come two functions 
} 
//inside onSingleManifest we'll code to play hls 
@Override 
public void onSingleManifest(HlsPlaylist manifest) { 
    LoadControl loadControl = new DefaultLoadControl(new DefaultAllocator(BUFFER_SEGMENT_SIZE)); 
    DefaultBandwidthMeter bandwidthMeter = new DefaultBandwidthMeter(); 
    PtsTimestampAdjusterProvider timestampAdjusterProvider = new PtsTimestampAdjusterProvider(); 
    boolean haveSubtitles = false; 
    boolean haveAudios = false; 
    if (manifest instanceof HlsMasterPlaylist) { 
     HlsMasterPlaylist masterPlaylist = (HlsMasterPlaylist) manifest; 
     haveSubtitles = !masterPlaylist.subtitles.isEmpty(); 

    } 
    // Build the video/id3 renderers. 
    DataSource dataSource = new DefaultUriDataSource(this, bandwidthMeter, userAgent); 
    HlsChunkSource chunkSource = new HlsChunkSource(true /* isMaster */, dataSource, manifest, 
      DefaultHlsTrackSelector.newDefaultInstance(this), bandwidthMeter, 
      timestampAdjusterProvider, HlsChunkSource.ADAPTIVE_MODE_SPLICE); 
    HlsSampleSource sampleSource = new HlsSampleSource(chunkSource, loadControl, 
      MAIN_BUFFER_SEGMENTS * BUFFER_SEGMENT_SIZE, mainHandler, this, TYPE_VIDEO); 
    MediaCodecVideoTrackRenderer videoRenderer = new MediaCodecVideoTrackRenderer(this, sampleSource, 
      MediaCodecSelector.DEFAULT, MediaCodec.VIDEO_SCALING_MODE_SCALE_TO_FIT); 
    MediaCodecAudioTrackRenderer audioRenderer = new MediaCodecAudioTrackRenderer(sampleSource, 
      MediaCodecSelector.DEFAULT); 
    this.videoRenderer = videoRenderer; 
    this.audioRenderer = audioRenderer; 
    pushSurface(false); // here we pushsurface 
    player.prepare(videoRenderer,audioRenderer); //prepare 
    player.addListener(this); //add listener for the text field 
    if (requestFocus()) 
     player.setPlayWhenReady(true); 
} 
public boolean requestFocus() { 
    return AudioManager.AUDIOFOCUS_REQUEST_GRANTED == 
      am.requestAudioFocus(mainactivity.this, AudioManager.STREAM_MUSIC, 
        AudioManager.AUDIOFOCUS_GAIN); 
} 
private void pushSurface(boolean blockForSurfacePush) { 
    if (videoRenderer == null) {return;} 
    if (blockForSurfacePush) { 
     player.blockingSendMessage(
       videoRenderer, MediaCodecVideoTrackRenderer.MSG_SET_SURFACE, surface.getHolder().getSurface()); 
    } else { 
     player.sendMessage(
       videoRenderer, MediaCodecVideoTrackRenderer.MSG_SET_SURFACE, surface.getHolder().getSurface()); 
    } 
} 

@Override 
public void onSingleManifestError(IOException e) { 

} 



@Override 
public void onPlayWhenReadyCommitted() { 

} 

@Override 
public void onPlayerError(ExoPlaybackException error) { 

} 

@Override 
public void onLoadStarted(int sourceId, long length, int type, int trigger, Format format, long mediaStartTimeMs, long mediaEndTimeMs) { 

} 

@Override 
public void onLoadCompleted(int sourceId, long bytesLoaded, int type, int trigger, Format format, long mediaStartTimeMs, long mediaEndTimeMs, long elapsedRealtimeMs, long loadDurationMs) { 

} 

@Override 
public void onLoadCanceled(int sourceId, long bytesLoaded) { 

} 

@Override 
public void onLoadError(int sourceId, IOException e) { 

} 

@Override 
public void onUpstreamDiscarded(int sourceId, long mediaStartTimeMs, long mediaEndTimeMs) { 

} 

@Override 
public void onDownstreamFormatChanged(int sourceId, Format format, int trigger, long mediaTimeMs) { 

} 

@Override 
public void onAudioFocusChange(int focusChange) { 

} 


} 

答えて

0

あなたは/カスタムメディア再生コントロールを追加するには、ここ(http://google.github.io/ExoPlayer/doc/reference/)から参照する必要があります。

PlaybackControlViewは、以下のように、属性の設定(または対応するメソッドの呼び出し)、ビューのレイアウトファイルのオーバーライド、またはカスタムビューレイアウトファイルの指定によってカスタマイズできます。

関連する問題