我的设置如下:
现在我正在构建一个显示这个流的应用程序,我目前正在使用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);如果能在这方面提供任何帮助,我将不胜感激。
发布于 2021-06-04 17:16:44
大多数在线视频流使用自适应比特率流(ABR)协议来传输视频,主要是HSL和DASH。
大多数媒体播放器,如ExoPlayer,都很好地支持这些协议,尽管它们是复杂和不断发展的协议,因此总是存在边缘情况。
许多视频会议应用程序都使用WebRTC,这是一种实时优化的协议--通常的方法是使用WebRTC客户端来处理这种流。
从流延迟的角度来看,这两种方法在非常的较高级别上的区别是:
任何媒体服务器都来自WebRTC端,尽管最近的版本支持HLS、/CMAF和低延迟破折号(如上所述,这些延迟仍然比WebRTC高)。
对于您的服务,如果您能够使用一个破折号或HLS流,您可能会发现这是一个更容易使用ExoPlayer的路径。例如,如果您查看演示应用程序,您将看到破折号和HLS流,但没有RTMP流。您可以轻松地扩展或修改演示应用程序来播放您自己的HLS或DASH流,这通常是一种简单的启动方式--查看资产/media.exolist.json中的示例材料,并添加您自己的URL:
但是,如果这是您喜欢的路由,ExoPlayer也应该通过扩展来支持RTMP --有一个特定的扩展允许这样做:
理论上,您只需将此依赖项添加到应用程序中:
如果您的应用程序使用DefaultDataSource或DefaultDataSourceFactory,添加对RTMP流的支持就像向RTMP扩展添加依赖项一样简单。
值得检查该存储库中的问题列表,以了解最近的问题和/或解决方法。
https://stackoverflow.com/questions/67776598
复制相似问题