我想流式传输一个非常大的视频(比如说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
不再是一个选择,并且永远不会这样做:
因此,对此有一些疑问。
更新
如评论中所建议,将其归结为一个问题: 我是否可以通过编程方式从url裁剪视频,使其在所有现代设备上播放?