在Android Studio中裁剪视频流

时间:2019-01-25 10:18:21

标签: android video ffmpeg crop

我想流式传输一个非常大的视频(比如说5000x5000),并且想要对其进行裁剪以显示1000x1000的块。目前,我是通过TextureView.SurfaceTextureListener流式传输视频来实现的。将视频缩放到适合我的视图并且可以播放的程度。这是一个小片段:

Matrix matrix = new Matrix();
matrix.setScale(scaleX, scaleY, 0, 0);
matrix.postTranslate(positionX, positionY);

textureView.setTransform(matrix);

但是,由于视频如此之大,因此某些设备无法播放它。即使使用相同的编解码器,较小的视频也可以正常工作。似乎解码需要花费很长时间才能播放。当我将视频存储在资源中时,甚至发生了这种情况。 (也许与second answer in this question有关)

我尝试使用ffmpeg,但是根据this question,当我这样做时,我在ExecuteBinaryResponseHandler.onFailure(): "CANNOT LINK EXECUTABLE "/data/user/0/packageName/files/ffmpeg": /data/data/packageName/files/ffmpeg: has text relocations"中收到了错误消息。因此,根据以下这些问题,看来ffmpeg不再是一个选择,并且永远不会这样做:

因此,对此有一些疑问。

  1. 是否有ffmpeg的替代方法,可以让我在播放器解码之前以编程方式高性能地裁剪视频?
  2. 是否有一种方法可以限制android仅在缩放后的视频 中加载视频的“可见”部分?提高我的第一次尝试的性能,将视频缩放到我只能看到特定区域的程度?
  3. 除了降低视频源的质量外,还有其他方法可以确保设备可以播放视频或至少以编程方式检测到无法播放视频吗?
  4. 还有其他技术或替代方法可用于显示视频的裁剪部分吗?

更新

如评论中所建议,将其归结为一个问题: 我是否可以通过编程方式从url裁剪视频,使其在所有现代设备上播放?

0 个答案:

没有答案