Android平台FFmpeg无法通过HTTPS下载视频的问题咨询
看你遇到的情况,在Android上执行FFmpeg命令ffmpeg -i https://example.com/video.mp4 -c copy b.mp4时失败,日志已经给出了明确原因:
ffmpeg version 3.2.9 Copyright (c) 2000-2017 the FFmpeg developers
configuration:
libavutil 55. 34.101 / 55. 34.101
libavcodec 57. 64.101 / 57. 64.101
libavformat 57. 56.101 / 57. 56.101
libavdevice 57. 1.100 / 57. 1.100
libavfilter 6. 65.100 / 6. 65.100
libswscale 4. 2.100 / 4. 2.100
libswresample 2. 3.100 / 2. 3.100
https protocol not found, recompile FFmpeg with openssl, gnutls or securetransport enabled.
核心问题就是你当前使用的FFmpeg 3.2.9版本没有编译HTTPS协议支持,必须重新编译FFmpeg并启用加密库(比如OpenSSL,Android平台最常用)才能解决。下面是具体步骤:
一、重新编译带HTTPS支持的FFmpeg
准备编译环境
- 先下载适配你项目的Android NDK(建议选r21e这类稳定版本)
- 先编译适配Android架构的OpenSSL库:需要把OpenSSL编译成对应目标架构(arm64、armeabi-v7a等)的静态/动态库,确保和FFmpeg的编译架构一致。可以找现成的编译脚本简化操作,或者手动完成编译。
配置FFmpeg编译参数
执行configure命令时,要加上启用HTTPS和OpenSSL的参数,举个适配arm64架构的示例:./configure \ --target-os=android \ --arch=arm64 \ --cc=你的NDK路径/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang \ --cxx=你的NDK路径/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang++ \ --enable-openssl \ --enable-protocols=https \ --disable-static \ --enable-shared \ --prefix=./output/arm64-v8a之后执行
make && make install,编译完成后就能在指定的prefix路径下得到带HTTPS支持的FFmpeg库。
二、替换项目中的FFmpeg库
把编译好的新FFmpeg动态库(.so文件)替换掉Android项目中原来的旧库,同时确保项目的构建配置(比如CMakeLists.txt或者Android.mk)正确引用这些新库,避免加载时出现找不到库的错误。
三、验证下载命令
替换完成后,再执行你原来的命令ffmpeg -i https://example.com/video.mp4 -c copy b.mp4,应该就能正常通过HTTPS下载视频文件了。
另外,如果不想自己折腾编译,也可以找一些开源项目提供的预编译好的、带HTTPS支持的FFmpeg Android库,注意选择和你项目API等级、架构匹配的版本就行。
内容的提问来源于stack exchange,提问作者monxarat




