首页 > 其他分享 >ZLMediaKit WebRTC用法介绍

ZLMediaKit WebRTC用法介绍

时间:2023-08-01 12:38:48浏览次数:42  
标签:std sess ZLMediaKit 创建 server 用法 WebRTC

一、WebRTC简介

WebRTC是一个开源的实时通信技术,它支持浏览器和原生应用程序之间的实时音频/视频通信。WebRTC为音频和视频的传输提供了支持,也为数据的传输提供了支持,使得开发者可以用较少的代码来实现实时通信的功能。

二、ZLMediaKit WebRTC介绍

ZLMediaKit是一个开源的流媒体服务框架,它深度结合了WebRTC技术,可以快速搭建一个可用的WebRTC服务器。ZLMediaKit WebRTC提供了完整的音频/视频通话功能和数据传输功能,还提供了强大的跨平台能力,支持Windows、Linux、MacOS等多个平台。

三、ZLMediaKit WebRTC的安装与配置

首先,你需要从ZLMediaKit的官网下载安装包(http://www.zlmediakit.com/)。解压后,执行以下命令:

cd ZLMediaKit
    ./configure
    make
    make install

安装完成后,你需要在配置文件中设置一些参数。常用的参数有:

//启用WebRTC模块
    enable_webrtc=1
    //WebRTC监听地址
    rtc_server_ip=127.0.0.1
    //WebRTC监听端口
    rtc_server_port=8080

四、ZLMediaKit WebRTC的实时通信功能

接下来,我们将介绍ZLMediaKit WebRTC的实时通信功能。

1.创建会话

首先,我们需要创建一个WebRTC会话,代码如下:

std::shared_ptr<RTC::WebRTC>makeSession(const std::string& peer_ip, uint16_t peer_port,bool enable_dtls,bool enable_ice){
        //创建WebRTC会话
        std::shared_ptr<RTC::WebRTC> sess = std::make_shared<RTC::WebRTC>();
        //设置对端地址
        sess->setPeerAddress(peer_ip,peer_port);
        //设置DTLS和ICE是否启用
        sess->setEnableDTLS(enable_dtls);
        sess->setEnableICE(enable_ice);
        return sess;
    }

2.创建流媒体服务器

我们需要创建一个流媒体服务器,代码如下:

//创建流媒体服务器
    MediaServer server(&logger,&parser);
    //设置流媒体服务器监听地址和端口
    server.mINIConfig.SetVal(“http.”,”http_port”,”80”);
    //设置流媒体服务器存储地址和端口
    server.mINIConfig.SetVal(“hls.”,”record_path”,”/data/media”);
    server.mINIConfig.SetVal(“hls.”,”record_file_dir”,”./media/live”);
    server.mINIConfig.SetVal(“hls.”,”record_file_prefix”,”${app}_${stream}”);
    server.mINIConfig.SetVal(“hls.”,”record_type”,”mp4”);

3.创建音频/视频轨道以及数据通道

我们需要创建音频/视频轨道以及数据通道,代码如下:

//创建音频轨道
    auto audio_track = std::make_shared<RTC::AudioTrack>();
    //创建视频轨道
    auto video_track = std::make_shared<RTC::VideoTrack>();
    //创建数据通道
    auto data_channel = std::make_shared<RTC::DataChannel>();

4.创建数据流

接着,我们需要创建数据流。代码如下:

//创建数据流
    auto data_stream = std::make_shared<RTC::DataStream>();
    //设置数据流名称
    data_stream->setId(0);
    //设置数据流是否可靠
    data_stream->setReliable(true);

5.添加音频/视频轨道和数据通道

现在我们将音频/视频轨道和数据通道添加到会话中。代码如下:

//添加音频轨道
    sess->addTrack(audio_track);
    //添加视频轨道
    sess->addTrack(video_track);
    //添加数据通道
    sess->addChannel(data_channel);

6.启动WebRTC传输

现在我们已经准备好了,可以启动WebRTC传输了。代码如下:

//启动WebRTC传输
    server.startWebRTC(sess);
    //等待会话结束
    sess->wait();
    //关闭WebRTC服务器
    server.stopWebRTC();

五、ZLMediaKit WebRTC的数据传输功能

接下来,我们将介绍ZLMediaKit WebRTC的数据传输功能。

1.创建数据发送者和接收者

首先,我们需要创建数据发送者和接收者。代码如下:

//创建数据发送者
    auto sender = std::shared_ptr<RTC::DataSender>(RTC::DataSender::create());
    //创建数据接收者
    auto receiver = std::shared_ptr<RTC::DataReceiver>(RTC::DataReceiver::create());

2.发送数据

接下来,我们将向数据接收者发送数据。代码如下:

std::string data = “Hello, world!”;
    sender->sendData(data);

3.接收数据

接下来,我们将从数据发送者接收数据。代码如下:

std::string data;
    receiver->receiveData(data);
    std::cout << data << std::endl;

六、ZLMediaKit WebRTC的兼容性

ZLMediaKit WebRTC支持所有标准的浏览器,包括谷歌浏览器、苹果 Safari、火狐浏览器等。

七、总结

通过本文的介绍,我们了解了ZLMediaKit WebRTC的实时通信功能、数据传输功能以及兼容性。通过对ZLMediaKit WebRTC的熟练应用,我们可以快速搭建一个可用的WebRTC服务器,实现音频/视频通话和数据传输等功能。

标签:std,sess,ZLMediaKit,创建,server,用法,WebRTC
From: https://blog.51cto.com/u_16159766/6919219

相关文章

  • 转载 STL用法
    C++referencecppreference中文版STL算法random_shuffle手写随机函数sort(bg,ed,cmp);//排序,bged为指针/迭代器。O(nlogn)stable_sort(bg,ed,cmp);//稳定排序nth_element(bg,mid,ed,cmp);//将mid的值替换为第mid-bg+1大的元素,mid左侧的值均小于mid的值,右侧均大于mid的值......
  • C语言中EOF的意义与用法
    EOF,为EndOfFile的缩写,通常在文本的最后存在此字符表示资料结束。在微软的DOS和Windows中,读取数据时终端不会产生EOF。此时,应用程序知道数据源是一个终端(或者其它“字符设备”),并将一个已知的保留的字符或序列解释为文件结束的指明;最普遍地说,它是ASCII码中的替换字符(Contr......
  • 【数据结构】vector用法
    1.初始化:vector<类型>标识符vector<类型>标识符(最大容量)vector<类型>标识符(最大容量,初始所有值)inti[5]={1,2,3,4,5}vector<类型>vi(i,i+2);//得到i索引值为3以后的值vector<vector<int>>v;二维向量//这里最外的<>要有空格。否则在比较旧的编译器下无法通过2.常......
  • FFmpeg方法用法大全【欢迎补充】
    1.定义FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开......
  • nmap用法
    Ping扫描nmap-easily-ping-scan-all-addresses-in-my-subnetnmap-sP192.168.122.0/24 DHCP扫描Nmap扫描教程之网络基础服务DHCP服务类  sudonmap-sU-p67--script=dhcp-discover192.168.122.0/24 iprsudonmap--scriptbroadcast-dhcp-discover-e......
  • pandas模块---------------------------------常用求平均average的用法
    求平均值代码:importpandasaspd#导入模块df=pd.read_excel(r'C:\Users\Administrator/Desktop/test/1.xlsx')#文件路径a=lambdax:x.mean(1).round(2)#lambda函数m=a(df.iloc[:,1:3])#传入第1-3列计算平均值m=pd.DataFrame(m,columns=['平均分'])#转成dataframe,命名列df['......
  • spring RestTemplate用法详解
    前面介绍过spring的MVC结合不同的view显示不同的数据,如:结合json的view显示json、结合xml的view显示xml文档。那么这些数据除了在WebBrowser中用JavaScript来调用以外,还可以用远程服务器的Java程序、C#程序来调用。也就是说现在的程序不仅在BS中能调用,在CS中同样也能调用,不过你需要......
  • Bitset用法
    众所周知\(Bitset\)可以将一些\(O(n)\)的操作优化为\(O(N/w)\)相当于优化了\(>=\)一只\(log\)!!!\(bitset\)每一位占一个\(bit\),而不是一个\(Byte\)!!!若一次操作复杂度为\(O(N)\)\(bitset\)的操作复杂度为\(O(N/w)\)\(w\)为计算机字长,\(w\)位系统字长为\(w\)相比之下,空间......
  • C语言中.与->的用法介绍
    (一)基础结构体用点,结构体指针用箭头。a->b 的含义是 (*a).b****。  现代的标准化的C语义上来说, -> 可以用 * 和 . 的组合实现。简单的说,就是一个快捷方式,一个语法糖。(二)例子在机器码和汇编的角度来看,不存在变量,不存在struct这种东西,只存在寄存器和一个叫做内存的大数......
  • 【webpack系列】从基础配置到掌握进阶用法
    前言本篇文章将介绍一些webpack的进阶用法,演示内容继承自上一篇文章的内容,所以没看过上一篇文章的建议先学习上一篇内容再阅读此篇内容,会更有利于此篇的学习~文件指纹文件指纹指的是打包输出的文件名后缀,一般用来做版本管理、缓存等webpack的指纹策略有三种:hash、chunkhash、content......