上传到服务器前压缩Android视频

8
我该如何在Android上传到远程服务器之前压缩视频文件?我不想将文件压缩成zip文件,因为我认为这样并没有太大帮助。我想要压缩视频,并重新编码以降低比特率或分辨率。我的想法是从每个设备获取标准的360х480,30 FPS视频文件。这样我就可以避免使用更好摄像头的用户被迫上传巨大的视频文件。

我知道iOS很容易强制视频文件分辨率。在iPhone 4上录制的10秒视频:

  • 高(1280х720)=〜14MB =〜11Mbit / s
  • 640(640х480)=〜4MB =〜3.2Mbit / s
  • 中等(360х480)=〜1MB =〜820Kbit / s
  • 低(144х192)=〜208KB =〜170Kbit / s

Android有什么简单的方法吗?我需要找到一些外部库来让我重新编码视频文件,然后将其保存到SD卡上(或覆盖旧视频文件),然后上传该文件吗?主要是寻求一般方向,而不是复制和粘贴的代码,尽管任何东西都有帮助。


1
https://dev59.com/HW445IYBdhLWcg3wucmo 可能会对你有所帮助。 - logcat
那看起来很有帮助。我会去看看的。谢谢。 - Kyle Clegg
3
@Kyle 如果你找到了解决方案,请提供你的源代码。 - Hemantvc
5个回答

8

我遇到了一个类似的问题。我需要上传大小在5.4mb以内的视频到服务器上,但由于不同手机的摄像头分辨率不同,出现了问题。这些是我选择的解决方案:

mediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
mediaRecorder.setVideoEncodingBitRate(690000 );

希望这些内容能对您有所帮助。

2
这是我们压缩任何视频所需要的全部吗? - Noman

2
我曾经参与开发的一个应用程序有这样的需求:在压缩视频文件后发送它。以下是我遵循的步骤,已经验证可行:
  1. 使用Android中的Silicompressor库压缩文件。在后台线程上运行压缩任务。

  2. 输出文件格式将具有mime类型“video/raw”。您可以在logcat中查看它。因此,您需要在服务器上添加此mime类型,以便成功上传压缩文件格式。

  3. 完成此操作后,请尝试发送压缩文件,应该可以正常工作。

确保您要上传到服务器的文件的mime类型被服务器接受。


Sillicompressor在Java(Android Studio)中工作吗?因为这个库是用Kotlin编写的,而我在Android Studio中使用的是Java。我该怎么办? - John dahat
是的。它在Java Android Studio中可以工作。当我使用它时,该库是用Java编写的,也许现在已经迁移到Kotlin了。 - VIVEK CHOUDHARY
1
这个库有很多漏洞。 - Krutika Chotara
FFmpeg是更好的选择。 - VIVEK CHOUDHARY

1

1
嘿,伙计,我试了你的库。对于我的一加7设备,压缩视频只有音频。 - Rishab Jaiswal

0

0
我们决定将此功能保存到项目的另一个迭代中。我们选择警告用户有大量数据负载(特别是如果他们不在 Wi-Fi 上)。我相信这是可以做到的,tabbykitten 提供的链接是迄今为止我在此主题上发现的最佳相关 SO 帖子。

请问您能否在这里提供tabbykitten的链接? - VVB
tabbykitten在哪里? - sak
@sak 看起来好像被删除了。 - Kyle Clegg
@KyleClegg 好的,但是被采纳的答案很好用啊,按照它有什么问题吗? - sak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接