用UDP实现HTTP Streaming协议从指定的URL拉流
实现一个整型函数 int request (char* hostname, char* api, char* parameters, string& message) 主要分为建立udp,发送信令,接收服务器返回信令,接收数据三个部分功能 首先建立UDP:
#ifdef WIN_OS
{ WSADATA WsaData; WSAStartup (0x0101, &WsaData); } #endif
sockaddr_in sin;
int sock = socket (AF_INET, SOCK_STREAM, 0); if (sock == -1)
{
return -100; } sin.sin_family = AF_INET; sin.sin_port = htons( (unsigned short)8080);
struct hostent * host_addr = gethostbyname(hostname);
if(host_addr==NULL)
{
cout<<"Unable to locate host"<<endl ; return -103; } sin.sin_addr.s_addr = *((int*)*host_addr->h_addr_list) ; cout<<"Port :"<<sin.sin_port<<", Address : "<< sin.sin_addr.s_addr<<endl;
if( connect (sock,(const struct sockaddr *)&sin, sizeof(sockaddr_in) ) == -1 )
{
cout<<"connect failed"<<endl ; return -101; }
其次定义一个宏:
#define SEND_RQ(MSG) send(sock,MSG,strlen(MSG),0);
向服务器发送信令:
SEND_RQ("GET ");
char* api;//这里填URL文件名,比如 http://127.0.0.1:8888/1.asf中的1.asf
SEND_RQ(api); SEND_RQ("HTTP/1.0\r\n"); SEND_RQ("Accept: */*\r\n"); SEND_RQ("User-Agent: NSPlayer/4.1.0.3925\r\n");
char content_header[100];
sprintf(content_header,"Content-Length: %d\r\n",strlen(parameters)); SEND_RQ(content_header); SEND_RQ("Host: "); SEND_RQ("hostname"); SEND_RQ("\r\n"); //If you need to send a basic authorization //string Auth = "username:password"; //Figureout a way to encode test into base64 ! //string AuthInfo = base64_encode(reinterpret_cast<const unsigned char*>(Auth.c_str()),Auth.length()); //string sPassReq = "Authorization: Basic " + AuthInfo; //SEND_RQ(sPassReq.c_str());
SEND_RQ("\r\n");
SEND_RQ("\r\n"); SEND_RQ(parameters); SEND_RQ("\r\n");
接受服务器发送反馈信令:
//接收头部
cout<<"####HEADER####"<<endl;
char c1[1]; int l,line_length; bool loop = true; bool bHeader = false;
while(loop)
{ l = recv(sock, c1, 1023, 0); if(l<0) loop = false; if(c1[0]=='\n')
{
if(line_length == 0) loop = false;
line_length = 0;
if(message.find("200") != string::npos) bHeader = true;
}
else if(c1[0]!='\r') line_length++; cout<<c1[0]; message += c1[0]; }
//接收body
message="";
if(bHeader) {
cout<<"####BODY####"<<endl ;
char p[1024]; while((l = recv(sock,p,1023,0)) > 0)
{ cout.write(p,l) ; p[l] = '\0'; message += p; } cout << message.c_str(); } else { return -102; } //清理工作 #ifdef WIN_OS WSACleanup( ); #endif //------------------------------------------------------------------------------------------------------------------------------------------------- 相关的协议信令: RTSP协议 //RTSP HTTP STREAM协议 //HTTP STREAM //HTTP STREAM SECOND |
用UDP实现HTTP Streaming协议从指定的URL拉流相关推荐
- SRS4 对接海康威视GB28181协议推流 RTMP、webRTC拉流
一.系统环境 Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-88-generic x86_64) 三.源代码.配置.编译.运行 git clone https://githu ...
- rtsp协议的视频服务器,RTSP拉流协议视频平台EasyNVR能够接入多少路视频直播流?...
EasyNVR视频平台能够进行多线程直播,新版更新的视频分屏功能也让多线程直播更加直观.经常有用户问我们最大能接入多少路视频流,其实这个是不固定的,具体还是要根据现场的网络和服务器来看.EasyNVR ...
- 视频直播技术干货:一文读懂主流视频直播系统的推拉流架构、传输协议等
1.引言 随着移动网络网速的提升与资费的降低,视频直播作为一个新的娱乐方式已经被越来越多的用户逐渐接受.特别是最近这几年,视频直播已经不仅仅被运用在传统的秀场.游戏类板块,更是作为电商的一种新模式得到 ...
- 视频直播技术分享:一文读懂主流视频直播系统的推拉流架构、传输协议等
本文由蘑菇街前端开发工程师"三体"分享,原题"蘑菇街云端直播探索--启航篇",有修订. 1.引言 随着移动网络网速的提升与资费的降低,视频直播作为一个新的娱乐方 ...
- C++TCP和UDP属于传输层协议
TCP和UDP属于传输层协议.其中TCP提供IP环境下的数据可靠传输,它事先为要发送的数据开辟好连接通道(三次握手),然后再进行数据发送:而UDP则不为IP提供可靠性,一般用于实时的视频流传输,像rt ...
- C语言libcurl:RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议
RTSP是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学.网景和RealNetworks公司提交的IETF RFC标准. /** Copyright (c) 2011 - 2019, Jim ...
- http协议与https协议+UDP协议和TCP协议+WebSocket协议下服务端主动去发送信息+对称加密与非对称加密+get和post请求方式区别详解+浏览器内核以及jsj解析引擎
TCP和UDP协议是TCP/IP协议的核心. 在TCP/IP网络体系结构中,TCP(传输控制协议,Transport Control Protocol).UDP(用户数据报协议,User Data P ...
- 计算机网络整理:UDP协议和TCP协议
系列文章目录 HTTP协议和HTTPS协议 文章目录 系列文章目录 一.TCP/IP 各层协议 二.UDP协议和TCP协议 1.TCP和UDP的区别 2.UDP 协议 3.TCP 协议 1)特点 2) ...
- udp重发机制_UDP 协议
UDP 简介 UDP的数据包同样分为头部(header)和数据(payload)两部分.UDP是传输层(transport layer)协议,这意味着UDP的数据包需要经过IP协议的封装(encaps ...
最新文章
- 使用 NSURLSession 开发一个支持后台下载和断点续传的下载工具
- 基于PyGame的乒乓球和滑雪小游戏
- 企业名片小程序时代,打破纸质名片局限!
- mysql中鼠标光标消失了_为什么我这里没有显示鼠标的悬停可改变页面颜色,以为什么我加载了mysql的jar文件还是不能显示报表的内容呢?...
- 【CCAI大咖秀】AlphaGo/Mobileye教父:智能科学需要融合机器学习、计算神经科学与认知科学
- 中文分词词性对照表(转)
- 移动Web应用程序开发HTML5篇
- react中的状态机_在基于状态图的状态机上使用React的模式
- 明年起,汉语正式纳入俄罗斯“高考”,光看题目我都要笑出声了!
- inno setup相关 (二)
- Python 编程 5 年后,我转向了 Go!
- 解决vmware报错:Mac OS X is not supported with binary translation.
- [升级失效]超星学术视频下载分析
- 4.深度强化学习------PPG(Phasic Policy Gradient)算法资料+原理整理
- Spring 核心思想
- Loss.backward()
- imx6ul之OpenWRT中使用mpd作为音频Server及其使用
- 读《程序员修炼之道-从小工到专家》有感
- 嗨,我的技术论坛上线啦!
- java获得windows系统当前时间与时间不符合