1. 程式人生 > 其它 >直播原始碼APP,基於google ExoPlayer 簡單自定義播放介面

直播原始碼APP,基於google ExoPlayer 簡單自定義播放介面

直播原始碼APP,基於google ExoPlayer 簡單自定義播放介面實現的相關程式碼
1.直播原始碼AP基於google ExoPlayer播放m3u8,mp4等檔案

簡單自定義播放介面,新建一個Layout
 
佈局檔案命名為exo_playback_control_view,控制元件的id不能隨便起,
 
要與exoPlayer原來PlaybackControlView的佈局控制元件id,名稱一致,
 
佈局名稱不一定是exo_playback_control_view,不過需要在SimpleExoPlayerView控制元件中新增一個:
 
app:controller_layout_id
="@layout/id" ,指定control的佈局;如:

2.如果需要詳細的自定義播放介面,需要直播原始碼AP重寫SimpleExoPlayerView,和PlaybackControlView。

3.重要的類

/**
 * 監聽播放狀態
 */
 
private final class ComponentListener implements ExoPlayer.EventListener {
 
    @Override
    public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
    
        
switch (playbackState) { /** * The player is able to immediately /*play from its current position. The player will be playing if * {@link #getPlayWhenReady()} is true, and paused otherwise. */ case Player.STATE_READY://
showLoading(false); play(playWhenReady); break; /** * The player has finished playing the media. */ case Player.STATE_ENDED: showLoading(false); playDefault(); break; /** * The player does not have any media to play. */ case Player.STATE_IDLE: showLoading(true); break; /** * The player is not able to /*immediately play from its current position. This state typically * occurs when more data needs to be loaded. */ case Player.STATE_BUFFERING: showLoading(true); break; } } @Override public void onRepeatModeChanged(int repeatMode) { // Do nothing. } @Override public void onPositionDiscontinuity() { // Do nothing. } @Override public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) { // Do nothing. } @Override public void onTimelineChanged(Timeline timeline, Object manifest) { // Do nothing. } @Override public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) { // Do nothing. } @Override public void onLoadingChanged(boolean isLoading) { // Do nothing. } @Override public void onPlayerError(ExoPlaybackException error) { // Do nothing. } }

4.重要的方法:

/**
 * 根據不同的Uri檔案,生成不同的MediaSource
 *
 * @param uri
 * @param overrideExtension
 * @return
 */
 
private MediaSource buildMediaSource(Uri uri, String overrideExtension) {
    int type = Util.inferContentType(!TextUtils.isEmpty(overrideExtension) ? 
    "." + overrideExtension
            : uri.getLastPathSegment());
    switch (type) {
        case C.TYPE_SS:
            return new SsMediaSource(uri, buildDataSourceFactory(false),
                    new DefaultSsChunkSource.Factory(mediaDataSourceFactory), null, null);
        case C.TYPE_DASH:
            return new DashMediaSource(uri, buildDataSourceFactory(false),
                    new DefaultDashChunkSource.Factory(mediaDataSourceFactory), null, null);
        case C.TYPE_HLS:
            return new HlsMediaSource(uri, mediaDataSourceFactory, null, null);
        case C.TYPE_OTHER:
            return new ExtractorMediaSource(uri, mediaDataSourceFactory, new DefaultExtractorsFactory(),
                    null, null);
        default: {
            throw new IllegalStateException("Unsupported type: " + type);
        }
    }
}

以上就是直播原始碼APP,基於google ExoPlayer 簡單自定義播放介面實現的相關程式碼, 更多內容歡迎關注之後的文章