(HLS播放器之二)HTTP数据下载之libcurl 基本使用
来源:互联网 发布:淘宝查询信誉 编辑:程序博客网 时间:2024/05/14 06:11
libcurl,在HLS流媒体播放终端上提供HTTP下载的相关接口。具体的使用方式可以参见http://curl.haxx.se/libcurl/c/libcurl-tutorial.html,或博客http://www.cppblog.com/tx7do/archive/2012/02/19/166011.html。
代码:
m_pCurl = curl_easy_init();if (m_pCurl == NULL)break;curl_easy_reset(m_pCurl); curl_easy_setopt(m_pCurl, CURLOPT_URL, url.c_str()); curl_easy_setopt(m_pCurl, CURLOPT_FOLLOWLOCATION, 1); curl_easy_setopt(m_pCurl, CURLOPT_CONNECTTIMEOUT, 3);//curl_easy_setopt(m_pCurl, CURLOPT_TIMEOUT, 30);curl_easy_setopt(m_pCurl, CURLOPT_NOSIGNAL, 1L);//curl_easy_setopt(m_pCurl, CURLOPT_LOW_SPEED_LIMIT, 1);//curl_easy_setopt(m_pCurl, CURLOPT_LOW_SPEED_TIME, 120); // 120s的时间内速度小于1byte/s,则取消下载curl_easy_setopt(m_pCurl, CURLOPT_WRITEFUNCTION, writeTsData_Local);curl_easy_setopt(m_pCurl, CURLOPT_WRITEDATA, (LPVOID)this);m_downloadThreadFlag = true;retCode = curl_easy_perform(m_pCurl);double downloadTotalTime;// 记录下载的时间长度double downloadSpeed;// 记录下载速度CURLcode re = curl_easy_getinfo(m_pCurl, CURLINFO_SPEED_DOWNLOAD, &downloadSpeed);// 获取下载速度curl_easy_getinfo(m_pCurl, CURLINFO_TOTAL_TIME,&downloadTotalTime);curl_easy_cleanup(m_pCurl);
1、void curl_easy_reset(CURL *handle ); 重置CURL
2、CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter);
CURLOPT_URL,添加下载的URL
CURLOPT_WRITEFUNCTION, 设置回调存储数据函数
CURLOPT_CONNECTTIMEOUT, 设置连接超时时间
CURLOPT_LOW_SPEED_LIMIT, 设置最低下载速度
CURLOPT_LOW_SPEED_TIME, 设置最低下载速度持续的时间
CURLOPT_FOLLOWLOCATION, 设置为1,否则会导致回调函数只执行一次
3、CURLcode curl_easy_perform(CURL * handle ); 启动下载
4、CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ...); 可以获取下载的相关信息,如下载时长、下载速度等。
5、void curl_easy_cleanup(CURL *curl); 关闭CURL
主要使用的就是这五个函数。建议在connectTimeOut不要设置时间过长。如果设置太长后,有时会导致退出时程序挂起现象。获取下载相关信息getInfo是必要的,可以通过它来判断程序网络连接情况。如下载时长远远大于片段播放时长,且缓存中存储的量过少时,则需要调用Pause进行数据缓冲。当下载速度为0 b/s时,则需要提示用户检测网络。
以下是数据接收的回调函数:
size_t TsDataThread::writeTsData_Local(void *buffer, size_t size, size_t nmemb, void *userp){if (false == downloadflag || true == isStop)return 0;if (elementSize >= preElementSize){TsDataThread* pUDPReader = (TsDataThread*)userp;pUDPReader->addBuff(buffer, size, nmemb, userp);elementSize += nmemb;}return size*nmemb; }
要注意如果用户中途退出,且下载线程仍再继续时,不能强制关闭CURL。通过回调中返回0值,使其正常退出CURL。还有就是如果第一次下载片度在elementSize位置处,下载失败。则在第二次下载时一定要从elementSize位置存储数据。否则播放效果将有很大的影响。
- (HLS播放器之二)HTTP数据下载之libcurl 基本使用
- (HLS播放器之一)HLS协议之M3U8解析
- (HLS播放器之一)HLS协议之M3U8解析
- (HLS播放器之一)HLS协议之M3U8解析
- (HLS播放器之三)播放数据缓存机制之环形buffer
- ffmpeg之hls下载
- Cocos2dx之libcurl (二)
- libcurl之ftp上传 & 下载 (转)
- Js网络视频播放器之VideoJs&&ckplayer(直播拉流rtmp、hls)
- Js网络视频播放器之VideoJs&&ckplayer(直播拉流rtmp、hls)
- libcurl基本使用 -- libcurl
- 使用libcurl库进行HTTP的下载
- 使用libcurl下载网络数据存储到数据库(使用libcurl和sqlite数据库)
- cocos2d-x学习之路(16)--使用libcurl下载图片
- ASP.NET Web API(二):安全验证之使用HTTP基本认证
- 【播放器】关于 sewisePlayer HLS视频播放器的二次开发(二)
- 开源项目(库)之libcurl学习(二)
- 数据存储之(二):基本数据的存储
- 使用Winpcap示例程序的时候,会出现很多错误(转)
- 《Spring Security 3》 精确的访问控制
- 截取手机屏幕成图片保存到sdcard卡当中
- ok6410移植sqlite3
- CGI功能
- (HLS播放器之二)HTTP数据下载之libcurl 基本使用
- Hadoop k-means 算法实现
- 企业网站的主要功能
- 如果我是12306架构师
- Java编程中“为了性能”尽量要做到的一些地方
- 水晶报表之主从多表数据源批量预览及打印开发设计
- HTML Embed 标签播放音乐
- C++多态在编译和运行期的差别
- Java工作流系统的一些常见名称解释