持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天,点击查看活动详情
在开发过程中经过编码的视频路径实在是太长了,当使用http以流的形式播放视频时,一直没出问题,但是当存放到本地进行加密编码后,发现有些视频能播放有些视频不能播放。
起初,我以为是路径传错了,仔细核对后,发现路径没问题,那是什么原因?
查看vlc的输出日志,只给出了这样的错误:(No such file or directory)
路径没问题,但是程序中却不能识别,这是什么原因?
难道是程序中无法识别这个路径?
然后,我在代码中加了路径文件是否存在的判断,果真出现了问题!
使用C++方式获取,该视频路径是不存在的,代码如下:
if (_access(sfile.c_str(), 0) != -1)
{
//说明: 文件存在,不需要下载
return true;
}
return false; //文件不存在
但是,使用Qt的方式获取时,发现该文件是存在的,代码如下:
QFile file(qsFile);
if (file.exists())
{
return true; //说明: 文件存在,不需要下载
}
return false;//文件不存在
由此,我想到的是,是不是路径太长导致的?
尝试后发现,果真是由路径长度决定的,路径长度超过250时,在使用_access获取路径时出现问题,并且,用vlc播放视频时也会出现问题。
在实际要求中,经过编码后的路径确实很长,该如何操作呢?
最简单粗暴的方式,将需要播放的视频进行复制,关闭播放时删除临时复制出来的问题。
代码实现流程:
1:创建临时存储文件的文件夹。如果不存在需要创建。
QString qsDownTempFolder = "" //临时文件夹
QDir dir(qsDownTempFolder);
if (!dir.exists())
{
dir.mkpath(qsDownTempFolder); //文件夹不存在,创建
}
2:获取源文件的文件名称
QString qsOriginalFilePath = ""; //视频原路径
QFileInfo infoFile(qsOriginalFilePath);
QString qsFileName = infoFile.fileName(); //文件名称
3:进行文件复制
if (QFile::copy(qsOriginalFilePath, qsCopyFilePath) == false)
{
//复制失败!
return false;
}
由此就可以将该视频进行复制了,在后续播放视频时只需要播放复制路径下的视频资源就不会出现文件查找不到的原因了。
4:关闭视频时,删除临时文件
这是最后一步操作了!
今天的更新就到这里了~
我是中国好公民st,一名C++开发程序猿~