自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 使用SRS和JSWebrtc实现实时播放视频

推视频流使用ffmpeg -re -i ./doc/source.flv -c copy -f flv rtmp://ip地址/live/livestream命令推送视频到对应的地址。修改srs.conf文件将rtc节点下的rtmp_to_rtc从off修改为on。启动服务器./objs/srs -c conf/srs.conf。如果能够正常播放,代表SRS搭建成功,并且支持WebRTC播放。使用下面两段代码,webrtc的地址参见SRS里Demo的地址。切换到RTC播放页签,查看是否可以播放。

2023-02-18 20:31:10 520

原创 常见的SRS测试问题和解决方案

这个选项在生成控制脉冲(测试响应谱)时,在定义的断点表(要求的响应谱)之上增加一个超额的余量。要在VibrationVIEW中执行此操作,在“测试设置”对话框中的“限制”选项卡,并调整“启动驱动限制”下的“最大输出”。例如,通常会看到要求90%的线路满足或超过需求的规范,这意味着10%的点可以更少。在低量级的SRS测试中,初始脉冲可能超过SRS极限。一个测试的驱动限制决定了不同阶段的驱动电压输出。当脉冲的一个基础小波的振动与SRS子结构的自然振动相匹配,从而放大其响应时,SRS测试中出现共振。

2023-02-18 16:48:15 429

原创 SRS5优化:如何将DVR性能提升一倍

不管SRS也好,还是NGINX也好,虽然前者采用st-thread框架的协程能力来实现网络异步i/o,但是和后者一样,最终还是采用epoll事件循环来实现网络异步i/o的,但是对于文件i/o,目前存在的问题是,无论是write还是fwrite都是同步操作,在磁盘请求比较繁忙的情况下,必然会导致进程或者线程阻塞,从而引起系统并发性能的下降。\2. 在ssd盘情况下,fwrite的缓冲能力可以大幅度降低对于CPU的消耗,但是在采用内存盘的情况下,CPU的消耗虽然也能够降低,但是不是那么明显。

2023-02-18 16:23:17 475

原创 SRS 5.0支持WebRTC over TCP

如果你在2013年错过了给SRS贡献RTMP,在2014年错过了贡献Edge集群,在2015年错过了贡献FLV,在2016年错过了贡献DVR,在2017年错过了MP4和DASH,在2018年错过了贡献Origin集群,在2019年错过了贡献Docker化和云原生,在2020年错过了SRT和WebRTC,在2021年错过了HLS集群,在2022年错过了新官网和SRT协程化。纵然有一万个不贡献的理由,对于程序员来说,有一个贡献的理由就够了:作为程序员,只白嫖开源却不曾贡献,和咸鱼又有何分别?

2023-02-17 17:27:49 376

原创 如何用WordPress+SRS做直播网站

这个文章中,我们会用your_public_ipv4和your_domain_name,代表你的SRS服务器的IP和域名,请替换成你的地址。如果你的WordPress网站是HTTPS的,但是SRS是HTTP,会播放失败。在这个文章中,我们设置了WordPress插件,并且在Post或Page中,实现了直播播放。在这个文章中,我会给出如何使用WordPress的SrsPlayer插件,来直接播放直播流,做一个直播网站,观众可以观看。或者直接在输入框中敲斜杠/,然后按回车键,也可以直接插入,如下图所示。

2023-02-17 16:36:34 832

原创 SRS 利用集群提高并发量 支持更多的推流与播放

一般来说,源站Origin是为了扩展收流的能力,但对于WebRTC这种结构,可能没有固定的Origin和Edge,它可能需要的是一种切换角色的能力。在直播场景中,一个流会被非常多的播放器消费,比如一个球赛、国庆活动、一个电商大V的直播,直播对于播放的扩展能力是核心诉求,这也是CDN解决的关键问题之一。不建议把所有业务放一台服务器,比如有些流是指需要出HLS,有些流只需要DVR,有些流只需要FLV,那么这些流就应该分成不同的Vhost,送到不同的源站处理,这样可以避免互相干扰。如何支持更多的人推流?

2023-02-16 16:25:04 344

原创 SRS gb28181 流媒体 搭建及webrtc播放延迟1s

最近在研究流媒体,于是就找到了srs开源框架, 国标仓库是另外一个地址。webrtc效果 具有低延迟性, 延迟时间在 100ms-300ms。8.到此gb28181流媒体就搭建完毕了,你可以尽情享受了。如果下载慢的话可以直接 点击 Download ZIP。点击预览, 注意我这里配置了摄像机,所以会有视频。6.找一台摄像机,以海康球机为例 登录海康摄像机。2.将下载好的文件放在服务器上进行解压。4.漫长等待之后编译完毕修改配置文件。如果你不能访问请下载我的代码。3.进入文件夹 编译。7.然后去控制台预览。

2023-02-16 15:29:41 506

原创 搭建自己的直播流媒体服务器SRS,以及SRS+OBS直播推拉流使用及配置

填写流媒体服务器地址,我这里是: rtmp://192.168.152.100/live/ 串流密钥随便填写即可,这里我填写的是:test-livestream。SRS(Simple Realtime Server)是一个简单高效的实时视频服务器, 是国人写的一款非常优秀的开源流媒体服务器软件,可用于直播/录播/视频客服等多种场景,其定位是运营级的互联网直播服务器集群。zero只是保证从0开始;1:更改配置文件 默认配置文件,有rtc的选项,是打开的,我们是RTMP to RTC,所以还需要把rtmp。

2023-02-16 14:18:05 6023

原创 视频中为什么需要这么多的颜色空间?

正是通过不同的颜色模型转换和不同的色域转换,才得以让我们实现:在不同输入、输出、显示设备上都呈现出最好的颜色,才得以让我们实现以近似相同的观看体验来消费视频。在不同的色域空间进行 RGB 数据的转换,这也就是我们所说的 色彩管理。如前所述,不同的显示设备采用的 RGB 的色域并不一定相同,因此,RGB 是一种设备依赖型的颜色模型。和转码阶段的色域转换类似,此时,也需要在不同的色域空间进行 RGB 数据的转换(色彩管理)以保证相同的视频在不同输入、输出、显示设备上都呈现出最好的颜色。

2023-02-15 14:35:48 165

原创 最后一公里:从直播拉流读懂直播链路

与此同时,Gop 的大小也会影响到不同用户之间的延迟差,在具体场景中就体现为两个观众的延迟存在差异(比如内购会别人看到主持人说了“3、2、1,开抢”,你才看到“3”),两名观众进入直播间的时间差即使很短,但是延迟差可能达到一个 Gop(以下图为例,假设快启 buffer 下限为 1.3s ,用户分别在 1.2s 和 1.4s 进入直播间,延迟分别是多少?除此之外,在特定的带宽情况下选择合适的码率,也是降低卡顿的有效手段之一,因此ABR也在直播中得到了应用。提供完整的解决方案,方便业务方快速接入直播业务。

2023-02-14 17:42:17 236

原创 如何在 Web 音视频通话中实现降噪?

而且声网支持多个主流系统平台,并提供全球互通的实时音视频服务,其 AI 降噪能为你的用户提供清晰、高质量的音视频互动体验。通常来讲,降低背景音中的风声、车流声等噪声可以快速提高声音质量,但这种降噪方法会让音频的预处理和后处理过程变得更加复杂。例如,由于音响问题导致视频中出现回声,降噪算法会检测与之相似的声波,并在检测到最初的噪声后的几秒钟内消除后续出现的噪声。声音由空气中的压力波组成。但是,空气中传输的压力波并不总是人们想听到的,还有回声、不需要的噪音以及周围的环境音,这些都可能降低实时互动的体验。

2023-02-14 16:59:25 424

原创 视频缓存加速,2.5倍优化

并发数量并不是固定的,从第一次下载开始,每次缓存的过程都会进行测速,并根据测速结果动态修改并发数量,并且持续利用缓存的速度数据进行测速,来修改并发数量。缓存加速的效果非常明显,我们先来看下加速前和加速后的视频对比,网络环境用的是家里的WiFi。测试方法,在同一时间缓存同一剧集,相同清晰度,对比线上版本和缓存加速版本的差别,分别测试WiFi和流量环境。在测试阶段,设备始终在前台。由于网络利用率的提升,缓存加速在WiFi环境下更为明显,WiFi网速快的情况下,甚至可以达到20+mb/s的下载速度。

2023-02-13 20:11:14 435

原创 视频清晰度优化指南

HEVC采用了块的四叉树划分结构,采用了8x8 ~ 64 x 64 像素的自适应块划分,而H.264每个宏块的大小都是固定的16 x 16像素,HEVC的这样设计可以保证在不同的帧间和帧内复杂程度中可以动态调整宏块的大小,经过测试发现,在相同的图像质量下,HEVC编码的视频比H.264编码的视频约减少40%,换言之,如果HEVC和H.264码率相同,那么HEVC编码的视频比H.264编码的视频要清晰地多。例如谈Profile,就要保证其他的属性是相同的,只有Profile不同,这样比较视频的画质才有意义。

2023-02-13 20:07:26 549 1

原创 【Android音视频】OpenGL ES翻转拉伸问题

由于图片的比例和我们屏幕比例不一样嘛,于是我们就将绘制的比例调整成和图片的比例一样,再算出屏幕最大能够绘制的宽高像素。此时我们就可以对这个矩阵做手脚了,一开始使用的矩阵是一个单位矩阵,我们在小学二年级的线性代数中背过矩阵相乘公式,证实这个矩阵与另一个矩阵相乘的结果是不变的。,在前文中,我图方便,直接传入了填满整个NDC坐标系的四个顶点,由于是展示图片,没有涉及到3D,所以只传入了x轴和y轴的值。倒过来也分两种情况,一种是旋转180度,另外一种是垂直翻转,而从结果来看,我们展示的小猫咪是垂直翻转了。

2023-02-13 16:34:37 357

原创 一文读懂 Android FFmpeg 视频解码过程与实战分析

当要 seek 已过去的时间戳时,时间戳不一定会刚好处在 I 帧的位置,但因为解码需要依赖 I 帧,所以需要先找到此时间戳附近一个的 I 帧,此时 flag 就表明要 seek 到当前时间戳的前一个 I 帧还是后一个 I 帧;在这个视频解码器中,输入指定时间戳后会返回解码的这一帧数据。因此如果在播放视频时返回的是小于 0 的值,调用 avcodec_flush_buffers 函数重置解码器的状态,flush 缓冲区中的内容,然后再 seek 到当前传入的时间戳处,完成解码后的回调,再让同步锁进行等待。

2023-02-11 21:51:23 333 1

原创 音频视频自动播放解决方案

那么我们可以换个方向,不去仅仅依赖autoplay,而是使用play方法进行播放,play方法执行时会返回一个promise,可以根据promise来判断当前的播放是成功了还是失败了,并且在失败后做出相应的解决方法。这个问题当时困扰了我许久,一路解决的过程也是十分坎坷,所以我决定将解决方案记录下来,下面是我在解决问题的过程中找到的一些资料以及解决问题的方案。当MEI排名足够高时,即可自动播放。由此,Chrome计算出的媒体参与度得分在定期播放媒体的网站上足够高时,允许在桌面上自动播放媒体播放。

2023-02-11 21:37:41 1635

原创 SDK 接入|游戏语音之“范围语音”接入实践

设置该范围后,在开启 3D 音效的情况下,声音将会随距离的增加而衰减,直至超出所设置的范围,则不再有声音。建议您不要在接入范围语音功能的同时再使用。接口设置 3D 音效,enable 取值为 true 时表示开启 3D 音效,此时房间内非小队成员的音频,会随着发声者离自身的距离和方向的变化而产生空间感的变化,为 false 时表示关闭 3D 音效。无感延迟,连麦时延低于 300ms,最高可支持50人同时开麦,支持焦点语音,全球500+ 核心节点,服务覆盖 212 个国家和地区,可兼容各种网络下的用户体验。

2023-02-10 15:32:04 169

原创 音视频开发进阶|图像位深、宽高、跨距

如果使用错误的 Stride = 7,正确的 Width = 6,会出现如下问题:从第一行开始,少读取了一块 Padding,并将这部分少读取的 Padding ,误当作第二行的 “有效图像” 进行读取、排列。需要补充的是,图像位深 24bit 、通道位深 8bit 是比较标准的位深配置,大家可能还会接触到诸如 32bit、16bit、8bit 等图像位深,它们并不是 3 的倍数,无法平摊到 RGB 或者 YUV 的三个通道上。音频采样位深,指的是用多大的字节空间来存储声音的量化值。

2023-02-10 14:29:51 463

原创 秒懂流媒体协议 RTMP 与 RTSP

RTMP 提供与不同摄取设备的兼容性和低延迟流媒体的稳定性,但是,您需要一个特定的 Flash Media Server 来使用 RTMP 分发您的内容,所以RTMP 适用于主要的第三方流应用程序和较旧的硬件编码器;那么这个环节中RTMP就起到了非常重要的作用,在视频从摄像头到服务器的过程中,RTMP将大量数据分割成小块并跨多个虚拟通道传输,在视频源和 RTMP 服务器之间提供了稳定和流畅的视频流。是可以在服务器和客户端服务器之间保持稳定的连接,无论用户的互联网连接质量如何,它都可以。

2023-02-09 22:02:02 745

原创 音视频处理三剑客之 AEC:回声产生原因及回声消除原理

如果排除回声消除算法本身的问题,可能是由播放、采集的环境存在频繁异变导致(包括硬件/自然环境),比如音频设备在不停移动、被遮盖,比如用户从空旷的房间突然进入了嘈杂的走廊,都会导致 LRM 路径变化,滤波器还未来得及适应和收敛(甚至无法收敛),就会出现回声。同理,用户 B 也会遇到相同的问题,听到自己的回声。参考前面的讨论,回声消除的输入信号主要包括:参考信号(参考前述的语音A1),远端回声信号(参考前述的回声 A2)和近端语音信号(参考前述的语音B),期望的输出信号是干净的近端语音。

2023-02-09 21:57:02 2719 1

原创 iOS直播开播端概述

这2条流水线可以划分为相同的5个阶段,即:采集、业务处理、渲染、编码、推流,其中 业务处理 阶段即是我们实现App开播业务逻辑的阶段,这个阶段的复杂度跟业务的复杂度相关。下面对视频和音频的这5个阶段分别进行讲解。美颜阶段细分的话又可以分为其他几个子阶段,比如人脸识别、磨皮、妆容、挂件等几个阶段,但因为我们这个直播软件美颜是接入的第三方SDK,这里就不再具体分析美颜的子阶段了。此阶段和其他阶段不同,它不是像采集这样具体的功能,而是多个子阶段的组合,而这些子阶段则是根据具体的App业务实现的。

2023-02-08 14:42:21 108

原创 一看就懂的OpenGL ES教程——这或许是你遇过最难画的三角形(一)

和OpenGL很相似,重点是用于嵌入式和移动系统,是OpenGL的子集,即是OpenGL的裁剪版本,裁减掉了不适合低功耗的嵌入式和移动系统的Api,那作为移动端巨头级别的Android系统,自然用的就是OpenGL ES,那么今天的三角形,自然用的就是OpenGL ES。当然不同的EGLContext就维护了不同组的状态机。不过不记紧张,之所以这是很多初学者的梦魇是因为很多初学者并没有理解OpenGL的工作流程就开始写代码实战,所以由于你们有幸经过前面2节课的熏陶,加上你们的聪明,相信这并不难。

2023-02-06 17:21:50 265

原创 MP4 格式:最少加载多少数据就能渲染出视频首帧?优化短视频播放体验必须先了解它丨音视频基础

一般来讲,如果不做特别设置,moov 会放在 mdat 后面,因为从正常的处理流程上来讲,当所有的音视频数据都处理完成后,才能确定对应的宏观信息和索引信息,这时候才能确定 moov 的信息。在一个 MP4 文件中,该 Box 有且只有一个,并且需要尽可能放在文件最开始的位置,除非有必要的固定长度的文件签名信息 Box 可以放在该 Box 前面,其他非固定长度的 Box 数据都必须放在它后面。duration:这个值是从后面 trak 的时长派生来的,表示视频时长,以 timescale 定义的精度计量。

2023-02-06 16:38:05 493

原创 为了摸鱼,我开发了一个工具网站

(简称ST)是一个Json转译SQL工具,在同类工具的基础上增强了功能,为节省时间、提高工作效率而生。并且遵循 “轻页面、重逻辑” 的原则,由极简页面来处理复杂任务,且它不仅仅是一个项目,而是以“降低时间成本、提高效率”为目标的执行工具。

2023-02-04 14:07:32 81

原创 这么好的Android开发辅助工具App不白嫖可惜了

过年期间闲来没事,手撸了一个辅助Android开发调试的工具App,适合Android开发者和测试同学使用。点击直接或者去。

2023-02-04 13:54:57 152

原创 1800字带您了解视频会议、视频聊天底层技术:WebRTC 网页实时通信

Gmail 视频聊天在 2008 年开始流行,2011 年,谷歌推出了Talk ,然后收购了 GIPS,这家公司开发了 RTC 所需的许多组件,例如编解码器和回声消除技术,谷歌开源了 GIPS 开发的技术,并与互联网工程任务组 (IETF) 和万维网联盟 (W3C) 的相关标准机构合作,形成标准化,2011 年 5 月,爱立信构建了 WebRTC 的第一个实现。比如在以前,我们要开视频会议,是不是得买一台专业的会议直播系统,会议的双方起初都要花费高昂的代价才能建立起这个系统,并且使用的时候非常麻烦。

2023-02-03 16:56:42 141

原创 一看就懂的OpenGL ES教程——图形渲染管线的那些事

学习OpenGL首当其冲的就是要清楚它的工作机制,它不像平时做Android应用开发那样,只要几个api理解就差不多可以做一个功能开发了,OpenGL需要的是大局观,我们要像一位将军一样,在战役中统揽大局,把整个处理流程搞清楚,才能指定好战略,才能“拿下”OpenGL,而这里的“大局”,指的就是。图中每个方格表示一个片段,片段上的数值表示当前片段的深度,R则表示深度无限,加号表示2个图形叠加一起,则由下面部分的图可知,当2个图形叠加在一起的时候,同一个位置的片段总是显示深度较小的那一个。

2023-01-14 15:54:00 340

原创 Android硬编解码工具MediaCodec解析——从猪肉餐馆的故事讲起(三)

后面解码出来的数据也是这个大小,因为解码之后的数据就是一帧画面的yuv数据,因为画面的分辨率固定,yuv格式也是固定,所以大小自然也是一样的。并将解码出来的每帧截图保存到本地,验证了视频解码的output端每次获取的数据确实是表示一帧的数据。这个空Buffer大小为6291456字节(pos表示当前操作指针指向的位置,lim表示当前可读或者可写的最大数量,cap表示其容量),inputBufIndex为2,即该Buffer在MediaCodec的输入Buffer数组的位置是2。

2023-01-13 20:32:29 475

原创 Android硬编解码工具MediaCodec解析——从猪肉餐馆的故事讲起(二)

关于queueInputBuffer方法,定义的注释实在太长了,简单来说,这里就是将input端第inputBufIndex个Buffer从第0位开始chunkSize个字节数据传入MediaCodec中,并指定这一帧数据的渲染时间为presentationTimeUs,在。中讲过,根据官网描述,一般如果是视频文件数据,则都不要传递给Mediacodec不是完整帧的数据,除非是标记了BUFFER_FLAG_PARTIAL_FRAME的数据。并将解码得到的buffer的相关信息放在mBufferInfo中。

2023-01-13 17:51:35 287

原创 Android硬编解码利器MediaCodec解析——从猪肉餐馆的故事讲起(一)

当然在餐馆营业中,可能会出现一些意外,比如厨师突然生病了,于是餐馆进行不下去,被迫停止营业,就会进入Stopped中的Error状态,这时候有2个选择,一个是直接关门(release)进入Released状态。)和生猪肉一起装入篮子,厨师拿到带有这个标签的生猪肉,心领神会,就任性地不再接收任何采购员带来的生猪肉了(解码器不再接受任何新的数据输入),即进入End-of-Stream状态,然后对应炒出来的猪肉盘子也带上一个标签,让顾客知道这是今天最后一盘子猪肉了,吃完就要关门了。

2023-01-13 14:16:33 293

原创 H264码流结构一探究竟

在解析H264视频编码原理——从孙艺珍的电影说起(二)最后层列出这样一张H264编码整体流程的图,最右端末尾(熵编码)输出的就是H264码流了,所谓的码流本质就是一串长长的二进制数据,就像一条很长的河流,缓缓的流淌,那么接收端收到这些码流之后,需要解析它才能读取里面的信息,所以码流一定是需要一定规律组织起来的,让接收端知道哪里是视频的开始,哪里是一帧图像的开始,甚至哪里是一个宏块的开始。这样的组织方式就是码流结构。

2023-01-12 21:57:25 224 2

原创 音视频开发基础知识之YUV颜色编码

本文主要介绍了YUV基本概念以及YUV的采样格式和存储格式以及YUV和RGB之间的转换,这对于以后理解视频编码以及渲染极为关键。

2023-01-12 14:31:32 222 2

原创 视频基础知识扫盲

视频基础知识扫盲

2023-01-11 22:17:31 153

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除