现在公司设备是一个大型 Android 设备类似外面投放那种广告机,然后外接了一个 hdmi 线连接一个显示器
现在有个需求就是上下屏要各自播放一个特效视频,但是遇到的问题是机子性能有限,下屏会播放的慢一点,有时候 0.5 秒有时候 1 秒之类的,尝试过在视频加载完成时候在通知 Presentation 开始播放视频,但是效果还有不可控
感觉解决思路好像不对,是不是应该往多屏播放一个视频的方向去考虑,类似演唱会那种很多小屏组成一个大屏,然后播放一个视频这样的解决思路,而不是两块屏幕两个视频播放控件同步开始播放
1
RHG 105 天前
有网络连接的话,可以把播放的视频弄成一个在线视频信号源,播放设备连接信号源,信号源可以设置多个不同的,切换播放内容只用更改视频源播放内容即可。
|
2
qhd1988 105 天前
试试 ffmpeg 合并成一个视频来播放?比如两个 1920x1080 的视频,合并成 1920*2160 的视频,然后"全屏"播放?
|
3
neimengwuyanzu OP @RHG 有网络连接,但是这个是直接下载到本地的 视频大的也就 20M 左右 小的 7-8M ,按理说不是播放本地视频比网络视频效果更好么
|
4
neimengwuyanzu OP @qhd1988 这个有想过,但是目前看的效果是 外接屏只能复制主屏的内容
|
5
tool2dx 105 天前
配置强的作为主屏,另一个作为副屏,主屏向副屏实时发送当前画面的 rsp 推流,可以两个屏幕同步播放的。
稍微改一下 scrcpy-android 端代码就行。 |
6
RHG 105 天前
@neimengwuyanzu 看下视频编码方式,比如视频是 H265 的,播放设备不能硬解,双路播放也可能不流畅。那种广告机内置安卓可能还是 4.4 的呢,芯片都弱的不行。
|
7
neimengwuyanzu OP @RHG Android 是 11 得,芯片应该是两元店处理货,UI 复杂一点都会明显卡顿
|
9
neimengwuyanzu OP @jifengg 用的是原生的 videoview ,尝试过用第三方播放器加 ijk/ExoPlayr2 内核,结果就是视频清晰了一点,结果播放起来更卡了,视频源文件只能看到是 mp4 的
|
10
JensenQian 105 天前
楼主那个广告屏的不会是那种四个 A53 的,十年前的那种或货吧
不过那种放个 1080P 的应该没什么问题吧 我家里的旧电视盒子就是这种,放个 1080P 的没什么问题吧 |
11
neimengwuyanzu OP @JensenQian 系统信息里看不到硬件信息,甚至没办法插线调试,只能通过 WIFI 调试,还一会儿一断的,单播放一个视频还行,但是在页面逻辑里插播一下 就会是不是卡一下子
|
12
felixlong 105 天前
@neimengwuyanzu 你这上下屏是一台 Android 还是两台 Android 呀? 一台的话简单地用两个 ExoPlayer2. 在 Render 的时候做个时间同步就行。要卡一起卡。
|
13
neimengwuyanzu OP @felixlong 一台设备,现在处理逻辑也是这样,慢的主屏加载完成开始播放的回调里通知上屏开始播放,播放完成后一起隐藏,但是效果不太稳定,有时候下屏开始播放了也会卡顿几下,导致不同步
|
14
MozzieW 105 天前
问题描述不是很清楚,看起来是广告机自带一个屏幕,然后还有一个外接屏?
先确定是机器性能不够掉帧还是同步逻辑问题,“有时候 0.5 秒有时候 1 秒之类”,看着是同步逻辑问题。测试卡顿,可以录制一个计时视频,精度毫秒的。 十年前的机器也是支持 1080P 的,两个 1080 P 的问题是内存大点。如果是性能不够,考虑降低视频清晰度到 720P ,还有帧数降低到 30 。 |
15
neimengwuyanzu OP @MozzieW 确实不太清楚,因为这个表现出来的效果多少有点奇怪
机器是一个 Android11 系统的机器,通过 hdmi 线外接了一个显示屏,通过 Presentation 来控制 UI 然后就是主屏会通过条件触发视频播放,现在的逻辑是弹出一个全屏的 dialog 播放视频,控件用的 videoview ,Presentation 的 UI 也是用的 videoview ,在主屏视频文件加载完通知 Presentation 开始播放视频,主屏播放完成后通知 Presentation 和主屏一起隐藏 videoview 目前的情况就是 主屏有时候播放的视频会卡顿几下,并不是全程卡顿,上屏基本没什么卡顿,视频文件是下载到本地的 1080X1920 MP4 视频 目前怀疑是机器性能问题,因为单只播放下屏视频的话 是很流畅没什么问题的 |
16
pipilu 105 天前
简单,把 2 个视频剪辑成上下那种
|
17
pipilu 105 天前
@neimengwuyanzu Mp4 是文件类型,用 ffmpg 看下实际编码,降低视频源解码码率 baseline 啥的
|
18
McVander 105 天前
副屏我记得可以创建虚拟屏幕同步主屏的内容,需要设置个标志来着。这样的话与主屏就保持同步了。只播放一个视频就可以了
|
19
tool2dx 105 天前
既然磁盘问题导致的卡几秒,那么就用 videoview getCurrentPosition(),过几秒就主动同步一样。如果两者偏差太大,就 seekto 强制画面同步一次。
|
20
kldd529 105 天前
可以用集群 来同步或修正播放
|
21
MozzieW 105 天前
@neimengwuyanzu #15 性能不行,解决思路还是降低视频像素和帧率。
确定是卡顿导致视频对不上,可以考虑监听视频进度,过快时暂停,等追上来再恢复,但这方案估计体检不好 完整的解决方法只能自己实现视频播放逻辑,把视频帧的时间对上 |
22
v2demo 105 天前
之前做过类似的项目,和 19 楼的逻辑一样,同时控制 50 台设备播放相同的视频 播放误差在 200ms 内,肉眼基本无法区分。
|
23
neimengwuyanzu OP @v2demo 目前也是用这个方案了,项目是多模块的 用 eventbus 实时传递进度的
|