android4.0系统下载抖音视频无法播放问题

1,177 阅读2分钟

原本以为是抖音下载的视频格式是不支持5.0以下的系统,因为我在5.0以上的系统播放都是正常的。但仔细想想像抖音这么大的项目工程兼容性方面应该不用说的。

尝试使用FFmpeg对视频进行再次压缩编码

ffmpeg -i input.mp4 -c:v x264 -c:a aac out.mp4

结果还是不行,请教公司的大佬,说android4.0的系统是视频height最大支持到1280,看了抖音的下载的视频像素,结果刚刚好是720x1280、结果就无法播放。

为了验证这个问题,我用自己的手机拍了一个1080x1920的视频发送给android4.4的系统,结果也是无法播放。所以不是抖音下载的视频无法播放,而是大于或等于1280的视频就无法播放。

想到通过FFmpeg进行视频压缩

使用以下命令尝试,发现成功压缩了,但是随之而来也有一个问题。我竖屏视频720x1280的压缩为1024x768了,就是方向变了,成为横屏视频了。

ffmpeg -i input.mp4 -s xga out.mp4
# xga = 1024x768
# hd720 = 1280x720

继续找找有没有其他的方式

发现直接写固定像素 -s 768x1024 也是可以的,继续尝试

ffmpeg -i input.mp4 -s 768x1024 out.mp4

成功了,但也有很大的问题,就是压缩的视频变得太模糊了,上面的 -s xga 也是压缩得很模糊。

查看视频格式,与原视频对比,原来把比特率也进行压缩了,导致视频失帧很严重。。

添加比特率压缩

通过media的MediaMetadataRetriever(),可以获取到对应的

METADATA_KEY_VIDEO_WIDTH,METADATA_KEY_VIDEO_HEIGHT,METADATA_KEY_VIDEO_ROTATION,METADATA_KEY_BITRATE

这里有一个小坑,需要注意,比如视频是竖屏,大小是:1080x1920。但是获取到的值 METADATA_KEY_VIDEO_WIDTH = 1920,METADATA_KEY_VIDEO_HEIGHT = 1080

这个小问题可以通过 METADATA_KEY_VIDEO_ROTATION 来判断视频的方向,返回的值:0,90,180,270

METADATA_KEY_BITRATE 就是可以获取比特率

val retriver = MediaMetadataRetriever()
retriver.setDataSource(videoPath)
val videoWidth = retriver.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH).toInt()
val videoHeight = retriver.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT).toInt()
val videoRotation = retriver.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION).toInt()
val videoBitRate = retriver.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE).toInt()
val bitRate = videoBitRate / 1024
ffmpeg -i input.mp4 -b:v ${bitRate}k -s 768x1024 out.mp4

目前对FFmpeg学习还是处于菜鸟级别,看到那里有错希望大佬能及时指正。如有更好的压缩视频方式,多多指点,感谢。