We had the same problem and solved it with a workaround.
We first experimented with OpenGL shaders, like described in this answer https://stackoverflow.com/a/38125734/11253860, which is using the VidEffects library (https://github.com/krazykira/VidEffects). But we couldn't find the sweet spot between quality and performance. Another disadvantage for us was that the OpenGl related code is difficult to maintain for the average Android developer.
Because our video is quite short, we finally converted it to a GIF, which can simply be blurred with the native blur() function for Android 12+.
import coil3.compose.AsyncImage
AsyncImage(
modifier = Modifier.fillMaxWidth().blur(20.dp),
model = "https://example.gif",
contentScale = ContentScale.FillWidth,
contentDescription = null,
)
For Android versions below 12, we decided to use the Cloudy library (https://github.com/skydoves/Cloudy). The disadvantage here, is that the GIF stops playing, and you can only see the static first frame blurred. For our use case and because most of our users have Android 12+, it was a good enough solution for us.