
流媒体
文章平均质量分 76
王log
懒得写描述
展开
-
lsquic使用《二》--echo服务
官方实现的echo的客户端及服务端demo功能是客户端发送字符服务端原样返回,但是实现比较复杂,对于熟悉流程来说不友好,因此参考这个lsquic-tutorial实现了一个简单版本的,主要用于理解流程。 lsquic的结构体变量定义后一定得memset将变量所有成员初始值设置为0(或者说NULL),不然会有意想不到的bug出现。1、client端1.1、数据输入并发送 客户端使用libev作为事件循环的驱动,不断侦听stdin输入,遇到换行符即启动调用lsquic_stream_wan原创 2021-12-09 20:54:27 · 3990 阅读 · 0 评论 -
lsquic使用《一》--概述
因为想使用下quic协议,所以开源框架中选了lsquic,C语音实现,支持客户端和服务端,然后文档也是开源框架中较为丰富的。支持QUIC V1、Draft-29、27,Q043,Q046及Q050。对应github的commit是:df67278304ce 。V3.03版本之后两个commit。1、lsquic特征与架构1.1、特征DPLPMTUD,一种在某一特定网络路径中探测单次能发送最大的UDP包大小的方法,因为QUIC是自己实现打包的故用这个方法能提升性能;ECN,显式拥塞通知;S原创 2021-11-23 20:30:09 · 8091 阅读 · 0 评论 -
ffmpeg 多文件指定时间进行混音命令
有多个音频文件需要混音,但是每个音频文件需要在指定的时间加入混音流程,如A、B、C三个文件,B、C分别在第5秒、第15秒混在输出文件中。1、命令结合adelay及amix filter完成ffmpeg -i fangtang.wav -i lx.wav -filter_complex "[1]adelay=delays=5000|5000[aud1];[0][aud1]amix=inputs=2" -y out.aac第二个文件 lx.wav的两个通道都延迟5000ms加入混音流程。若是最新版本原创 2021-09-29 10:23:58 · 2035 阅读 · 0 评论 -
webrtc服务器压测工具使用
主要介绍3个开源的webrtc压力测试框架–kite,pion及srs_bench,以janu服务器为例。1、KITE KITE整合了Selenium和Aullure。Selenium 是一个开源的浏览器自动化框架,支持集群化(grids),不同的节点可以运行不同的操作系统类型/版本、浏览器类型/版本,这样我们就可以在各种操作系统和浏览器的组合下自动化测试 Web 应用了。Allure 则是一个开源的测试报告工具,用来展示测试结果。有开源版本也有商用版本。重要特征:支持linux、win原创 2021-08-07 10:15:42 · 3060 阅读 · 2 评论 -
webrtc ice(rfc5245)记录
根据janus的ICE流程抓包记录rfc5245 ICE标准中的一些流程1、reflex及relay候选地址收集(rfc5245-4.1.1.2) agent通过不带验证信息的Binding请求(stun协议)或Allocate请求(必须得有鉴权)[turn协议]获取server reflexive或relay地址。agent可能会按照一定的时间间隔发起新的stun或turn请求,比如500ms,这个请求可能是上次请求的重试也可能是新的host候选地址对。抓包2、peer reflexive原创 2021-07-20 20:42:22 · 407 阅读 · 1 评论 -
ffmpeg 音频混流--命令与代码说明
ffmpeg可使用filter实现各种复杂的操作,混音只是其中一小部分功能。代码实现因为参考已经说的较为详细,我这里补充一些我认为重要的。1、命令实现ffmpeg -i dragen.opus -i Monsters.opus -filter_complex "[0:a]aresample=8000[a0];[1:a]adelay=delays=6400|6400,aresample=8000[a1];[a0][a1]amix=inputs=2" -b:a 20k -y mixer.aac -v原创 2021-05-28 21:11:55 · 4478 阅读 · 0 评论 -
Janus服务器《四》--事件处理机制
1、总述虽然我们可以使用Admin API来控制及和janus服务器进行交互,但是Admin API是基于poll机制的,这就意味我们必须自动发起请求去获得我们需要的信息。如果janus处理的请求的数量巨大则我们会遇到性能问题,这将导致我们不能实时的获取我们需要的信息。若要实时获得关于会话、句柄(hsandle)相关的信息的话我们就得使用event机制。...翻译 2021-05-09 19:11:01 · 535 阅读 · 0 评论 -
Janus服务器《三》--Admin/Monitor API
1、Admin/Monitor API 用于向janus服务器查询一些和会话及句柄有关的信息,在查找媒体流层面问题时显得非常有用。目前Admin API只能用于信息查询不能与janus进行更多的交互(如强制删除会话),更多的交互还是得使用RESTful、Websockets等transport模块的API。该API只提供同步机制,如果你需要的是异步通知机制的话请使用janus的event handler。默认的根请求路径为/admin 。 该API接口默认是关闭的,你可以在相应的传输方式的配置文翻译 2021-05-08 21:08:44 · 1138 阅读 · 0 评论 -
Janus服务器《二》--Transport 模块的API
官方关于JanusRESTful、WebSockets等传输模块的API说明的文档的翻译。 从Janus的V0.0.6开始就实现了REST、WebSockets、RabbitMQ、MQTT、Nanomsg及UnixSockets接口用于和janus服务器进行交互。(这些通信方式均是可选的,都需要第三方库的支持)。所有这些接口统一使用的json消息进行通信。 其它接口和Rest接口有两处不同:《1》、访问特定session及handle时;《2》、部分的通知处理机制;1、REST接口1.翻译 2021-05-05 21:37:33 · 1122 阅读 · 0 评论 -
janus服务器《一》--总概述
工作使用janus服务器但是网上相关资料比较少,于是准备翻译一下官方文档。1、janus框架结构 janus是基于SFU结构的WebRTC流媒体服务器,由C语言进行编写因此性能非常优秀,整体架构图如下: janu主要由三部分组成,分别是Core、Plugin和Transport。 《1》、Core: Janus的核心部分,其功能是将传输涉及到的所有Janus连接在一起,实现了server端跟浏览器的交互、处理交互双方的会话(session)、处理媒体信令及协商。Core实现了WebRTC原创 2021-05-05 11:58:57 · 2296 阅读 · 2 评论 -
live555 性能优化整理
1、发送优化2、调度优化MultiFramedRTPSink.cpp的sendPacketIfNecessary函数3、内存分配优化《1》、定时器内存使用无锁内存池《2》、 server端SDP信息自己手动设置如果不自己手动设置,当客户端首次连接时server端会先创建对应媒体流如264流的source实例用于SDP协商,然后销毁,接着再创建用于实际视频流传输的source。自己手动设置后能省下一次source实例创建销毁、sdp设置的流程。5、参考《1》、基于live555 RTS原创 2021-01-06 16:52:10 · 2143 阅读 · 1 评论 -
海思webrtc交叉编译
一、准备1、在ubuntu14.04 64bit 因为arm-hisiv400-linux是32位的,故需要在该系统安装兼容32位程序运行的库,参考博客2、webrtc源码 (2019年9月之前的版本,这之后的版本默认是C++14的(由git log可获取该信息),用海思编译器编译会有问题,release版本的分支号branch-heads/m77,这个版本之前的应该都可以。本文使用m77分支)分支切换命令WebRTC developmentgit checkout -b hisi_br原创 2020-11-12 14:14:00 · 3859 阅读 · 0 评论 -
优化视频流传输涉及的编码技术
整理目前接触到的一些提高视频流(某些)指标的H264/265的编码技术1、intra-refresh技术(帧内刷新技术) 帧内刷新技术能降低网络延时、降低网络压力,降低丢包率(传输出差率),平滑码流,但是会降低编码器的效率(即是编码复杂度提升),H264/265均支持该技术。海思芯片开启该功能后对比:《1》、码流类型;《2》、100帧1080P的264码流,CBR码率控制,大小差异;2、 长参考帧编码技术(Long-Term Reference LTR) 该技术可用于提高编码效率原创 2020-10-24 11:16:43 · 1820 阅读 · 0 评论 -
ONVIF获取265的rtsp地址,ptz控制记录
1、获取url、ptz或imaging的一般流程《1》、注意 GetCapabilities是向下兼容的接口只能获取到设备支持的最基本功能。GetServices接口能获取到设备支持的所有功能,H265格式的RTSP地址的获取必须通过该接口获得。原文:《2》、onvif test工具的对比2、获取profiles 以获取H265的为例,需要onvif开发框架支持265,该环境搭建看参考6.1void GetProfileUsedMedia2(){ char media_a原创 2020-06-30 17:05:39 · 2589 阅读 · 0 评论 -
H264或HEVC及AAC音频的PS流打包
1、使用libmpeg使用libmpeg库完成PS流格式封装,对于GB28181原创 2020-04-30 14:39:48 · 3683 阅读 · 0 评论 -
转--ffmpeg改变音视频播放速率
How to speed up/slow down a video转载 2020-02-26 09:18:58 · 1297 阅读 · 0 评论 -
ffmpeg av_seek_frame操作难点
转载1、难点 seek 操作2、ffmpeg AVIOContext 自定义 IO 及 seek摘录:1、2、转载 2020-01-18 13:36:03 · 1683 阅读 · 1 评论 -
基于librtmp客户端记录(H264+AAC)
基于librtmp开发rtmp客户端的demo,主要是按照雷神的demo(见5.1)来修改,修改后的demo能将获取到的音视频数据写成h264文件及aac文件。1、flv格式 介绍flv格式的博客有很多,个人觉得5.2及5.3结合起来看比较好,其中5.2的script tag应该得值是12才是对的。摘录些重要的。 flv的tag类型有三种,video(9), audio(8), s...原创 2020-01-14 08:48:14 · 592 阅读 · 0 评论 -
AAC与PCM转化--libfaac及libfdk-aac使用
1、AAC的两种编码格式《1》、ADTS格式ADTS头包含了AAC文件的采样率、通道数、帧数据长度等信息,分为固定头信息和可变头信息两部分。ADTS头一般是7个字节(28bit+28bit)/8,若ADTS头的 protection_absent字段值为0时则为9个字节。固定头部信息结构体说明如下:profile的值等于 Audio Object Type的值减1,即是profile...原创 2019-12-13 21:40:36 · 4540 阅读 · 0 评论 -
ICE协议摘录---draft-ietf-mmusic-ice-19
1、简介 ICE协议是一种NAT穿透技术,用于通过offer/answer模型建立的基于UDP的流媒体传输场景(可以扩展来处理其它协议如TCP)。ICE协议是offer/answer模型的一种扩展,使用在SDP offers和SDP answers中提供的多个ip地址及端口工作,这些IP及端口会被用于连通性检查(connectivity check)。 连通性检查通过修正过的STUN协议[Se...原创 2019-10-20 10:54:12 · 766 阅读 · 0 评论 -
turn协议部分摘录----draft-ietf-behave-turn-14
1、简介 本文定义了一个名为TURN的协议,它允许两个处于NAT环境的主机利用中继进行通讯。client能够在TURN Server上分配资源,与peer(对端)进行通讯,也能够决定何时应该停止通讯。client需要关联一个TURN Server的地址作为中继,称为relayed server address。当client发送报文给TURN Server,TURN Server使用relay...原创 2019-10-20 10:01:37 · 464 阅读 · 0 评论 -
centos上TURN服务器搭建及测试
腾讯云公网ip:106.54.xxx.xxx腾讯云内网ip:172.17.0.14自己电脑IP:192.168.179.1331、配置文件cp /usr/local/etc/turnserver.conf.default /etc/turnserver/turnserver.confcp /home/wangc/turnserver-4.4.5.2/examples/etc/turn...原创 2019-10-17 20:01:33 · 4122 阅读 · 0 评论 -
jrtplib3.11.1使用摘录
1、jthread支持与否区别rtp-3.x中有两种数据接收方式: 《1》、使用jthread库提供的线程自动在后台执行对数据的接收; 《2》、不用jthread,用户自己定期调用RTPsession中的Poll方法(官方demo1,3,5,6中均可看到);编译时jthread先编译安装后再编译jrtplib即可支持线程处理;2、RTP包处理方式 《1》、 实现自己的On...原创 2019-07-20 10:41:20 · 813 阅读 · 0 评论 -
ffmpeg+ffserver搭建rtsp服务器
1、ffserver ffserver在ffmpeg3.4版本以后的版本被移除,能用做http/rtsp流媒体服务器。其架构如下图所示。上图中I、F、S、P概念:《1》、输入源 能将音/视频传给ffserver的外部应用,通常是ffmpeg应用。输入源会和ffserver连接然后将自己绑定到一个或多个feed上。(同一时刻一个feed只能绑定一个输入源)。一个输入源能绑到多个f...原创 2019-08-07 20:41:05 · 18532 阅读 · 0 评论 -
ffmpeg接收媒体流时的设置--转
AVDictionary* options = NULL;av_dict_set(&options, "buffer_size", "1024000", 0); //增大“buffer_size”参数来提高画质,减少花屏现象av_dict_set(&options, "max_delay", "500000", 0); //TCP最大延时av_dict_set(&...转载 2019-08-22 09:40:31 · 1542 阅读 · 0 评论 -
ffmpeg 推rtsp/rtmp流
参考雷神的《最简单的基于FFmpeg的推流器(以推送RTMP为例)》以及另一位《使用ffmpeg将实时流保存为AVI》实现,然后对比两种实现方式。1、ffmpeg读rtsp/rtmp/内存数据再推流 这部分主要是参考雷神的,在此基础上实现了读取rtsp/rtmp流后再推rtsp/rtmp流,也实现了读取内存数据再推流。其中rtsp可推h264/h265流。flv只能推送h264,暂时265...原创 2019-08-22 09:55:37 · 6166 阅读 · 3 评论 -
整理 -- ffmpeg及nginx-rtmp在rtmp中扩展hevc
1、ffmpeg4.1扩展参考:打补丁及使用说明:https://github.com/ksvc/FFmpeg/wiki/instructions推流说明: https://github.com/ksvc/FFmpeg/wiki/hevcpushhttps://blog.youkuaiyun.com/vn9PLgZvnPs1522s82g/article/details/79063377修...转载 2019-09-07 11:06:19 · 1457 阅读 · 8 评论 -
libresamplerate及speexdsp两个音频重采样库使用
记录libsamplerate及speex库进行音频重采样的使用。主要是将 48K HZ 16bit采样率,双通道PCM音频转为8K HZ,16bit采样率单通道PCM音频。一、libsamplerate1、SRC_DATA数据结构该数据结构用于将音频数据及控制参数传递给精简版及标准的API函数。 data_in: 指向传递给转换器的音频数据buffer,交错模式存放 data...原创 2019-09-27 15:27:38 · 5333 阅读 · 5 评论 -
live555使用整理
live555使用、学习及遇到的问题的整理。1、live555模块《1》、UsageEnviroment模块 系统环境的抽象,主要用于消息的输入输出和用户交互功能,包含抽象类UsageEnviroment,TaskScheduler,DelayQueue类,HashTable。UsageEnvironment代表了整个系统运行的环境,它提供了错误记录和错误报告的功能,无论哪一个类...原创 2019-01-27 17:49:32 · 6902 阅读 · 0 评论