当前位置: 首页 > news >正文

校园网站怎么做HTML城市文化建设的网站

校园网站怎么做HTML,城市文化建设的网站,电影手机网站建设,东莞网站关键词优化排名前言 本文主要介绍以tcp方式实现rtsp拉流。 流程图 流程说明: 客户端发起tcp请求,如向真实相机设备请求,端口一般默认554;tcp连接成功,客户端与服务端开始rtsp信令交互;客户端收到play命令响应后,开启线…

前言

本文主要介绍以tcp方式实现rtsp拉流。

流程图

在这里插入图片描述

流程说明:

  1. 客户端发起tcp请求,如向真实相机设备请求,端口一般默认554;
  2. tcp连接成功,客户端与服务端开始rtsp信令交互;
  3. 客户端收到play命令响应后,开启线程等待接收数据,同时开启定时器,定时向服务端发送命令用于心跳保活
  4. 服务端向客户端发送音视频数据;
  5. 客户端接收rtp数据并进行解复用;

设计

  • 发送tcp请求
    • 创建socket
    • connect
    • 设置非阻塞
    • 设置tcp超时时间
// 建立tcp连接
m_tcpClient = std::make_shared<TcpClient>(nullptr, this);
if (!m_tcpClient.get()|| 0 != m_tcpClient->TcpCreate()|| 0 != m_tcpClient->TcpConnectByTime(ip.c_str(), port, 5)|| 0 != m_tcpClient->TcpSetNoBlock(true)|| 0 != m_tcpClient->TcpRecvTimeout(10))break;
  • rtsp信令交互
// 创建command类
m_command = std::make_shared<CRtspCommand>(RTSP_TRANSPORT_RTP_TCP, m_tcpClient, m_func, m_user);
if (!m_command.get())break;// 创建rtsp client
if(!m_command->CreateRtspClient(m_rtspUrl, username, userpasswd))break;// 发送describe
int ret = m_command->SendDescribe();
if (0 != ret)break;
  • 补充:创建rtsp client,发送describe后根据回调进行后续命令操作(使用开源库ireader/librtsp进行rtsp信令交互)
bool CRtspCommand::CreateRtspClient(const std::string& uri, const std::string& username, const std::string& userpasswd)
{if (uri.empty() || username.empty() || userpasswd.empty())return false;rtsp_client_handler_t handler;handler.send = SendCallback;handler.rtpport = RtpPortCallcback;handler.onannounce = AnnounceCallback;handler.ondescribe = DescribeCallback;handler.onsetup = SetupCallback;handler.onplay = PlayCallback;handler.onpause = PauseCallback;handler.onteardown = TeardownCallback;handler.onrtp = RtpDataCallback;m_rtsp = rtsp_client_create(uri.c_str(), username.c_str(), userpasswd.c_str(), &handler, this);if (!m_rtsp)return false;return true;
}
  • 启动线程等待接收数据
#define RECV_DATA_SIZE (64*1024*1024)void CRtsp::RtspWorker()
{std::shared_ptr<char> dataPacket(new char[RECV_DATA_SIZE], std::default_delete<char[]>());memset(dataPacket.get(), 0x00, RECV_DATA_SIZE);int recvLen = 0;while (m_running){recvLen = m_tcpClient->TcpRecv(dataPacket.get(), RECV_DATA_SIZE);if (recvLen <= 0)       // 数据接收失败{break;}if (0 != m_command->InputData(dataPacket.get(), recvLen)){break;}memset(dataPacket.get(), 0x00, STREAM_DATA_SIZE);}
}
  • 启动定时器进行心跳保活(tcp方式需要
// 创建定时器
m_timer = std::make_shared<ZDTimer>(10, 1000);
m_timer->Start();// 开启定时器
m_timer->AddTask(10000, [this]() {// 10s发送一次get parameter命令int count = rtsp_client_media_count((rtsp_client_t*)m_rtsp);if (count > 0)rtsp_client_get_parameter(m_rtsp, 0, NULL);
});// 停止定时器
if (m_timer.get())
{m_timer->Stop();m_timer.reset();
}
  • 接收视频数据并解复用(使用开源库ireader/librtp库进行rtp数据解复用)
// 1.创建解复用器
m_demuxer = rtp_demuxer_create(100, profile ? profile->frequency : 90000, payload, encoding.c_str(), RtpPacketCallback, this);// 2. 塞数据
rtp_demuxer_input(m_demuxer, data, len);// 3. 数据回调
static int RtpPacketCallback (void* param, const void* packet, int bytes, uint32_t timestamp, int flags)
{// 裸流数据处理
}// 4. 销毁
rtp_demuxer_destroy(&m_demuxer);

效果

在这里插入图片描述

http://www.yayakq.cn/news/64863/

相关文章:

  • 智能建站制作制作企业网站怎么报价
  • 3d建模素材网站自己怎么做返利网站吗
  • 申请域名建立网站wordpress文章添加目录
  • 哈尔滨中国建设银行网站首页北京注册网站
  • 做淘宝联盟必须要有网站吗企业建站套餐价格表
  • 给公司建立网站不可以做到的有关天猫网站开发的论文
  • 济南网站建站自媒体创业计划书word
  • wordpress站点标题和副标题鼓楼区建设局网站
  • 太原建站推广软件开发的七个流程
  • 南昌网站建设培训班内部搜索引擎优化
  • 做网站电话号码福州大型网站设计公司
  • 安阳实力网站建设首选怎么做一个网页
  • 无锡建设网站公司防城港网站设计
  • 蚌埠网站建设网站跟京东类似的网站
  • 自动翻译网站软件做网站如何防止被骗
  • 个人网站网页制作国内产品设计公司排名
  • 做最最优秀的视频网站有哪些河南安阳市有几个县
  • 南昌房产网官网什么建站程序最利于seo
  • 网站后台用什么语言网站怎么添加百度商桥
  • 北京企业建设网站公司小型办公室装修
  • 商用营销型网站建设小规模企业做网站
  • 宣讲家网站两学一做心得体会海口h5公司
  • 郑州高新区网站建设西宁做网站君博优选
  • 如何做医疗网站的专题页动漫设计是干嘛的
  • 电脑怎么做服务器 网站北京网站网页设计
  • 企业网站建设方案大全网站的信任度
  • 建设网站需要学习什么免费的视频模板网站
  • 怎么写网站规划方案十大免费建站app
  • 网站开发和网页上传做网站签了合同后不想做了
  • 做红酒网站深圳住房建设局官方网站