有没有办法让Android播放带透明区域的视频?当我尝试在VideoView中播放包含透明区域的WebM视频时,视图的背景仍为黑色。我希望在透明区域看到父视图的背景,而不是黑色。
到目前为止,我发现的唯一可行的解决方案是从视频帧中创建一个可绘制的动画,这不是非常有效的内存。
答案 0 :(得分:2)
我知道它有点晚了,但也许它可以提供帮助。
我能想到实现这一目标的最佳方法是使用OpenGL ES - 您通过曲面渲染视频,并编写一个小的着色器,删除您想要删除的颜色区域。 你可以在网上找到这个技术的几个例子,也许这个链接可以提供一些kickstart: First steps in creating a chroma key effect using android camera
答案 1 :(得分:1)
我认为这可以解决您的问题 试试这个https://github.com/pavelsemak/alpha-movie
这是演示示例,
<RelativeLayout
android:id="@+id/mainContent"
android:layout_width="match_parent"
android:layout_height="200dp">
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:src="@drawable/bg1" />
<com.alphamovie.lib.AlphaMovieView
android:id="@+id/alpha_video_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
app:accuracy="0.7"
app:alphaColor="#000000"/>
</RelativeLayout>
答案 2 :(得分:0)
除了 Krishna 的回答之外,我还创建了一个 alpha 电影的分支,它播放透明视频,每个帧中单独包含 alpha 数据。
这意味着您可以将透明的 webm 视频转换为普通的 mp4,以便与 AlphaMovieView 一起使用。与色度键方法相反,它产生准确的透明度,允许部分透明并且不依赖于您必须手动设置 alpha 颜色。但是,您需要对透明视频进行预处理。
An example of an "alpha packed" video
// project's (top level) build.gradle
repositories {
// ...
mavenCentral()
}
// module's build.gradle
dependencies {
// ...
implementation 'io.github.nopol10:alpha-movie:1.3.4'
// ...
}
ffmpeg -vcodec libvpx -i input_video.webm -vf "split [a], pad=iw*2:ih [b], [a] alphaextract, [b] overlay=w" -x264opts keyint=30 -y output_video.mp4
中运行它。将 input_video.webm 和 output_video.mp4 替换为所需的输入文件和输出文件名。<com.alphamovie.lib.AlphaMovieView
android:id="@+id/video_player"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
custom:packed="true"
/>
alphaMovieView = (AlphaMovieView) findViewById(R.id.video_player);
alphaMovieView.setVideoFromAssets("output_video.mp4");
此方法的灵感来自 AVProVideo 中的功能。