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位置存储数据。否则播放效果将有很大的影响。
分享到:
相关推荐
WEB中的PC浏览器的HLS播放器。
里面有rtmp、hls 播放器及相关代码。
HLS Flash 播放器
JS 实现的 HLS 格式播放器.zip,使用媒体源扩展的javascript hls客户端
html5播放器,srs 使用nginx反向代理解决chrome播放HLS的跨域问题
http://网站nginx代理的路径/?m3u8=hls的播放地址 把本html放在nginx代理中,把其他地方获取到的hls播放地址,直接当做url传参给本HTML即可
所以,使用libcurl,可以很简单的完成HTTP的下载工作,为HLS模块的拉流部分提供简单有效的HTTP请求方法。 想要知道更多关于libcurl的介绍,可以到官网 上去了解,在这里不再详述。(官网地址 http://curl.haxx.se/)...
Vivado HLS关于图像处理的数据手册。内有相关函数介绍。
hls.js是一个JavaScript库,可实现HTTP Live Streaming客户端。它依靠HTML5视频和MediaSource扩展进行播放。它通过将MPEG-2传输流和AAC / MP3流转换为ISO BMFF(MP4)片段来工作。如果在浏览器中可用,则可以使用Web...
Flash 播放器的插件支持HLS播放
网上找了很多videojs 都是各种问题,而且积分特别高,自己整理了一下。测试可用,支持 rtmp 拉流h5自带的视频拉流播放器原生态
ckplayer播放插件
集合了RTMP和HLS、MP4网页播放器,下载tomcat,添加文件夹即可运行demo,以上为项目源码,如果觉得满意,请给个好评,谢谢
Vivado HLS在ZYNQ-7000上加速opencv的应用。该文档是中文数据手册。
最新版本的ckplayer-x 直接支持了html5播放m3u8格式的视频,但是PC平台上使用h5播放器播放m3u8时,ckplayer-x内部需要加载一个hls.min.js。因为下载的ckplayer.zip安装包没有包含该文件,故从其他地方找到相关文件。
使用as3写的一个能播放hls协议和rtmp协议的demo
最新版本的ckplayer-x 直接支持了html5播放m3u8格式的视频,但是ckplayer-x内部需要加载一个hls.min.js,不知道用处是什么,找了半天终于找到了,放在这供大家使用
使用HLS创建一个FIR滤波器,并对其源程序、HLS优化等进行分析。
扩展允许浏览器使用hls.js库(https://github.com/video-dev/hls.js/)在网页内播放HLS视频 此扩展程序允许在桌面浏览器内部观看HLS视频(专为...内联HLS播放器将检测视频是否尝试加载HLS并处理它。 支持语言:English
HLS VITIS opencv下载