在 android 应用程序上播放来自媒体服务器的直播流

Playing a Live stream from media server on android application

我的设置如下:

现在我正在构建一个将显示此流的应用程序并且我目前正在使用 ExoPlayer,但是我很难让它同时适用于 RTMP 和 HLS,我阅读了一些我可以在我的应用程序中嵌入网络播放器会更容易吗?这是我的 ExoPlayer 代码:

 //RTMP Url
    String url = "rtmp://192.168.1.244/WebRTCApp/379358104902020985845622";
    
    BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
    TrackSelection.Factory videoTrackSelectionFactory =
            new AdaptiveTrackSelection.Factory();
    TrackSelector trackSelector =
            new DefaultTrackSelector(videoTrackSelectionFactory);
    SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(this, trackSelector);

    PlayerView playerView = findViewById(R.id.simple_player);

    playerView.setPlayer(player);

    /*
      Create RTMP Data Source
     */

    RtmpDataSourceFactory rtmpDataSourceFactory = new RtmpDataSourceFactory();


    MediaSource videoSource = new ExtractorMediaSource.Factory(rtmpDataSourceFactory)
            .createMediaSource(Uri.parse(url));

    player.prepare(videoSource);

    player.setPlayWhenReady(true);

如有任何帮助,我们将不胜感激。

大多数在线视频流使用自适应比特率流 (ABR) 协议来传输视频,目前主要是 HSL 和 DASH。

大多数媒体播放器(如 ExoPlayer)都很好地支持这些协议,尽管它们是复杂且不断发展的协议,因此总是存在边缘情况。

许多视频会议应用程序使用 WebRTC,这是一种实时优化的协议 - 通常的方法是为此类流使用 WebRTC 客户端。

从流式传输延迟的角度来看,这两种方法之间的差异在 非常 高水平上是:

  • ABR 协议优先考虑质量并避免中断并缓冲足够的视频以尝试保证不间断播放。它们通常针对电影和直播视频流服务。即使对于低延迟实施,延迟也以数秒甚至更多为单位进行测量。

  • WebRTC 优先考虑延迟并在必要时牺牲质量。它通常针对实时敏感的应用程序,如视频会议,在这些应用程序中,重要的是不要落后于讨论,即使这意味着暂时的视频故障甚至短暂的视频中断。延迟通常以亚秒为单位。

任何媒体服务器都来自 WebRTC 端,尽管最新版本支持 HLS /CMAF 和低延迟 DASH(如上所述,这些仍然比 WebRTC 一般延迟更高)。

对于您的服务,如果您能够使用 DASH 或 HLS 流,您可能会发现使用 ExoPlayer 更容易。例如,如果您查看演示应用程序,您将看到 DASH 和 HLS 流,但看不到 RTMP 流。您可以轻松地扩展或修改演示应用程序以播放您自己的 HLS 或 DASH 流,这通常是一种简单的开始方式 - 查看 assets/media.exolist.json 中的示例 material 和添加您自己的 URL:

但是,如果这是您的首选路线,ExoPlayer 还应该通过扩展程序支持 RTMP - 有一个特定的扩展程序允许这样做:

理论上,您只需将此依赖项添加到您的应用程序中:

if your application is using DefaultDataSource or DefaultDataSourceFactory, adding support for RTMP streams is as simple as adding a dependency to the RTMP extension

值得检查此存储库中的问题列表以了解任何最近的问题 and/or 解决方法。