【问题标题】:Two producers one surface两个生产者一个表面
【发布时间】:2019-04-25 20:26:05
【问题描述】:

好的,这对某些人来说似乎是一个简单的问题,但我有点迷茫,仍在学习。 所以我正在学习在安卓上编码,并且正在学习一些技术限制。就像 2 个生产者不能共享同一个表面。

我正在使用 FFMPEG 构建一个 Telestrator。 我会在按下暂停时从视频中拉出帧。

 int currentPosition = myVideoView.getCurrentPosition(); 

            Bitmap bmFrame = mediaMetadataRetriever
                    .getFrameAtTime(currentPosition * 1000);

现在这会给我一个位图来制作画布。

现在这是我有点迷失的问题。

我的表面正在播放视频,并在抓取帧时暂停。表面上不能有两个制作人是我的理解。那么如何在视频保持暂停并保持位置的同时使用位图上的绘画/画布功能显示位图并在其上绘制。

我知道这是可能的,但我不明白它是如何完成的。

这是完成项目的最后一步,因为我知道一旦有了位置、位图和画布/绘画,如何将它们全部放在 FFMPEG 上。

【问题讨论】:

    标签: android surface producer


    【解决方案1】:

    您可以将视频表面覆盖在另一个表面上,您可以在其中绘制您想要的东西。 您可以通过使用带有两个孩子的 FrameLayout(您也可以使用 Relative 或 ConstraintLayout)来实现这一点,如下所示:

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"> 
    	
        <VideoView 
            android:id="@+id/videoView"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
        
        <ImageView 
            android:id="@+id/imageView"
            android:layout_width="match_parent"
        	android:layout_height="match_parent"/>
    </FrameLayout>

    这样你就可以在 ImageView 中绘制,而 videoView 不会受到影响。

    【讨论】:

    • 好吧,问一个问题,imageView会不会阻塞videoView?
    • 它会出现在它上面。您仍然可以处理用户交互,并且取决于您在 imageView 中绘制的内容,videoView 仍然可见。
    • 是的,我所做的是在 onCreate 中将其设置为透明,然后在 onclick 中将 alpha 设置为 255 不透明。但是我很难让它全部一起工作。我在这里发了另一篇帖子stackoverflow.com/questions/55883437/paint-on-video-frame 显示更多代码并寻求一些帮助以使其结合在一起,因为我一直在崩溃并且我无法进行错误检查,因为模拟器不会播放视频而且我的手机是像素 3带有不连接到 PC 的奇怪电源线。所以我无法弄清楚错误在哪里。
    • 好的,我去看看。有没有设置开发者选项和usb调试?
    • 我没有电话线。我有一个像素 3。而且电源线不是 USB 友好的。你必须有一根特殊的绳子才能做到这一点。我还没有。谷歌并没有让它成为最友好的手机。
    猜你喜欢
    • 2023-03-06
    • 1970-01-01
    • 2014-04-19
    • 2015-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多