1.问题描述
- 使用libcurl实现下载MP3资源,当本地缓存满了,就停止下载,缓存空出来了,继续开始下载
- 提供的资源有时候会在下载的时候被拒绝,所以需要断点续传(测试过程中发现的)
2 问题解决方法
下载暂停和继续的方法
#include <curl/curl.h>
//该函数可以实现控制播放的停止和下载
//但是必须要和curl同一个线程中进行控制
CURLcode curl_easy_pause(CURL *handle, int bitmask );
在查阅一些资料之后,在 CURLOPT_XFERINFOFUNCTION 这个opt设置的回调函数中实现暂停和继续
#include <curl/curl.h>
int progress_callback(void *clientp,
curl_off_t dltotal,
curl_off_t dlnow,
curl_off_t ultotal,
curl_off_t ulnow)
{
CURL *curl = (CURL *)clientp;
if(progress > 90)
{
curl_easy_pause(curl, CURLPAUSE_ALL);
}
if(progress < 50)
{
curl_easy_pause(curl, CURLPAUSE_CONT);
}
return 0;
}
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_XFERINFOFUNCTION,
progress_callback);
下载过程中被打断的问题
经过和浏览器打开mp3资源文件的比对,发现其中多了这一个http header
range: bytes=0-1048575
http range允许从访问资源的某一个范围
添加代码如下
char range[64] = {0};
snprintf(range, sizeof(range), "%s-", cnt);
CURLcode curl_easy_setopt(curl, CURLOPT_RANGE, range);
其中,range的语法如下
200- 表示访问从200字节开始到末尾的数据
100-n 表示方位从100到n字节的数据
浙公网安备 33010602011771号