![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
流媒体开发之路
文章平均质量分 61
记录音视频相关技术
熊彬彬
..
展开
-
Opus前向纠错
官网:https://opus-codec.org/Github:https://github.com/xiph/opus一、简介Opus 可以处理广泛的音频应用,包括 IP 语音、视频会议、游戏内聊天,甚至远程现场音乐表演。它可以从低比特率的窄带语音扩展到非常高质量的立体声音乐。支持的功能有:比特率从 6 kb/s 到 510 kb/s 采样率从 8 kHz(窄带)到 48 kHz(全带) 帧大小从 2.5 ms 到 60 ms 支持恒定比特率 (CBR) 和可变比特率 (VBR)原创 2022-04-10 22:30:55 · 2750 阅读 · 1 评论 -
Linux平台CEF离屏渲染
一、简介Chromium 嵌入式框架 (CEF)。是一个简单的框架,用于将基于 Chromium 的浏览器嵌入到其他应用程序中。CEF 支持广泛的编程语言和操作系统,并且可以轻松集成到新的和现有的应用程序中。它的设计从一开始就兼顾了性能和易用性。基本框架包括通过本机库公开的 C 和 C++ 编程接口,这些库将主机应用程序与 Chromium 和 Blink 实现细节隔离开来。它提供了浏览器和主机应用程序之间的紧密集成,包括对自定义插件、协议、JavaScript 对象和 JavaScript 扩展的原创 2022-01-25 17:04:47 · 3526 阅读 · 3 评论 -
Linux平台Mediasoup客户端开发指南
1、下载depot_toolsgit clone https://chromium.googlesource.com/chromium/tools/depot_tools.git2、设置环境变量export PATH=$PATH:/home/user/depot_tools3、下载webrtcmkdir webrtccd webrtcfetch --nohooks webrtcgclient synccd srcgit checkout -b m94 refs/rem..原创 2022-01-24 22:23:02 · 2279 阅读 · 0 评论 -
FFmpeg内存模型
内存模型简介从av_read_frame读取到一个AVPacket后怎么放入解码器队列? 从avcodec_recevice_frame读取到一个AVFrame后又怎么放入解压后的帧队列? 从现有的Packet拷贝一个新Packet的时候,有两种情况: ①两个Packet的buf引用的是同一数据缓存空间,这时候要注意数据缓存空间的释放问题。 ②两个Packet的buf引用不同的数据缓存空间,每个Packet都有数据缓存空间的copy。 内存模型更为精确的模型.转载 2021-12-31 16:22:50 · 250 阅读 · 0 评论 -
Linux平台Libyuv使用指南
官网:https://chromium.googlesource.com/libyuv/libyuv一、简介libyuv是一个google的开源项目,支持包括 YUV 缩放和转换功能。二、下载及编译git clone https://chromium.googlesource.com/libyuv/libyuvcd libyuvcmake .makemake install...原创 2021-12-31 15:11:36 · 2237 阅读 · 0 评论 -
FFmpeg常用命令大全
1、mp4文件转flv文件ffmpeg -i tiktok.mp4 -pix_fmt yuv420p -c:v libx264 -r 30 -profile:v baseline -b:v 2000k -acodec aac -ab 128k -ac 2 -ar 48000 -f flv tiktok.flv2、flv文件转rtp流ffmpeg -re -stream_loop -1 -i test.flv -an -vcodec copy -payload_type 107 -f rtp原创 2021-11-18 13:37:58 · 1021 阅读 · 0 评论 -
基于usrsctp接入webrtc服务器中的DataChannel功能
1.DataChannel简介在webrtc中通过DataChannel,可以实现点对点的消息通信,这些消息和音视频数据是通过同一udp socket被发送给对方的,因此也是具备NAT穿透功能的。DataChannel可以用来进行聊天消息的发送、点对点传送文件等,作为音视频通信外的另一种通信方式,DataChannel的意义还是很重要的。2.方案概述待续...参考:1、SCTP通用报文格式2、https://github.com/sctplab/usrsctp/blob/.原创 2021-11-01 13:06:17 · 2443 阅读 · 1 评论 -
H.264视频Profile-level-id字段解析
基于SIP协议的VOIP通信,该字段通常位于视频协商sdp报文中,如:1 video 23456 RTP/AVP 121 2 rtpmap:121 H264/90000 3 fmtp: 121 profile-level-id=42801E; packetization-mode=1 42801E分三部分0x42660x801000 0000 (二进制)0x1E30对应profile_idc(8 bits)、profile_iop(8 bits)、level_i...转载 2021-07-01 11:42:30 · 3202 阅读 · 0 评论 -
Mediasoup调试技巧
1、worker日志修改mediasoup-demo/server/config.js文件原创 2021-06-03 15:35:24 · 433 阅读 · 0 评论 -
流媒体会话描述协议:SDP
一、前言SDP (Session Description Portocol) 准确来说是一种会话描述格式,用于传递会话双方媒体流信息,一般会存在于其它流媒体协议的Body内容里,包括会话通知协议(SAP)、会话初始协议(SIP)、实时流协议(RTSP)、MIME 扩展协议的电子邮件以及超文本传输协议(HTTP)。SDP可包括以下媒体信息:媒体类型(音频、视频等);传输协议(RTP、H.320等);媒体格式(H264视频,AAC音频等);传输地址和端口;...原创 2020-12-25 13:47:12 · 514 阅读 · 0 评论 -
Windows平台下Mediasoup客户端开发指南
操作系统:Windows 10IDE:Visual Studio 2019GitHub:https://github.com/versatica/libmediasoupclient/官网文档:https://mediasoup.org/documentation/v3/libmediasoupclient/一、前言Windows版本的Mediasoup客户端需要基于libmediasoupclient和libwebrtc开发,关于这两个静态库如何编译我已经在前面两篇文章中有详细说明了.原创 2020-12-20 13:11:10 · 3107 阅读 · 3 评论 -
Windows平台下libmediasoupclient编译指南
操作系统:Windows 10IDE:Visual Studio 2019官网:https://mediasoup.org/documentation/v3/libmediasoupclient/一、前言libmediasoupclient是基于libwebrtc的C ++库,用于构建基于mediasoup的C ++客户端应用程序,支持Windows、Linux、Mac等主流操作系统。关于libwebrtc的下载及配置请参考我前一篇文章:Google开源项目WebRTC下载及编译。..原创 2020-12-15 23:07:09 · 2919 阅读 · 8 评论 -
Google开源项目WebRTC下载及编译
操作系统:Windows 10IDE:Visual Studio 2019一、前言由于构建mediasoup的Windows客户端需要用到Google开源的WebRTC项目,所以决定亲自动手编译试试。WebRTC是一个非常庞大的工程,由于墙的存在又将编译的难度拉伸了一个档次,不得不说整个过程真的很虐心,在这里记录一下。我所使用的所有软件版本就现在来说都是最新的,应该算是目前最佳的方案。二、梯子由于众所周知的原因,Google优秀的开源项目都被拦截在墙外面,这对我们这些想要师夷长技以制夷.原创 2020-12-13 11:31:52 · 4236 阅读 · 0 评论 -
VoIP通话之SIP协议
一、前言SIP(Session Initiation Protocol), 是属于应用层的控制协议,主要用于在一个或多个参与者之间创建,修改和中止会话(sessions).会话的类型包括IP电话, 多媒体流分发和多媒体会议等.SIP邀请(invitations)用于创建携带会话描述(如SDP信息)的会话,允许参与者使用一系列兼容的媒体类型. SIP使用一种叫代理服务器的元素来帮助对用户当前位置进行转发,对用户进行验证和授权,并为用户提供相应的功能. SIP同时也提供了注册函数以允许用户上传他们的当前原创 2020-12-12 23:16:16 · 2630 阅读 · 3 评论 -
VoIP通话之DTMF信号开发指南
一、前言DTMF信号即双音频信号,最先用于程控电话交换系统来代替号盘脉冲信号,主叫用户摘机按键拨号后,电话号码所对应的DTMF信号通过电话线传到程控交换机中的DTMF接受电路,交换机中的微机识别被叫电话号码后,接通主被叫用户实现双方通话。简单来说,DTMF信号就是在网络中传输话机按键拨号的数字。在可视对讲系统中,DTMF信号常用来控制开锁。二、DTMF信号分类目前传送DTMF信号有三种方式:A.通过通信协议传输(SIP信令)用SIP信令的INFO方法携带DTMF信号。为带外检测方式,原创 2020-12-04 17:23:25 · 3168 阅读 · 0 评论 -
VoIP服务器Asterisk安装及部署
操作系统:Ubuntu-Server 20.04一、安装sudo apt-get install asterisk二、基本配置编辑/etc/asterisk/sip.conf文件修改以下内容[general]context = defaulttcpbindaddr = 0.0.0.0tcpenable = yes在末尾添加100、101账号[100]type = friendusername=100secret = 100accountcode=10.原创 2020-12-01 11:24:55 · 3654 阅读 · 0 评论 -
P2P通信之原理篇
一、前言 当今互联网到处存在着一些中间件(Middle Boxes),如NAT和防火墙,导致两个(不在同一内网)中的客户端无法直接通信. 这些问题即便是到了IPV6时代也会存在,因为即使不需要NAT,但还有其他中间件如防火墙阻挡了链接的建立. 目前部署的中间件多都是在C/S架构上设计的,其中相对隐匿的客户机主动向周知的服务端(拥有静态IP地址和DNS名称)发起链接请求. 大多数中间件实现了一种非对称的通讯模型,即内网中的主机可以初始化对外的链接,而外网的主机却不能初始化对内网的链接, 除非经过中间..转载 2020-11-30 23:37:26 · 472 阅读 · 0 评论 -
P2P通信之TURN协议
一、前言上一篇P2P通信标准协议(一)介绍了在NAT上进行端口绑定的通用规则,应用程序可以根据这个协议来设计网络以外的通信。但是,STUN/RFC5389协议里能处理的也只有市面上大多数的Cone NAT(关于NAT类型可以参照P2P通信原理与实现),对于Symmetric NAT,传统的P2P打洞方法是不适用的。因此为了保证通信能够建立,我们可以在没办法的情况下用保证成功的中继方法(Relaying),虽然使用中继会对服务器负担加重,而且也算不上P2P,但是至少保证了最坏情况下信道的通畅,从而不至于受转载 2020-12-01 00:01:05 · 628 阅读 · 0 评论 -
P2P通信之STUN协议
一、前言在P2P通信之原理篇中介绍了P2P打洞的基本原理和方法,我们可以根据其原理为自己的网络程序设计一套通信规则,当然如果这套程序只有自己在使用是没什么问题的。可是在现实生活中,我们的程序往往还需要和第三方的协议(如SDP,SIP)进行对接,因此使用标准化的通用规则来进行P2P链接建立是很有必要的。本文就来介绍一下当前主要应用于P2P通信的几个标准协议,主要有STUN/RFC3489,STUN/RFC5389,TURN/RFC5766以及ICE/RFC5245。二、STUN简介在前言里我.转载 2020-11-30 23:56:21 · 751 阅读 · 0 评论 -
P2P通信之libnice的使用及分析
官网:https://libnice.freedesktop.org/GitHub:https://github.com/libnice/libnice一、前言libnice是一个实现交互式连接建立(ICE)标准(RFC 5245和RFC 8445)的库,它基于GLib库开发。原创 2020-11-29 23:16:28 · 2969 阅读 · 1 评论 -
WebRTC之ICE服务器coturn安装及部署
GitHub:https://github.com/coturn/coturn一、安装sudo apt-get install coturn原创 2020-11-21 23:40:38 · 1420 阅读 · 0 评论 -
基于nginx-rtmp-module搭建RTMP流媒体服务器
一、安装sudo apt-get install nginxsudo apt-get install libnginx-mod-rtmp原创 2020-11-18 22:56:13 · 355 阅读 · 0 评论 -
janus Streaming插件推流指南
ffmpeg -re -stream_loop -1 -i /home/test.mp4 -an -vcodec libvpx -payload_type 100 -f rtp rtp://127.0.0.1:5004?pkt_size=1200 -vn -acodec libopus -payload_type 111 -ar 48000 -ac 2 -f rtp rtp://127.0.0.1:5002?pkt_size=1200-re:按照帧率发送,否则会按照最高速率发送-i:指定输入文件名.原创 2020-11-16 23:48:44 · 2760 阅读 · 5 评论 -
janus web客户端开发指南
janus是一套完整的音视频会议系统,包括了WebRTC流媒体服务器和客户端API两大部分,官方提供了web、安卓、ios标准的SDK接口,以及详细的开发文档。原创 2020-11-11 22:04:22 · 2469 阅读 · 3 评论 -
janus公网部署注意事项
首先声明下我购买的是阿里云的服务器,阿里的服务器默认会有个安全组的配置,也就是只允许通过特定的端口访问该服务器。而webrtc会用到相当多的端口号,所以我直接开放了服务器所有的端口。当启动Echo Test时,服务器会报错:ICE failed for component 1,这就是遇到net打洞失败的问题了。要解决该问题需修改配置文件/opt/janus/etc/janus/janus.jcfg1、修改stun服务器的地址和端口号国内免费的stun服务器有:stun1..原创 2020-11-05 00:17:59 · 1736 阅读 · 1 评论 -
WebRTC之Mediasoup服务器安装及部署
官网:https://mediasoup.org/GitHub:https://github.com/versatica/mediasoup-demo/操作系统:Ubuntu20.04Mediasoup-demo版本:v3一、安装工具sudo apt-get install nodejssudo apt-get install npmsudo npm install -g gulp-cli二、下载源码git clone https://github.com/versati原创 2020-10-29 22:48:00 · 4998 阅读 · 9 评论 -
WebRTC之janus服务器安装及部署
官网:https://janus.conf.meetecho.com/GitHub:https://github.com/meetecho/janus-gateway操作系统:Ubuntu20.04一、工具安装sudo apt install gitsudo apt install makesudo apt-get install aptitude二、基础依赖库sudo apt-get install libmicrohttpd-devsudo apt-get instal原创 2020-10-23 23:22:37 · 3564 阅读 · 1 评论