实现一个整型函数

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
DESCRIBE rtsp://wm.microsoft.com/ms/video/0001-hi.wmv RTSP/1.0
User-Agent: WMPlayer/9.0.0.2980 guid/3300AD50-2C39-46C0-AE0A-81D88F547805
Accept: application/sdp
Accept-Charset: UTF-8, *;q=0.1
X-Accept-Authentication: NTLM, Digest, Basic
Accept-Language: en-GB, *;q=0.1
CSeq: 1
Supported: com.microsoft.wm.srvppair, com.microsoft.wm.sswitch, com.microsoft.wm.eosmsg, com.microsoft.wm.predstrm

HTTP STREAM协议

//HTTP STREAM
GET /ms/contoso_100_files/0MM0.wmv HTTP/1.0
Accept: */*
User-Agent: NSPlayer/4.1.0.3925
Host: netshow.micro.com
Pragma: no-cache,rate=1.000000,stream-time=0,stream-offset=0:0,request-context=1,max-duration=0
Pragma: xClientGUID={2200AD50-2C39-46c0-AE0A-2CA76D8C766D}

//HTTP STREAM SECOND
GET /ms/contoso_100_files/0MM0.wmv HTTP/1.0
Accept: */*
User-Agent: NSPlayer/4.1.0.3925
Host: netshow.micro.com
Pragma: no-cache,rate=1.000000,stream-time=0,stream-offset=4294967295:4294967295,request-context=2,max-duration=2147609515
Pragma: xPlayStrm=1
Pragma: xClientGUID={2200AD50-2C39-46c0-AE0A-2CA76D8C766D}
Pragma: stream-switch-count=2
Pragma: stream-switch-entry=ffff:1:0 ffff:2:0

用UDP实现HTTP Streaming协议从指定的URL拉流相关推荐

  1. SRS4 对接海康威视GB28181协议推流 RTMP、webRTC拉流

    一.系统环境 Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-88-generic x86_64) 三.源代码.配置.编译.运行 git clone https://githu ...

  2. rtsp协议的视频服务器,RTSP拉流协议视频平台EasyNVR能够接入多少路视频直播流?...

    EasyNVR视频平台能够进行多线程直播,新版更新的视频分屏功能也让多线程直播更加直观.经常有用户问我们最大能接入多少路视频流,其实这个是不固定的,具体还是要根据现场的网络和服务器来看.EasyNVR ...

  3. 视频直播技术干货:一文读懂主流视频直播系统的推拉流架构、传输协议等

    1.引言 随着移动网络网速的提升与资费的降低,视频直播作为一个新的娱乐方式已经被越来越多的用户逐渐接受.特别是最近这几年,视频直播已经不仅仅被运用在传统的秀场.游戏类板块,更是作为电商的一种新模式得到 ...

  4. 视频直播技术分享:一文读懂主流视频直播系统的推拉流架构、传输协议等

    本文由蘑菇街前端开发工程师"三体"分享,原题"蘑菇街云端直播探索--启航篇",有修订. 1.引言 随着移动网络网速的提升与资费的降低,视频直播作为一个新的娱乐方 ...

  5. C++TCP和UDP属于传输层协议

    TCP和UDP属于传输层协议.其中TCP提供IP环境下的数据可靠传输,它事先为要发送的数据开辟好连接通道(三次握手),然后再进行数据发送:而UDP则不为IP提供可靠性,一般用于实时的视频流传输,像rt ...

  6. C语言libcurl:RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议

    RTSP是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学.网景和RealNetworks公司提交的IETF RFC标准. /** Copyright (c) 2011 - 2019, Jim ...

  7. http协议与https协议+UDP协议和TCP协议+WebSocket协议下服务端主动去发送信息+对称加密与非对称加密+get和post请求方式区别详解+浏览器内核以及jsj解析引擎

    TCP和UDP协议是TCP/IP协议的核心. 在TCP/IP网络体系结构中,TCP(传输控制协议,Transport Control Protocol).UDP(用户数据报协议,User Data P ...

  8. 计算机网络整理:UDP协议和TCP协议

    系列文章目录 HTTP协议和HTTPS协议 文章目录 系列文章目录 一.TCP/IP 各层协议 二.UDP协议和TCP协议 1.TCP和UDP的区别 2.UDP 协议 3.TCP 协议 1)特点 2) ...

  9. udp重发机制_UDP 协议

    UDP 简介 UDP的数据包同样分为头部(header)和数据(payload)两部分.UDP是传输层(transport layer)协议,这意味着UDP的数据包需要经过IP协议的封装(encaps ...

最新文章

  1. 使用 NSURLSession 开发一个支持后台下载和断点续传的下载工具
  2. 基于PyGame的乒乓球和滑雪小游戏
  3. 企业名片小程序时代,打破纸质名片局限!
  4. mysql中鼠标光标消失了_为什么我这里没有显示鼠标的悬停可改变页面颜色,以为什么我加载了mysql的jar文件还是不能显示报表的内容呢?...
  5. 【CCAI大咖秀】AlphaGo/Mobileye教父:智能科学需要融合机器学习、计算神经科学与认知科学
  6. 中文分词词性对照表(转)
  7. 移动Web应用程序开发HTML5篇
  8. react中的状态机_在基于状态图的状态机上使用React的模式
  9. 明年起,汉语正式纳入俄罗斯“高考”,光看题目我都要笑出声了!
  10. inno setup相关 (二)
  11. Python 编程 5 年后,我转向了 Go!
  12. 解决vmware报错:Mac OS X is not supported with binary translation.
  13. [升级失效]超星学术视频下载分析
  14. 4.深度强化学习------PPG(Phasic Policy Gradient)算法资料+原理整理
  15. Spring 核心思想
  16. Loss.backward()
  17. imx6ul之OpenWRT中使用mpd作为音频Server及其使用
  18. 读《程序员修炼之道-从小工到专家》有感
  19. 嗨,我的技术论坛上线啦!
  20. java获得windows系统当前时间与时间不符合

热门文章

  1. 一个男人不一定要靠女人对自己的温柔才能生活
  2. (android高仿系列)今日头条 --新闻阅读器 (二)
  3. c语言中常用的字符函数以及字符串函数
  4. wampserv设置虚拟主机
  5. php获取时间不正确,学习猿地-php获取时间不对的解决办法
  6. 5.VUE简单的组件间传值【父组件向子组件传值;子组件向父组件传值】
  7. ST MCU芯片的VCAP管脚话题
  8. Java面试题库,2021Java大厂面试真题
  9. js 控制表单input,textarea select为只读模式
  10. C语言输出字符,字符串的ASCII码的16进制数