【问题标题】:ExoPlayer: How to play http live stream?ExoPlayer:如何播放 http 直播?
【发布时间】:2016-06-26 15:58:23
【问题描述】:

我想为我的 Android 应用程序使用 ExoPlayer 库来播放直播视频。

我浏览了 exoplayer 网站和文档以及 Github 页面,但我对这些解释并不满意。

谁能给我一个提示,你如何通过 ExoPlayer 播放 http 直播视频?

提前致谢。

【问题讨论】:

    标签: android video-streaming exoplayer


    【解决方案1】:

    我可以立即在 ExoPlayer 中播放 LiveStream。

    只需在https://drive.google.com/file/d/0Byr1H33Pe7u-MW93UUpmMUhGTTQ/view 下载此示例并修改 Uri

    video_url = "http://cspan1-lh.akamaihd.net/i/cspan1_1@304727/index_1000_av-p.m3u8";
    

    注意:由于格式不正确,某些 m3u8 文件无法播放
    在此处查看支持的格式https://google.github.io/ExoPlayer/supported-formats.html

    【讨论】:

    • 这是视频文件流而不是实时流
    【解决方案2】:

    您可以使用使用 exoplayer 的 exomedia exomedia 库。这个库使用起来非常简单。 只需在您的 gradle 文件中添加以下依赖项

    repositories {
        jcenter();
    }
    
    dependencies {
        compile 'com.devbrackets.android:exomedia:3.0.5'
    }
    

    在你的布局文件中

    <com.devbrackets.android.exomedia.ui.widget.EMVideoView
        android:id="@+id/video_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        EMVideoView:useDefaultControls="true"/>
    

    现在您可以在主要活动中使用 EMVideoView 作为

    public class MainActivity extends AppCompatActivity implements OnPreparedListener{
        EMVideoView emPlayer;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            playVideo();
        }
    
    
        private void playVideo() {
            emPlayer = (EMVideoView)findViewById(R.id.video_view);
            emPlayer.setOnPreparedListener(this);
    
            emPlayer.setVideoURI(Uri.parse("your http url"));
        }
    
        @Override
        public void onPrepared() {
            emPlayer.start();
            Log.v("TAG","video is playing");
        }
    }
    

    【讨论】:

      【解决方案3】:

      要播放 HLS 文件或直播 (m3u8),您可以使用 google exoplayer。您只需指定要播放的流类型,例如 HLS 或 DASH 到 exoplayer。

      Intent mpdIntent = new Intent(MainActivity.this, PlayerActivity.class)
                          .setData(Uri.parse("http://devimages.apple.com/samplecode/adDemo/ad.m3u8"))
                          .putExtra(LiveTVPlayerActivity.CONTENT_ID_EXTRA, "My Channel Name")
                          .putExtra(LiveTVPlayerActivity.CONTENT_TYPE_EXTRA, Util.TYPE_HLS)
                          .putExtra(LiveTVPlayerActivity.PROVIDER_EXTRA, "");
                  startActivity(mpdIntent);
      

      我希望您使用来自github 的最新代码并指定要播放的流类型。

      【讨论】:

        【解决方案4】:

        您可以使用以下代码播放 .m3u8 文件:

        DataSource.Factory dataSourceFactory = new DefaultHttpDataSourceFactory(
                        Util.getUserAgent(context, "Exo Player"), null,
                        DefaultHttpDataSource.DEFAULT_CONNECT_TIMEOUT_MILLIS,
                        1800000,
                        true);
        
        HlsMediaSource mediaSource = new HlsMediaSource(Uri.parse(mediaUrl),dataSourceFactory, 1800000,new Handler(), null);
        
        videoPlayer.prepare(mediaSource);
        
        videoPlayer.setPlayWhenReady(true);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-09-23
          • 1970-01-01
          • 2018-02-25
          • 1970-01-01
          • 2012-01-12
          • 2016-03-30
          • 2015-04-23
          • 1970-01-01
          相关资源
          最近更新 更多