首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用exoplayer播放m3u8,屏幕保持黑屏

ExoPlayer是一个功能强大的开源媒体播放器库,可以用于播放各种媒体格式,包括M3U8。在使用ExoPlayer播放M3U8时,如果屏幕保持黑屏,可能是由于以下几个原因:

  1. M3U8文件路径错误:确保提供的M3U8文件路径是正确的,并且可以从网络或本地访问到。可以使用网络地址或本地文件路径来加载M3U8文件。
  2. 缺少网络权限:如果播放的M3U8文件位于网络上,确保在AndroidManifest.xml文件中添加了网络权限。可以在文件中添加以下权限:
代码语言:txt
复制
<uses-permission android:name="android.permission.INTERNET" />
  1. 缺少适当的渲染器:ExoPlayer需要适当的渲染器来解码和渲染媒体内容。对于M3U8文件,需要使用HLS(HTTP Live Streaming)渲染器。确保在创建ExoPlayer实例时,添加了HLS渲染器:
代码语言:txt
复制
DefaultRenderersFactory renderersFactory = new DefaultRenderersFactory(context);
renderersFactory.setExtensionRendererMode(DefaultRenderersFactory.EXTENSION_RENDERER_MODE_PREFER);
SimpleExoPlayer player = new SimpleExoPlayer.Builder(context, renderersFactory).build();
  1. 缺少播放器视图:确保在布局文件中添加了ExoPlayerView来显示播放器的视频内容。可以在XML布局文件中添加以下代码:
代码语言:txt
复制
<com.google.android.exoplayer2.ui.PlayerView
    android:id="@+id/player_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
  1. 设置播放器数据源:在代码中设置ExoPlayer的数据源,即M3U8文件的URL。可以使用以下代码:
代码语言:txt
复制
String m3u8Url = "http://example.com/path/to/your/m3u8file.m3u8";
Uri uri = Uri.parse(m3u8Url);
MediaSource mediaSource = new HlsMediaSource.Factory(dataSourceFactory).createMediaSource(uri);
player.prepare(mediaSource);

请注意,上述代码中的dataSourceFactory需要根据实际情况进行创建,以便提供正确的数据源。

以上是使用ExoPlayer播放M3U8文件时可能导致屏幕保持黑屏的一些常见原因和解决方法。希望对你有所帮助!如果你想了解更多关于ExoPlayer的信息,可以访问腾讯云的ExoPlayer产品介绍页面:ExoPlayer产品介绍

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

FFmpeg开发笔记(三十八)APP如何访问SRS推流的RTMP直播地址

在手机上可通过APP或者小程序播放RTMP直播流,其中小程序使用video标签播放RTMP链接,APP除了借助FFmpeg库处理之外,还能使用ExoPlayer播放RTMP链接。...引入ExoPlayer播放RTMP直播流的集成步骤说明如下。...二、修改播放代码支持RTMP流ExoPlayer的详细用法参见《Android Studio开发实战:从零基础到App上线(第3版)》一书第14章的“14.3.3  新型播放ExoPlayer”,其中与...setUri(Uri.parse(url)).build();    // 基于工厂对象和媒体对象创建媒体来源    MediaSource videoSource;    if (url.endsWith("m3u8...三、调整SRS的配置文件通过小程序或者ExoPlayer播放RTMP直播流时,可能出现播放界面黑屏,但有声音传出的情况。这是因为SRS默认没有缓存关键帧,使得拉流一开始没找到关键帧就黑屏了。

13510

音视频领域火爆的开源项目

;还可以解决直播流过程中切换码流导致的花屏和黑屏问题。...https://github.com/google/ExoPlayer ExoPlayer是google开源的一个播放器库,是基于MediaPlayer的一个扩展,核心原理是分离音频和视频流,然后基于...MediaCodec硬解码解析数据,目前的稳定性比较好,而且效率较高;如果你的视频源本身比较简单或者播放过程中不涉及码流的切换等等,建议还是选择ExoPlayer播放效果更佳; 9.MediaSDK...https://github.com/JeffMony/MediaSDK 这是本人开发的一个视频边下边播的工具; 封装了ijkplayer、exoplayer、mediaplayer 三种播放器; 实现了视频下载队列化处理...,m3u8和非m3u8视频下载; 实现m3u8、非m3u8视频边下边播功能; 本地代理实现边下边播功能; 10.AndroidVideoCache https://github.com/danikula

2.1K10
  • 一个ExoPlayer原生播放问题引起的思考

    问题背景 我们在使用ExoPlayer播放视频的视频发现一种特殊的M3U8视频,播放总是失败。 而且报如下的错误: ExoPlayerImplInternal: Source error....的原生问题,我们赶紧找到ExoPlayer的源码: https://github.com/google/ExoPlayer/blob/release-v2/library/extractor/src/main...这次ExoPlayer发生播放这样视频失败的原因,就是因为视频源没有遵守TS Packet大小为188字节的规则,这样的错误很尴尬,它违反了标准,但是它前188字节是标准的TS数据。...我们应该怎么改 我们遇到这样的播放失败,只能采用两种办法了? 向M3U8的提供方提意见,最好修改一下TS内部格式,让其符合标准。 定制化修改ExoPlayer源码,适配这种异常的类型。...那就只好播放器去适配,播放器将这个校验去掉有没有问题? 从对TS格式分析来看,这样的修改不太完美,但是从播放器的兜底处理来看,这样的处理基本没有风险。因为最坏的结果就是播放失败。

    3.4K20

    Android主流播放器比较

    本篇文章主要介绍 Android 原生 VideoView,Google 开源视频播放框架 ExoPlayer,Vitamio 视频播放框架以及 Bilibili 开源视频播放框架 ijkplayer...不足: 原生VideoView只能播放mp4和3gp两种格式; seekTo定位不准,只能定位到关键帧; VideoView不保存视频播放状态,需自行处理; VideoView加载网络视频时,常见黑屏情况...ExoPlayer ExoPlayer 开源项目包含了 library 和 示例: ExoPlayer library - 这部分是核心的库 Demo app - 这部分是演示怎么使用 ExoPlayer...该类维护了播放器的全局状态 。比如如何获取媒体数据,如何缓冲以及是怎样的编码格式。...优点: 强大,支持超多格式视频和网络视频播放使用简单。调用非常简单,方便使用。 IjkPlayer 优点: ijkplayer 最大的优点就是可以根据需要编译需要的解码器。

    2.9K20

    ExoPlayer 多路流切换

    尤其是TV,绝大部分成本在屏幕上,上个好点的CPU都很难;第二个原因如果使用软解码器+硬解码器,软解码器性能好的时候没有问题,但是性能差可能卡顿问题会相当多。...这种播放器只能使用重启播放器方式实现码流切换。ExoPlayer作为开源播放器,具备很好的可扩展性,既支持DASH/HLS切换,同时也支持解码器重启方式的切换。...三、ExoPlayer 如何实现多路流切换? 这里我们不说DASH、HLS部分,这部分其实有很多资料,ExoPlayer本身也是支持的。...3.3 MediaPlayer是否支持多路流 不支持,也没法切换 3.4 ExoPlayer如何将多路流输入到播放器中?...对于视频渲染器,ExoPlayer为了避免黑屏,内部会强制渲染首帧和部分关键帧。

    1.1K31

    FFmpeg开发笔记(五十二)移动端的国产视频播放器GSYVideoPlayer

    ​GSYVideoPlayer是一个国产的移动端视频播放器,它采用了IJKPlayer、Media3(EXOPlayer)、MediaPlayer、AliPlayer等四种播放器内核,支持弹幕、滤镜、广告等多项功能...三、在App代码中使用播放器GSYVideoPlayer提供了三种播放器控件,分别是NormalGSYVideoPlayer、GSYADVideoPlayer和ListGSYVideoPlayer,它们在...GSYADVideoPlayerGSYADVideoPlayer用来播放视频文件的片头广告,注意该控件要和NormalGSYVideoPlayer搭配使用。...R.id.video_player);    // 设置旋转    orientationUtils = new OrientationUtils(this, video_player);    // 设置全屏按键功能,这是使用的是选择屏幕...:因为NormalGSYVideoPlayer的播放内核基于IJKPlayer、EXOPlayer和AliPlayer,默认就支持HLS、RTMP等直播链接,所以无需改动代码,只要把视频地址换成以m3u8

    14810

    看点视频秒开优化:解码器复用优化方案篇

    ,避免耗时带来的黑屏等问题。...总而言之,基于短视频切换频繁的特点,直接使用ExoPlayer方案会存在以下困难: 无法在player之间复用,由于有预加载等优化手段,短视频场景一般不同视频对应不同的player,与方案冲突。...以顺序播放A、B、C视频为例,一个完善的复用流程需要下面一些步骤: 当播放器A、B停止时,需要保持其对应的解码器运行状态(可以对照前文MediaCodec的生命周期图,只有Executing状态才能正常解码...现象检测是指检测视频播放中出现的问题,比如场景的黑屏、画面卡住等,这里主要是利用截屏检测思路。对于更深层次的原因,我们对常规解码API进行梳理,并自定义了错误码,方便分析问题。 ?...解决痛点: 跨播放器复用,全局选择解码器,支持业务配置,几乎支持所有基于MediaCodec的播放器。 2.6.2 如何接入 其他播放器接入:如果没有使用中台播放器,我们也可以支持其他播放器的接入。

    5.8K126

    Android ExoPlayer 音画同步代码分析

    -185ms & 小于 90ms 用户不能接受的偏差 用户不可接受:小于-185ms & 大于 90ms 1.3 音画同步的核心逻辑 主流音画同步以Audio Master 或者独立时钟的方式,音频保持匀速播放...前者作为Audio Master方式为视频提供音频播放时间,后者使用自然时间作为兜底的时钟,为各种Render提供播放时间。...3.4 音频播放位置如何同步到视频 ?...在有些业务中的音频输出和ExoPlayer是分开的,我们要考虑如何通过音频播放器去同步ExoPlayer中的视频渲染器,但有ExoPlayer具备高度的可扩展性,我们可以通过自定时钟的方式去同步ExoPlayer...图:音画同步主要调用流程 五、如何在业务中使用自定义的MediaClock呢 ? ExoPlayer 具备很强的可扩展性,但是如果通过传参数,是很难将自定义的MediaClock传入进去的。

    1.3K20

    可折叠设备的桌面模式

    展开您的视频播放体验 可折叠设备向用户们提供了使用他们的手机做更多事情的可能性,包括*桌面模式**等创新,也就是当手机平放时,铰链处于水平位置,同时折叠屏幕处于部分打开的状态。...这是一个简单的媒体播放器案例,它会自动调节尺寸以避免让折叠处出现在画面中间,并且调整播放控制组件的位置,从屏幕完全展开时嵌入画面中,变为当屏幕部分折叠时显示为单独的面板。...前期准备 示例应用使用Exoplayer,这是 Android 平台上非常流行的开源媒体播放库。...让您的应用感知屏幕折叠 现在进入最重要的部分: 如何获知您的手机何时进入了桌面模式,并获取到折叠处的位置呢?...更多资源 Exoplayer Codelab: 用 Exoplayer 播放视频流 桌面模式实例应用 为可折叠设备而设计 为可折叠设备构建应用 Jetpack WindowManager 使用 MotionLayout

    2.4K30

    01.视频播放器框架介绍

    视频播放器介绍文档 目录介绍 01.该视频播放器介绍 02.视频播放器功能 03.视频播放器架构说明 04.视频播放如何使用 05.播放器详细Api文档 06.播放器封装思路 07.播放器示例展示图...,ExoPlayer,Rtc,原生MediaPlayer等的封装播放器,支持多种格式视频播放 B.1.3 可以设置是否记录播放位置,设置播放速度,设置屏幕比例 B.1.4 支持滑动改变音量【屏幕右边】,...也就是适合大多数业务场景 视频分层 播放器内核 可以切换ExoPlayer、MediaPlayer,IjkPlayer,声网视频播放器,这里使用工厂模式Factory + AbstractVideoPlayer...9.1 如何兼容不同内核播放器 提问:针对不同内核播放器,比如谷歌的ExoPlayer,B站的IjkPlayer,还有原生的MediaPlayer,有些api不一样,那使用的时候如何统一api呢?...如何使用,分为三步,具体操作如下所示 1.先调用具体工厂对象中的方法createPlayer方法;2.根据传入产品类型参数获得具体的产品对象;3.返回产品对象并使用

    2.6K51

    ExoPlayer漫谈之解码器复用

    播放器性能的极致优化,就是要发现播放流程中一点一滴的耗时,然后分析这些耗时,并提出有效的方式解决这些耗时.了解过ExoPlayer播放器的同学们都知道ExoPlayer的解码是依赖Android系统提供的原生的解码模块...目前ExoPlayer最新的版本是2.12.2, 而且保持着凉州一个小版本, 两个月一个大版本的更新节奏, google的工作效率还是比较高的....在2.10之前的版本中,只要视频渲染器保持在启用和启动状态,ExoPlayer就会尽可能重复使用视频解码器。特别是,这意味着从播放列表中的一种媒体过渡到另一种媒体时,视频解码器将被重用。...重要的是,重新准备播放器以播放其他MediaSource会导致这种类型的状态转换,因此在这种情况下不会重复使用解码器。...保证你播放的视频的格式是相同的,例如短视频信息流都是H264/AAC编码格式 如果使用ExoPlayer播放器,最好使用同一个ExoPlayer实例,因为codec实例是封装在ExoPlayer实例中的

    2.2K31

    ExoPlayer 漫谈之解码器复用

    播放器性能的极致优化,就是要发现播放流程中一点一滴的耗时,然后分析这些耗时,并提出有效的方式解决这些耗时.了解过ExoPlayer播放器的同学们都知道ExoPlayer的解码是依赖Android系统提供的原生的解码模块...目前ExoPlayer最新的版本是2.12.2, 而且保持着凉州一个小版本, 两个月一个大版本的更新节奏, google的工作效率还是比较高的....,ExoPlayer就会尽可能重复使用视频解码器。...重要的是,重新准备播放器以播放其他MediaSource会导致这种类型的状态转换,因此在这种情况下不会重复使用解码器。...保证你播放的视频的格式是相同的,例如短视频信息流都是H264/AAC编码格式 如果使用ExoPlayer播放器,最好使用同一个ExoPlayer实例,因为codec实例是封装在ExoPlayer实例中的

    2.6K60

    什么是HLS(HTTP Live Streaming)?

    一个视频可以被分割成多个视频切片,这些切片的传送位置和顺序在一组被称为播放列表的XML文件中,该文件以文件扩展名m3u8结尾。人们可以使用兼容了HLS的播放播放视频。...审校者注:原文说HLS使用了XML文件,是一个错误的说法,为了保留和原文一致,翻译并未去纠正这个错误,实际上,HLS 使用的是M3U8 文件,它是基于M3U扩展的UTF-8文本文件。...播放器/客户端:任何理解HLS协议和能够播放HLS流媒体(音频和视频)的播放器。播放从下载播放列表开始,然后使用播放列表连续下载视频切片,再渲染到屏幕。...谷歌的Exoplayer也可以原生支持HLS播放。...希望你们能够理解HLS协议的工作原理以及使用HLS传输视频时都需要什么。在后续的文章中,我会告诉你如何使用FFmpeg创建HLS视频流,并将其传输到全世界!

    3.6K31

    MPD格式VS M3U8格式:哪种更适合移动端的流媒体播放

    随着移动设备用户数量的不断增加,流媒体播放在移动设备上的需求也越来越高。然而,移动设备上使用的流媒体播放器支持的格式有限,其中MPD格式和M3U8格式是两种常用的格式。...那么,MPD格式和M3U8格式中哪种更适合用于移动端流媒体播放器呢? 在移动端,M3U8格式是首选。这是因为iPhone和iPad默认使用M3U8格式来播放HLS流。...稳定性高:M3U8格式在网络不稳定的情况下也能保持流畅播放。 易于编写:M3U8格式采用纯文本格式进行编码,编写和修改方便。...在流媒体行业中,不同的设备和服务商可能需要使用不同的视频格式。因此,将一种格式转换为另一种格式变得非常重要。在本文中,我们将介绍如何将MPD格式转换为M3U8格式。...如何M3U8格式转换为MPD格式? M3U8格式和MPD格式都是流媒体播放器所支持的常见格式之一。在某些情况下,您可能需要将M3U8格式转换为MPD格式以便于移动端播放器的兼容性或需求。

    2.2K01

    【错误记录】Android 编译报错 ( Could not resolve com.google.android.exoplayer:exoplayer:r | 依赖下载失败通用解决方案总结 )

    /exoplayer/r1.5.11/exoplayer-r1.5.11.pom'...二、解决方案 Gradle 下载 依赖库 出现问题 , 按照下面的步骤 进行操作检查 ; 1、检查依赖库是否存在 ExoPlayer 是 Google 提供的一个在 Android 平台上的媒体播放器..., 它支持多种媒体格式和流媒体协议 ; ijkplayer-exo 是 BliBli 对 Google 的 ExoPlayer 播放器的封装 , 通过封装 ExoPlayer,ijkplayer-exo...使得开发者能够在使用 ijkplayer 框架的同时,也能利用 ExoPlayer 的特性和功能 ; 通过在网络上进行搜索 , 确定 com.google.android.exoplayer:exoplayer...dl.bintray.com/bilibili/maven/" } } } 4、检查网络 检查网络 , 首先 , 确保基本的网络联通 , 可以正常访问网络 ; 然后 , 再看 Maven 仓库的地址是否被屏幕

    17910

    音视频开发之旅(45)-ExoPlayer 音频播放器实践(一)

    更详细的介绍请参考官方文档或者Android 媒体播放框架MediaSession分析与实践 二、 简单实践 下面我们看下如何使用MediaSession框架实现简单的音频播放 2.1 Server端实现...播放器内部触发 比如: 播放结束、自动切歌曲等) //该如何通知给ui业务层呐??...播放器内部触发 比如: 播放结束、自动切歌曲等) //该如何通知给ui业务层呐??...另外播放管理相关的没有分离,播放队列的维护,播放状态的管理等等没有统一的管理,不利于扩展扩展更换播放器等。 下一篇我们来分析umap的实现,它是如何进行架构的,如何解决上面的问题的。...但是一个音频播放器以下功能也是基本功能:边缓存变播放播放队列、淡入淡出、音频焦点、后台播放,该如何比较好的实现呐?

    5.2K00
    领券