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

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

问题背景 我们在使用ExoPlayer播放视频的视频发现一种特殊的M3U8视频,播放总是失败。 而且报如下的错误: ExoPlayerImplInternal: Source error....ExoPlayer的原生问题,我们赶紧找到ExoPlayer的源码: https://github.com/google/ExoPlayer/blob/release-v2/library/extractor...原生报错的地方找到了,但是接下来我们还需要解决下面几个问题: TS格式是怎么样的? ExoPlayer为什么要这样修改? 正确的修改方式是什么样的? TS格式解析 ---- ?...正常的TS Packet是188字节,其层次结果如下: 名称 位数 备注 sync_byte 8b 同步字节,固定为0x47 transport_error_indicator 1b 传输错误指示符,表明在...这样的判断在标准上而言是没有什么问题的。 我们应该怎么改 我们遇到这样的播放失败,只能采用两种办法了? 向M3U8的提供方提意见,最好修改一下TS内部格式,让其符合标准。

3.7K20

转:鱼群算法在文档管理系统中可以起到怎样的作用

鱼群算法是一种基于自然界中鱼群行为的计算机算法,可以用于优化问题的解决。在文档管理系统中,鱼群算法可以用来管理和优化网络资源的分配和使用。...通过鱼群算法,可以将网络用户分为不同的群体,并对不同群体的上网行为进行分类和管理。例如,可以对不同的用户进行流量控制,以确保网络带宽的平稳和公平分配。...在实际应用中,鱼群算法可以与其他网络管理技术相结合,如QoS(服务质量)、流量控制等,以实现网络资源的高效利用和管理。...鱼群算法在文档管理系统中的应用可以具体表现为以下例子:假设某个企业的网络资源被不同部门和员工所共用,但由于每个部门和员工的上网行为不同,导致网络带宽分配不均衡,有些员工可能会经常占用大量网络资源,导致其他员工的上网速度受到影响...例如,可以将管理部门和销售部门的员工分为两个群体,对于管理部门的员工,可以对其进行流量限制,以保证网络带宽的公平分配;而对于销售部门的员工,可以对其进行流量优先调度,以确保其业务需要的网络带宽。

19750
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    CC++ Search Extension —— 一款可以快速在地址栏搜索 CC++ 文档的浏览器插件

    C/C++ Search Extension是一款可以在浏览器地址栏快速、方便、高效地搜索 C/C++ 文档的浏览器插件,支持 Chrome/Firefox/Edge 。...Extension Golang: Go Search Extension 下载地址: Chrome Web Store Firefox Microsoft Edge 主要功能: 搜索 C/C++ 标准库文档...可通过关键词搜索 cppreference.com 上的 C/C++标准库文档。...支持离线模式 内置命令 跟 Rust 版本的插件一样,C++ 版本也提供了丰富的命令,比如: :help - 查看使用帮助 :header - 查看 C++所有的头文件库 :history - 查看本地的搜索记录...通过 tab 可以选择结果,回车可跳转到文档详细说明页面。 使用方法: 在浏览器搜索栏里,输入关键字 cc 加空格,再输入关键字即可看到相关的结果,选中结果敲击回车可跳转到搜索结果页面。

    1.1K00

    ExoPlayer 多路流切换

    二、常见的切码流方案 DASH/HLS 切换: 这种切换相对来说是最友好的方式,可以在不中断播放的情况下,在下一个媒体片段处实现平滑切换,这种方式也是很多应用最常用的方案,无论是开发成本和用户体验也是最优的方案之一...相对来说,这种方案实现起来更加复杂,其次很多IOT设备对解码器数量有严格的限制,有的电视机上某种解码器只支持单个实例甚至更少的实例,多一个可能出现要么新的播放器播不起来,要么旧的黑屏或者Crash。...双解码器切换: 上面说到,双播放器切换会受限于设备解码器数量限制,那是否可以在同一播放器中使用两种解码器?...理论上说是可以的,但是却很少有人这样做,第一个原因是,如果要使用2种硬解码器,必然受到硬件制约,因为硬解码器在很多设备上作为DSP芯片的一部分,设备厂商不可能配置2个以上DSP芯片,特别对于IOT设备,...而ExoPlayer本质上是支持多路流的,可以同时支持多个Mp4、多个音频文件、多种语言版本的歌词。

    1.6K31

    音视频开发之旅(44)-ExoPlayer介绍及简单使用

    ExoPlayer没有设定可以播放的媒体类型、存储方式以及渲染方式,也没有直接实现加载和播放。而是在播放器被创建或者准备播放时将这些工作代理给注册的组件来实现。...) ExoPlayer为这些组件提供了默认的实现,如果需要定制可以自定义组件来扩展实现。...20210114154311200.png 通过ExoPlayer的架构图,我们也可以看到其组件模块化的设计,这个架构设计值得学习,也是好的组件/SDK的一个重要要求。...相比MediaPlayer,ExoPlayer的状态少了些,也更容易使用区分,不像MediaPlayer在没有prepared之前都不可以进行播放相关操作,ExoPlayer很多listener以及isplaying...,可以根据项目需要进行选择对应的模块,也可以全部包含。

    8.4K00

    选择最新 Chromium,支持 H264 H265

    联想到 Chromium 文档中有提到专有解码器的,原话为: 此外,您可能希望包括对专有音频和视频编解码器的支持,就像 Google 的 WebView 所做的那样。...之前看 Media 模块的文档,文档讲到可通过 chrome://media-internals 可以查看媒体解码信息以及相关日志。...这样持续了三天,一点没找到头绪。再 google 一把,有人说从 Chromium 105 之后的版本开始,对于 H265 的支持比较完善。那编译一个最新的版本试试吧,看看具体是什么情况。...exoplayer 的项目地址: https://github.com/google/ExoPlayer 构建和安装 exoplayer 后,可以使用命令行来播放指定的视频: $ adb shell am...确认一下,在 MediaCodec 这一层面上时候支持,可以更好的确认问题是在 chromium 还是在 Android 系统层。

    1.3K30

    ExoPlayer 漫谈之解码器复用

    播放器性能的极致优化,就是要发现播放流程中一点一滴的耗时,然后分析这些耗时,并提出有效的方式解决这些耗时.了解过ExoPlayer播放器的同学们都知道ExoPlayer的解码是依赖Android系统提供的原生的解码模块...enabled状态, 在此状态下,渲染器可以播放媒体流,并在可能的情况下(例如,在读取流的格式之后)获取解码器实例。...之前的版本中,只要视频渲染器保持在启用和启动状态,ExoPlayer就会尽可能重复使用视频解码器。...一句话, 想复用codec实例,不能调用stop方法,不能将codec置为disabled状态 ExoPlayer 2.10版本之后的codec复用 2.10版本可以保证在播放新的视频源的时候复用播放器解码器资源...stop的时候都不会被释放,当然这是在复用解码器资源的场景下使用的,使用的时候要小心一些,在最终的时候还是要记得释放资源的,不然会出现问题.

    2.8K60

    ExoPlayer播放音视频的使用介绍

    例如,可以注入自定义LoadControl来更改播放器的缓冲策略,可以在Android设备上将自定义Renderer注入到Android不支持的视频编解码器。...可以使用setTextOutput和setId3Output在播放过程中接收字幕和ID3元数据输出。 (4)准备播放器 在ExoPlayer中,每个media都由MediaSource表示。...这可以通过调用ExoPlayer.release完成。 五、媒体资源(MediaSource)的使用 在ExoPlayer中,每个media都由 MediaSource 表示。...在 main demo app 的PlayerActivity中可以找到如何实例化所有四个示例。 MediaSource实例不适用于重新使用的情况。...六、播放器事件 在播放过程中,您的应用程序可以侦听由ExoPlayer生成的 显示播放器整体状态 的事件。 这些事件对于更新用户界面组件(如播放控件)非常有用。

    6.9K20

    解决 Android PLMediaPlayer 视频播放异常小结

    和尚最近一直在处理一个比较纠结的问题,项目中接入了七牛云视频SDK PLMediaPlayer,七牛云视频SDK是很强大的一款三方视频库。...; 和尚大致找到了问题方向,大概是设置的解码方式有问题; 和尚用的也是 Auto 方式,但是和尚不确认硬解码解码失败的分割点在哪里;于是把 Auto 方式 AVOptions.MEDIA_CODEC_AUTO....mp4 都可以播放,但是和尚又遇到了一个新的问题:有一个视频播放卡顿,不是网络影响,像一帧一帧的卡顿;但是在官网 Demo 中测试一切正常,然后两边对比,参数都一致,很奇怪; 偶然机会同事说会不会跟...---- Tips: 和尚在测试过程中偶遇 ExoPlayer 也是一款很强大的视频播放器,推荐一下!...,性能较高,解码时间短;但是解码支持的格式相对较少; 【Auto 解码】七牛云的文档说明,在硬解码失败的情况下会自动更换为软解码。

    1.7K21

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

    在设计音乐播放器APP架构时,有几种常用的做法 方案一 注册Service,用于数据设置、音乐控制,在Service中自定义播放器的一些状态值和回调接口用于流程控制 通过广播、aidl等实现和页面层逻辑的通信...也包含媒体播放器实例(比如我们本篇实践的ExoPlayer) MediaSession 一般在MediaBrowserService的onCreate中创建,通过MediaSession.CallBack...更详细的介绍请参考官方文档或者Android 媒体播放框架MediaSession分析与实践 二、 简单实践 下面我们看下如何使用MediaSession框架实现简单的音频播放 2.1 Server端实现...Activity直接和Service通过MediaSession框架中的各种回调进行通信,播放器ExoPlayer封装在Service内,数据的获取也在Service中。...在具体实践之前我们先来学习分析下uamp这个google开源的音频播放器是如何架构的,看看在数据源设置以及播放管理方面是否可以学习借鉴。

    5.7K00

    【错误记录】Android 编译报错 ( Could not resolve xxx | 手动下载依赖库并进行本地配置 Gradle 依赖的解决方案 | 构建 Maven 依赖下载路径 )

    Maven 仓库就是对应的地址 ; 使用 google() 函数配置的 Maven 仓库地址 是 https://maven.google.com/ , 可以通过 https://maven.google.com...依赖库 ; 下载完成后的文件如下 : 建议使用 wget 或者 curl 命令行工具下载 ; 3、检查依赖库是否存在 通过上述 Maven 仓库依赖库地址拼接 , 就可以知道 该 依赖库是否在 Maven...仓库中存在 , 如果存在就可以下载 , 如果不存在 , 则下载失败 ; 到 Maven 仓库中 对应的地址 , 查找对应的依赖库 ; 如 : Maven 中央仓库 , 使用 mavenCentral(.../maven2/ , 进入该页面后 , 显示的内容如下 : 按照路径查找 com.google.android.exoplayer:exoplayer:r1.5.11 依赖库 ; 找到 https:.../maven2/ 中没有 com.google.android.exoplayer:exoplayer 依赖库 ; 4、在 Gradle 中配置本地依赖 下载到本地后 , 将 下载的 依赖库拷贝到本地路径中

    1K10

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

    二、解决方案 Gradle 下载 依赖库 出现问题 , 按照下面的步骤 进行操作检查 ; 1、检查依赖库是否存在 ExoPlayer 是 Google 提供的一个在 Android 平台上的媒体播放器..., 它支持多种媒体格式和流媒体协议 ; ijkplayer-exo 是 BliBli 对 Google 的 ExoPlayer 播放器的封装 , 通过封装 ExoPlayer,ijkplayer-exo...使得开发者能够在使用 ijkplayer 框架的同时,也能利用 ExoPlayer 的特性和功能 ; 通过在网络上进行搜索 , 确定 com.google.android.exoplayer:exoplayer.../google/ExoPlayer/tags 页面 , 确认版本号是否存在 ; 3、检查仓库地址配置 ( 本案例的解决方案 ) 确保配置的 Maven 仓库地址正确 ; 在 根目录下的 build.gradle..., 可以正常访问网络 ; 然后 , 再看 Maven 仓库的地址是否被屏幕 , 可能需要挂梯子进行下载 ; 5、手动下载 Gradle 依赖 参考 下一篇博客 【错误记录】Android 编译报错 (

    66610

    Android主流播放器比较

    VideoView 的使用非常简单,播放视频的步骤: 在界面布局文件中定义 VideoView 组件,或在程序中创建 VideoView 组件 调用 VideoView 的如下两个方法来加载指定的视频:...的 Demo ExoPlayer 库的核心类是 ExoPlayer 类。...因为 ExoPlayer 是一个包含在你的应用中的库,对于你使用哪个版本有完全的控制权,并且你可以简单的跟随应用的升级而升级; 更少的适配性问题。...IjkPlayer 优点: ijkplayer 最大的优点就是可以根据需要编译需要的解码器。在编译的时候通过 ln -s module-default.sh module.sh 选择要编译的解码器。...ijkplayer 在 config 目录下提供了三种 module.sh 。也可自己修改 module.sh 。 缺点: ijkplayer 的缺点是库太大。

    3.1K20

    Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

    配置NDK路径和其他必要的环境变量,以便在构建过程中能够找到这些工具。3....在项目导航器中,找到libvlc模块,并右键点击选择“Reimport all Gradle projects”以确保所有Gradle依赖都被正确解析。等待Gradle构建完成。...你可以将FFmpeg与ExoPlayer结合使用,通过FFmpeg来解码RTSP流,并将解码后的数据传递给ExoPlayer进行播放。...创建自定义MediaSource:在ExoPlayer中,你可以通过创建自定义的MediaSource来集成FFmpeg。...VLC for Android和ExoPlayer是较为简单和流行的选择,如果对稳定性、功能性能要求非常高,我们认为可以看看大牛直播SDK的SmartPlayer,一个好的RTSP播放器,我们认为,可以参考以下标准

    2.4K10

    企鹅FM(Android) 播放成功率从 2 个 9 到 3 个 9 的蜕变

    api在不同版本上出现莫名其妙崩溃的历史,点播成功率最终优化到99.7%左右,HSL直播的成功率优化到97%附近。...除MediaCodec以外是 完善,所有错误都通过java层异常抛出,直接转化成对应处理逻辑或者业务层错误码 中 注:这里的接入层指的是为了实现完整的业务逻辑,在播放器内核外围的逻辑层 换ExoPlayer...这个架构可以完整的实现所有我们要的播放功能,可以处理播放请求,也可以分片下载和缓存,也可以添加音效和改变播放速度,但是问题也有不少: C/C++层的逻辑过多,首先、这部分逻辑不易维护,产生的逻辑问题,主要通过日志来排查...,砍掉了很多冗余的通信 而且采用了ExoPlayer以后去除了大部分的C/C++层逻辑,剩下的jni通信基本都属于系统组件,譬如MediaCodec和AudioTrack,对于实现者来说可以当做透明,目前日登陆百万的用户量来看...,MediaCodec在各个机型上兼容性较好,投诉较少(目前仅收到两例初始化MediaCodec失败的投诉) ExoPlayer纯Java的实现,也帮助了我们尽可能收归各种错误信息,转换成业务错误码 总体来讲

    4K01

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

    ​《FFmpeg开发实战:从零基础到短视频上线》一书在第10章介绍了轻量级流媒体服务器MediaMTX,通过该工具可以测试RTSP/RTMP等流媒体协议的推拉流。...一、修改build.gradle打开APP模块的build.gradle,在dependencies节点内部补充以下的导包配置:implementation 'com.google.android.exoplayer...三、调整SRS的配置文件通过小程序或者ExoPlayer播放RTMP直播流时,可能出现播放界面黑屏,但有声音传出的情况。这是因为SRS默认没有缓存关键帧,使得拉流一开始没找到关键帧就黑屏了。...解决办法是修改SRS配置,指定开启缓存GOP,这样客户端在拉流时总能找到已缓存的关键帧。...打开srs安装目录下的conf/srs.conf,在“vhost __defaultVhost__”节点内部添加下面一行:gop_cache   on;该行配置的作用是开启缓存关键帧,实际应用记得设置为

    35610

    可折叠设备的桌面模式

    如同视频展示的样子: △ 在 Samsung Galaxy Z Fold2 5G 手机上展示桌面模式的案例 *桌面模式在 Samsung Galaxy Z 系列可折叠手机上也被称为 Flex 模式。...MotionLayout 结合了父类的灵活性,同时又具备在视图从一种姿态过渡到另一种时展示流畅动画的能力。...如果是这样的话,您可以计算出折叠处的相对位置,然后将 ReactiveGuide 移动到该位置;如果情况相反,您可以将其移动到 0 (屏幕底部)。...最后的问题: 当设备折叠时,您应该将 ReactiveGuide 移动到哪里? FoldingFeature 对象有一个方法 bounds(),它可以获得屏幕坐标系内折叠处的边界矩形信息。...{ // 视图在窗口中的位置要与显示特征在同一坐标空间中。

    2.6K30
    领券