最近有一个项目,是qt安卓下的一个客户端,有录制视频和上传七牛云的需求,录制视频,在qt5版本下,qt并没有自带录制usb摄像头为视频的控件,所以采用了qt6版本下的qt自带的录制usb摄像头插件,录制的mp4文件还可以,但是在安卓环境下,上传七牛云就有点困难了,所以研究了很久。
第一,就是关于七牛云编译成安卓包的问题,这个问题很复杂,经过多种尝试编译成库文件都比较复杂和困难。所以考虑其他方式进行库文件的编译。
然后就是在编译成功后,在运行的时候总是会出现libcurl.so文件未找到的情况。
这里就需要将libcurl.so的绝对路径添加的 项目编译环境中,在Qt6环境下也就是添加到其他库选项中。
第二,就是七牛云的上传过程。首先初始化
Qiniu_Global_Init(-1);
Qiniu_Rio_PutRet putRet;
Qiniu_Client client;
Qiniu_RS_PutPolicy putPolicy;
Qiniu_Rio_PutExtra putExtra;
然后创建并对其进行key赋值
Qiniu_Mac mac;
获取token
char *uptoken;
uptoken = Qiniu_RS_PutPolicy_Token(&putPolicy, &mac);
接下来就是执行上传等操作
qDebug()<<"5";
//put extra
// putExtra.upHost= "https://video.cdn.cn-once.cn/";
putExtra.mimeType = "video/x-mp4";
//init
Qiniu_Client_InitMacAuth(&client, 1024, &mac);
qDebug()<<"6";
Qiniu_Error error = Qiniu_Rio_PutFile(&client, &putRet, uptoken, key, localFile, &putExtra);
if (error.code != 200)
{
printf("upload file %s:%s error.\n", bucket, key);
qDebug("upload file %s:%s error.\n", bucket, key);
qDebug()<<"error=="<<error.message;
}
else
{
/*200, 正确返回了, 你可以通过statRet变量查询一些关于这个文件的信息*/
printf("upload file %s:%s success.\n\n", bucket, key);
printf("key:\t%s\n", putRet.key);
printf("hash:\t%s\n", putRet.hash);
qDebug()<<"正确返回了..";
}
qDebug()<<"7";
Qiniu_Free(uptoken);
Qiniu_Client_Cleanup(&client);
总得来说七牛云在Qt6安卓环境和win环境下的视频上传是可以完成的,但是上传速度在安卓下比较慢,200kb-400kb左右,上传视频确实有下牵强。因为是采用的4G卡,不确定是4G模块的问题还是七牛云的问题。但是在大的视频文件下进行分片上传没能成功,有相关大文件上传的大佬希望可以分享一下。