webrtc入门系列(二)easy_webrtc_server 入门example测试

这篇具有很好参考价值的文章主要介绍了webrtc入门系列(二)easy_webrtc_server 入门example测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

《webrtc入门系列(一)easy_webrtc_server 入门环境搭建》
《webrtc入门系列(二)easy_webrtc_server 入门example测试》
《webrtc入门系列(三)云服务器coturn环境搭建》
《webrtc入门系列(四) zlmediakit webrtc sdp交互详细解读》


rtp_src_example

这个样例,非常的典型,对我们做设备端的同学来说,就需要一样这样的例子,模拟IPC发送视频到web播放。

环境

demo运行系统:Ubuntu20.04
播放环境:win10,chrom浏览器、edge浏览器
系统这里特别说下,我用Ubuntu18.04测试失败,打开文件错误,应该是Ubuntu18.04apt默认安装的ffmpeg的版本编译选项的问题。
解决办法,要么升级系统,要么自己源码安装ffmpeg。

测试过程

  1. 拷贝测试文件到build目录

rtp_src_example.cc里面是读了一个test.flv文件发送,作者工程里又只有一个test.h264,看代码是用ffmpeg接口打开的文件,所以格式没关系,ffmpge能自己解析,我们只要输入一个视频文件即可。拷贝test.h264到build目录,改名test.flv或者代码打开test.h264即可
cd easy_webrtc_server/build;cp ../test.h264 test.flv
2. 启动测试程序
记得sudo启动

./rtp_src_example 192.168.1.16 8000

将IP替换成你运行demo系统的IP
3. 打开网页播放视频
将easy_web_rtc目录下面index.html文件直接拖到浏览器打开,IP改成Ubuntu的ip地址,点call即可以看到视频。
webrtc入门系列(二)easy_webrtc_server 入门example测试

chrom浏览器和Edge浏览器测试OK。
Firefox浏览器不允许跨源请求。

至此,就可以完整的抓包和分析代码学习了。

源码简读

muduo不支持udp,本项目基于muduo的Channel类简单封装一个udp通信的类;
基于muduo_http建立一个http信令服务器,交换webrtc所需要的sdp信息。
网页上打开一个http连接,服务器建立一个WebRtcTransport,传输层是一个UdpSocket。
WebRtcTransport生成sdp信息,通过http协议传到前端。
sdp信息包括媒体信息如编码格式、ssrc等,stun协议需要的ice-ufrag、ice-pwd、candidate,dtls需要的fingerprint。
前端通过candidate获取ip地址和端口号,通过udp协议连接到服务器的。
服务器收到udp报文,先后通过类UdpSocket接收报文;StunPacket和IceServer解析stun协议,此处的Stun协议解析,只要收到stun request,验证账户密码成功,就认为连接成功。
stun协议交互成功后,通过DtlsTransport进行dtls握手;交换密钥后就可以初始化SrtpChannel。此处没有通过签名验证客户端的证书,所以省略了前端返回sdp的步骤。
读取h264码流文件,通过ffmpeg生成rtp流,通过SrtpChannel加密,通过UdpSocket发送,前端就可以看到视频。文章来源地址https://www.toymoban.com/news/detail-412212.html

//起一个线程读取发送文件,WriteRtpCallback函数回调将数据通过webrtc的端口发送
std::thread flv_2_rtp_thread(
      [&webrtc_session_factory]() { H2642Rtp("./test.h264", &webrtc_session_factory); });

  //udp通道
  UdpServer rtc_server(&loop, muduo::net::InetAddress("0.0.0.0", port), "rtc_server", 2);
  
  //http信令服务器,交换sdp
  HttpServer http_server(&loop, muduo::net::InetAddress("0.0.0.0", 8000), "http_server",
                         TcpServer::kReusePort);

  //信令响应
  rtc_server.SetPacketCallback([&webrtc_session_factory](UdpServer* server, const uint8_t* buf,
                                                         size_t len,
                                                         const muduo::net::InetAddress& peer_addr,
                                                         muduo::Timestamp timestamp) {
    WebRTCSessionFactory::HandlePacket(&webrtc_session_factory, server, buf, len, peer_addr,
                                       timestamp);
  });

  http_server.setHttpCallback(
      [&loop, &webrtc_session_factory, port, ip](const HttpRequest& req, HttpResponse* resp) {
        if (req.path() == "/webrtc") {
          resp->setStatusCode(HttpResponse::k200Ok);
          resp->setStatusMessage("OK");
          resp->setContentType("text/plain");
          //跨域
          resp->addHeader("Access-Control-Allow-Origin", "*");
          auto rtc_session = webrtc_session_factory.CreateWebRTCSession(ip, port);
          //回复本地sdp
          resp->setBody(rtc_session->webrtc_transport()->GetLocalSdp());
          std::cout << rtc_session->webrtc_transport()->GetLocalSdp() << std::endl;
        }
      });
  loop.runInLoop([&]() {
    rtc_server.Start();
    http_server.start();
  });
  loop.loop();
  
  

到了这里,关于webrtc入门系列(二)easy_webrtc_server 入门example测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Hadoop之hadoop-mapreduce-examples测试执行及报错处理

    Hadoop之hadoop-mapreduce-examples测试执行及报错处理

      Hadoop Map/Reduce是一个使用简易的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并以一种可靠容错的方式并行处理上T级别的数据集。一个Map/Reduce 作业(job) 通常会把输入的数据集切分为若干独立的数据块,由 map任务(task)以完全

    2024年02月05日
    浏览(11)
  • NAPT之NAT地址池、NAPT之easy-ip、NAT-Server

    NAPT之NAT地址池、NAPT之easy-ip、NAT-Server

    NAPT之NAT地址池 拓扑    需求     实现企业内网主机(PC1-PC4)访问公网网站服务器(Server1) 配置步骤 第一步:给PC1-PC4/Server1配置接口IP地址,掩码,网关  第二步:R1配置默认路由 -边界路由器R1,配置接口IP地址 -边界路由器R1,配置默认路由  第三步:配置NAPT之地址池NAT  

    2024年02月13日
    浏览(11)
  • Java快速入门系列-7(测试与调试)

    Java快速入门系列-7(测试与调试)

    在软件开发的生命周期中,测试与调试是不可或缺的环节。它们帮助开发者确保代码的质量和系统的稳定性。本章将深入探讨Java中的测试与调试方法,包括单元测试、集成测试、系统测试以及调试技巧和工具的使用。 单元测试是验证软件设计中最小可测试部分的正确性的实

    2024年04月11日
    浏览(12)
  • 自然语言处理从入门到应用——LangChain:提示(Prompts)-[示例选择器(Example Selectors)]

    分类目录:《大模型从入门到应用》总目录 LangChain系列文章: 基础知识 快速入门 安装与环境配置 链(Chains)、代理(Agent:)和记忆(Memory) 快速开发聊天模型 模型(Models) 基础知识 大型语言模型(LLMs) 基础知识 LLM的异步API、自定义LLM包装器、虚假LLM和人类输入LLM(

    2024年02月14日
    浏览(32)
  • Spring Authorization Server入门 (三) 集成流程说明、细节补充和各种方式获取token测试

    Spring Authorization Server入门 (三) 集成流程说明、细节补充和各种方式获取token测试

    在上一篇文章中的AuthorizationConfig.java配置类中,类上有三个注解,分别是@Configuration、@EnableWebSecurity和@EnableMethodSecurity注解,虽然在类中有注释,但是这里在细讲一下,同时放一下官网的说明 @EnableWebSecurity 加载了WebSecurityConfiguration配置类, 配置安全认证策略。 加载了Authenti

    2024年02月11日
    浏览(10)
  • 九、常用网络协议与应用——静态NAT、动态NAT、NAPT、Easy ip NAT、NAT server

    九、常用网络协议与应用——静态NAT、动态NAT、NAPT、Easy ip NAT、NAT server

    网络地址转换技术NAT(Network Address Translation)主要用于实现位于内部网络的主机访问外部网络的功能。 可以在局域网内部使用 私网地址+NAT====解决ipv4地址枯竭问题 ipv4地址:2^32=42.9亿个 全球独一无二,只有一个地方在使用 私网地址不能在公网(电信、联通、移动)上被路由

    2024年01月20日
    浏览(12)
  • WebRTC系列--WebRTC音频支持RedFEC的修改

    WebRTC在最新的代码中对opus的编码的包,默认使用red的方式进行一次冗余处理;冗余包在解码端的处理在其他版本中都有支持;这篇文章讲分两部分,即:编码端添加冗余,解码端解冗余;两大章节分析; 在开始分析前,需要熟悉WebRTC中的 WebRTC系列-SDP之CreateOffer、 WebRTC系列

    2024年02月16日
    浏览(9)
  • Spring Security 6.x 系列【28】授权服务器篇之Spring Authorization Server 1.0 入门案例

    Spring Security 6.x 系列【28】授权服务器篇之Spring Authorization Server 1.0 入门案例

    有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.0.4 本系列Spring Security 版本 6.0.2 本系列Spring Authorization Server 版本 1.0.2 源码地址:https://gitee.com/pearl-organization/study-spring-security-demo 在前几篇文档中,我们学习了 OAuth 2.0 协议,并使用 spring-security-oauth2-client 完成

    2024年02月12日
    浏览(13)
  • 【Pyhton入门系列】第十三篇:Python自动化测试和单元测试

    自动化测试是软件开发中不可或缺的一部分,它可以提高软件质量、减少人工测试工作量,并确保代码的稳定性。Python作为一种简洁而强大的编程语言,提供了丰富的测试框架和工具,使得自动化测试和单元测试变得更加容易。 自动化测试是指使用脚本或工具来执行测试任务

    2024年02月12日
    浏览(14)
  • API 渗透测试从入门到精通系列文章(下)

    API 渗透测试从入门到精通系列文章(下)

    导语:在本系列文章的前面一部分我们从使用 Postman 开始,创建了集合和请求,并通过 Burp Suite 设置为了 Postman 的代理,这样我们就可以使用 Burp 的模糊测试和请求篡改的功能。 在本系列文章的前面一部分我们从使用 Postman 开始,创建了集合和请求,并通过 Burp Suite 设置为了

    2024年02月03日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包