V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
neimengwuyanzu
V2EX  ›  程序员

有没有 Android 端多屏播放一个视频的方案

  •  
  •   neimengwuyanzu · 12 天前 · 1331 次点击

    现在公司设备是一个大型 Android 设备类似外面投放那种广告机,然后外接了一个 hdmi 线连接一个显示器

    现在有个需求就是上下屏要各自播放一个特效视频,但是遇到的问题是机子性能有限,下屏会播放的慢一点,有时候 0.5 秒有时候 1 秒之类的,尝试过在视频加载完成时候在通知 Presentation 开始播放视频,但是效果还有不可控

    感觉解决思路好像不对,是不是应该往多屏播放一个视频的方向去考虑,类似演唱会那种很多小屏组成一个大屏,然后播放一个视频这样的解决思路,而不是两块屏幕两个视频播放控件同步开始播放

    23 条回复    2024-09-05 14:04:27 +08:00
    RHG
        1
    RHG  
       12 天前
    有网络连接的话,可以把播放的视频弄成一个在线视频信号源,播放设备连接信号源,信号源可以设置多个不同的,切换播放内容只用更改视频源播放内容即可。
    qhd1988
        2
    qhd1988  
       12 天前
    试试 ffmpeg 合并成一个视频来播放?比如两个 1920x1080 的视频,合并成 1920*2160 的视频,然后"全屏"播放?
    neimengwuyanzu
        3
    neimengwuyanzu  
    OP
       12 天前
    @RHG 有网络连接,但是这个是直接下载到本地的 视频大的也就 20M 左右 小的 7-8M ,按理说不是播放本地视频比网络视频效果更好么
    neimengwuyanzu
        4
    neimengwuyanzu  
    OP
       12 天前
    @qhd1988 这个有想过,但是目前看的效果是 外接屏只能复制主屏的内容
    tool2dx
        5
    tool2dx  
       12 天前
    配置强的作为主屏,另一个作为副屏,主屏向副屏实时发送当前画面的 rsp 推流,可以两个屏幕同步播放的。

    稍微改一下 scrcpy-android 端代码就行。
    RHG
        6
    RHG  
       12 天前
    @neimengwuyanzu 看下视频编码方式,比如视频是 H265 的,播放设备不能硬解,双路播放也可能不流畅。那种广告机内置安卓可能还是 4.4 的呢,芯片都弱的不行。
    neimengwuyanzu
        7
    neimengwuyanzu  
    OP
       12 天前
    @RHG Android 是 11 得,芯片应该是两元店处理货,UI 复杂一点都会明显卡顿
    jifengg
        8
    jifengg  
       12 天前
    同意 @RHG 的观点。看下编码格式,换 h264 试试。另外播放器用的是啥,支持硬解吗?
    neimengwuyanzu
        9
    neimengwuyanzu  
    OP
       12 天前
    @jifengg 用的是原生的 videoview ,尝试过用第三方播放器加 ijk/ExoPlayr2 内核,结果就是视频清晰了一点,结果播放起来更卡了,视频源文件只能看到是 mp4 的
    JensenQian
        10
    JensenQian  
       12 天前
    楼主那个广告屏的不会是那种四个 A53 的,十年前的那种或货吧
    不过那种放个 1080P 的应该没什么问题吧
    我家里的旧电视盒子就是这种,放个 1080P 的没什么问题吧
    neimengwuyanzu
        11
    neimengwuyanzu  
    OP
       12 天前
    @JensenQian 系统信息里看不到硬件信息,甚至没办法插线调试,只能通过 WIFI 调试,还一会儿一断的,单播放一个视频还行,但是在页面逻辑里插播一下 就会是不是卡一下子
    felixlong
        12
    felixlong  
       12 天前
    @neimengwuyanzu 你这上下屏是一台 Android 还是两台 Android 呀? 一台的话简单地用两个 ExoPlayer2. 在 Render 的时候做个时间同步就行。要卡一起卡。
    neimengwuyanzu
        13
    neimengwuyanzu  
    OP
       12 天前
    @felixlong 一台设备,现在处理逻辑也是这样,慢的主屏加载完成开始播放的回调里通知上屏开始播放,播放完成后一起隐藏,但是效果不太稳定,有时候下屏开始播放了也会卡顿几下,导致不同步
    MozzieW
        14
    MozzieW  
       12 天前
    问题描述不是很清楚,看起来是广告机自带一个屏幕,然后还有一个外接屏?

    先确定是机器性能不够掉帧还是同步逻辑问题,“有时候 0.5 秒有时候 1 秒之类”,看着是同步逻辑问题。测试卡顿,可以录制一个计时视频,精度毫秒的。

    十年前的机器也是支持 1080P 的,两个 1080 P 的问题是内存大点。如果是性能不够,考虑降低视频清晰度到 720P ,还有帧数降低到 30 。
    neimengwuyanzu
        15
    neimengwuyanzu  
    OP
       12 天前
    @MozzieW 确实不太清楚,因为这个表现出来的效果多少有点奇怪

    机器是一个 Android11 系统的机器,通过 hdmi 线外接了一个显示屏,通过 Presentation 来控制 UI

    然后就是主屏会通过条件触发视频播放,现在的逻辑是弹出一个全屏的 dialog 播放视频,控件用的 videoview ,Presentation 的 UI 也是用的 videoview ,在主屏视频文件加载完通知 Presentation 开始播放视频,主屏播放完成后通知 Presentation 和主屏一起隐藏 videoview

    目前的情况就是 主屏有时候播放的视频会卡顿几下,并不是全程卡顿,上屏基本没什么卡顿,视频文件是下载到本地的 1080X1920 MP4 视频

    目前怀疑是机器性能问题,因为单只播放下屏视频的话 是很流畅没什么问题的
    pipilu
        16
    pipilu  
       12 天前
    简单,把 2 个视频剪辑成上下那种
    pipilu
        17
    pipilu  
       12 天前
    @neimengwuyanzu Mp4 是文件类型,用 ffmpg 看下实际编码,降低视频源解码码率 baseline 啥的
    McVander
        18
    McVander  
       12 天前
    副屏我记得可以创建虚拟屏幕同步主屏的内容,需要设置个标志来着。这样的话与主屏就保持同步了。只播放一个视频就可以了
    tool2dx
        19
    tool2dx  
       12 天前
    既然磁盘问题导致的卡几秒,那么就用 videoview getCurrentPosition(),过几秒就主动同步一样。如果两者偏差太大,就 seekto 强制画面同步一次。
    kldd529
        20
    kldd529  
       12 天前
    可以用集群 来同步或修正播放
    MozzieW
        21
    MozzieW  
       12 天前
    @neimengwuyanzu #15 性能不行,解决思路还是降低视频像素和帧率。
    确定是卡顿导致视频对不上,可以考虑监听视频进度,过快时暂停,等追上来再恢复,但这方案估计体检不好

    完整的解决方法只能自己实现视频播放逻辑,把视频帧的时间对上
    v2demo
        22
    v2demo  
       12 天前
    之前做过类似的项目,和 19 楼的逻辑一样,同时控制 50 台设备播放相同的视频 播放误差在 200ms 内,肉眼基本无法区分。
    neimengwuyanzu
        23
    neimengwuyanzu  
    OP
       11 天前
    @v2demo 目前也是用这个方案了,项目是多模块的 用 eventbus 实时传递进度的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   937 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 19:51 · PVG 03:51 · LAX 12:51 · JFK 15:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.