<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Atoops的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Atoops</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Atoops]]></copyright><item><title><![CDATA[重磅：SRS 5.0正式支持Windows平台和安装引导程式]]></title><link>https://blog.youkuaiyun.com/Atoops/article/details/129101723</link><guid>https://blog.youkuaiyun.com/Atoops/article/details/129101723</guid><author>Atoops</author><pubDate>Sat, 18 Feb 2023 16:29:48 +0800</pubDate><description><![CDATA[这样就可以编译出Windows版本的SRS了，可执行文件在./objs/srs.exe，其他使用说明参考Getting Started[3]。从5.0.89之后，SRS 5.0每个版本release[4]，都会附带Windows的安装包。你可以下载后，快速安装和使用SRS。SRS 5.0.89+正式支持Windows，基于Cygwin64平台，支持代码编译，以及流水线，每个5.0的版本都会提供安装包。如果你需要自己从代码编译Windows版本的SRS，请先安装Cygwin64[1]。• 最新版本下载[6]]]></description><category></category></item><item><title><![CDATA[SRS支持x86/armv7/aarch64镜像]]></title><link>https://blog.youkuaiyun.com/Atoops/article/details/129094018</link><guid>https://blog.youkuaiyun.com/Atoops/article/details/129094018</guid><author>Atoops</author><pubDate>Fri, 17 Feb 2023 21:28:05 +0800</pubDate><description><![CDATA[• linux/arm/v7 这是armv7也就是32位架构，比如RaspberryPI就是这种服务器，如果你要在PI上使用SRS，可以用这个镜像。可以选择云主机验证ARM的docker，腾讯云ARM[10]，阿里云ARM[11]，华为云鲲鹏[12]，AWS ARM[13]。下面是支持多CPU架构的镜像的其他背景，若你需要修改代码了自己打镜像，或者需要支持其他CPU架构，可以参考下面的资料支持。多CPU架构的镜像，不能使用一般的方式直接推送多仓库，需要使用一个独立的action。]]></description><category></category></item><item><title><![CDATA[直播服务器-SRS搭建和配置的建议]]></title><link>https://blog.youkuaiyun.com/Atoops/article/details/129093536</link><guid>https://blog.youkuaiyun.com/Atoops/article/details/129093536</guid><author>Atoops</author><pubDate>Fri, 17 Feb 2023 20:46:21 +0800</pubDate><description><![CDATA[从SRS服务器，P2P，ARM监控产业，MIPS路由器，服务器监控管理，ARM智能手机，SRS的规模不再是一个服务器而已。：商业运营追求极高的稳定性，良好的系统对接，以及错误排查和处理机制。譬如日志文件格式，reload，系统HTTP接口，提供init.d脚本，转发，转码，边缘回多源站，都是根据。：互联网最大的特征是变化，唯一不变的就是不断变化的客户要求，唯一不变的是基础结构的概念完整性和简洁性。：直播和点播这两种截然不同的业务类型，导致架构和目标完全不一致，从运营的设备组，应对的挑战都完全不同。]]></description><category></category></item><item><title><![CDATA[SRS简单实时视频服务体验]]></title><link>https://blog.youkuaiyun.com/Atoops/article/details/129091131</link><guid>https://blog.youkuaiyun.com/Atoops/article/details/129091131</guid><author>Atoops</author><pubDate>Fri, 17 Feb 2023 17:39:42 +0800</pubDate><description><![CDATA[SRS是一个简单高效的实时视频服务器，支持RTMP/，等多种格式。比如我用react写的前端demo，，它使用了 Flv.js 播放器，能够播放 flv的 的媒体流。上一章节示例了文件的方式推流，这里示例下 OBS 软件的方式。1)、客户端方式，使用VLC播放器，URL地址是 rtmp开头的方式，下面的示例是开启了一个 ffmpeg 的推流示例，推流后的网址是。当然，也可以使用 OBS软件 来推流，本文后面描述。启动推流，即 流媒体视频，影音资料的来源。4.3点击“开始推流”按钮，开始推流。]]></description><category></category></item><item><title><![CDATA[SRS5.0第一大炮：如何实现SRT协程化]]></title><link>https://blog.youkuaiyun.com/Atoops/article/details/129070494</link><guid>https://blog.youkuaiyun.com/Atoops/article/details/129070494</guid><author>Atoops</author><pubDate>Thu, 16 Feb 2023 20:38:39 +0800</pubDate><description><![CDATA[再次强调一次，维护代码时，我们需要了解的信息量是非常不同的。而基于协程的逻辑中，没有这些状态，协程的创建和执行，就是线性的，或者说这些状态就是在协程的函数调用中。只有实现了SRT的协程化，才能成为SRS的核心的成熟的协议，这是SRS 5.0迈出的第一步，也是至关重要的一步。SRT作为主播/广播推流领域广泛采用的协议，浏览器却不支持播放SRT推流，这恰恰是媒体网关的核心价值，可以将SRT转成RTMP/HLS/WebRTC后，实现广播领域真正的Web超低延迟方案，还可以把SRT强大的跨国传输能力用起来。]]></description><category></category></item><item><title><![CDATA[SRS：如何用NGINX搭建HLS分发集群]]></title><link>https://blog.youkuaiyun.com/Atoops/article/details/129069487</link><guid>https://blog.youkuaiyun.com/Atoops/article/details/129069487</guid><author>Atoops</author><pubDate>Thu, 16 Feb 2023 20:01:26 +0800</pubDate><description><![CDATA[如果我们扩展10个NGINX，每个NGINX是10Gbps带宽，那么整个系统的带宽是100Gbps，能支持10万并发，SRS的带宽消耗只有10Mbps。在超高并发的NGINX Edge集群中，也可以形成机房级别的小集群，从某个NGINX中集中回源，这样可以支持更高的并发。比如1Mbps的HLS流，1000个客户端播放NGINX，那么NGINX的带宽就是1Gbps，而SRS只有1Mbps。SRS的集群，终于补齐了最后一块拼图，就是基于NGINX的HTTP文件分发集群，比如HLS分发集群。如何压测这个系统呢？]]></description><category></category></item><item><title><![CDATA[SRS+SRT从“有”到“好用”的飞跃]]></title><link>https://blog.youkuaiyun.com/Atoops/article/details/129069394</link><guid>https://blog.youkuaiyun.com/Atoops/article/details/129069394</guid><author>Atoops</author><pubDate>Thu, 16 Feb 2023 19:55:47 +0800</pubDate><description><![CDATA[SRS开发镜像，CentOS 6：ossrs/dev6，这个镜像本身支持了libsrt，由于SRS的SRT依赖C++11，所以还不能用。还有一种编译代码的，更容易的方法，就是用开发Docker环境编译SRT/SRS，因为依赖都已经安装好了，所以几乎不会出现编译问题。将libsrt代码放到SRS，SRS编译和链接libsrt，可以直接使用，不再依赖外部SRT的库，用起来感受不到这个钻石依赖。SRT要自己编译出来，比较难，因为有个钻石依赖问题（如下图），任何一步的设置或者版本有问题，肯定就编译失败了。]]></description><category></category></item><item><title><![CDATA[从0搭建一个WebRTC，实现多房间多对多通话，并实现屏幕录制]]></title><link>https://blog.youkuaiyun.com/Atoops/article/details/129050766</link><guid>https://blog.youkuaiyun.com/Atoops/article/details/129050766</guid><author>Atoops</author><pubDate>Wed, 15 Feb 2023 21:17:31 +0800</pubDate><description><![CDATA[上图总结可以为A创建本地视频流，把视频流添加到PeerConnection里面 创建一个Offer给B，B收到Offer以后，保存这个offer，并响应这个Offer给A，A收到B的响应后保存A的远端响应，进行NAT穿透，完成链接建立。可以在某一个人登录的时候获取一下redis对应房间的成员列表，如果没有这个房间，就把这个人丢进新的房间，并且存储到redis中，方便其他人登录这个房间的时候知道现在有多少人。在获取了音视频之后，获取的设备列表的详细信息已经出现，我们就可以获取指定设备的音视频数据，]]></description><category></category></item><item><title><![CDATA[使用FFmpeg进行mp4与m3u8之间转换]]></title><link>https://blog.youkuaiyun.com/Atoops/article/details/129017599</link><guid>https://blog.youkuaiyun.com/Atoops/article/details/129017599</guid><author>Atoops</author><pubDate>Mon, 13 Feb 2023 21:36:55 +0800</pubDate><description><![CDATA[前提是这个m3u8文件已经是一个包含ts清单的文件，建议提前下载下来看下，因为有的m3u8只写了通过分辨率来链接到对应的m3u8,那个才是你需要的。首先来把MP4切片成ts，然后创建m3u8，我目前了解到的m3u8其实就是一个类似于清单，播放器读取后，根据这个清单来按序播放ts视频。这个是网上照搬来的，大概意思就是安装源，安装包，最后安装ffmpeg，大概吧，作为一个linux没入门的人来说，解释不清。这里的m3u8可以直接是网上的文件，最后的xxx.mp4就是你需要转换成的文件。]]></description><category></category></item><item><title><![CDATA[FFmpeg-环境搭建(一）]]></title><link>https://blog.youkuaiyun.com/Atoops/article/details/128660112</link><guid>https://blog.youkuaiyun.com/Atoops/article/details/128660112</guid><author>Atoops</author><pubDate>Mon, 13 Feb 2023 21:17:25 +0800</pubDate><description><![CDATA[后来为了学习FFmpeg，笔者也是断断续续的，从音视频的基础资料开始，从FFmpeg编译到实践，希望通过自己的学习可以一点一点地揭开FFmpeg的神秘面纱，直到今天笔者只敢说仅是音视频开发大军中的一个入门新手而已，虽说自己摸索挺久， 但依旧难以进阶，我想其中有两个主要的原因，一是缺少仙人指路，二是断断续续，缺乏系统性的学习总结。对于FFmpeg这东西，你说它难，其实它也就那么一回事，你说它简单，无数人在编译阶段就被迫放弃了，或许它难的不是它本身，更多学习者一个敢于开始的勇气和持之以恒的坚持吧。]]></description><category></category></item><item><title><![CDATA[音频自动增益控制 AGC 解决的问题及原理解析]]></title><link>https://blog.youkuaiyun.com/Atoops/article/details/128989699</link><guid>https://blog.youkuaiyun.com/Atoops/article/details/128989699</guid><author>Atoops</author><pubDate>Sat, 11 Feb 2023 21:58:25 +0800</pubDate><description><![CDATA[对于音量持续较小的信号改善有限；至此，致力于让声音更“好听”的音频前处理三剑客，已经和大家介绍完毕了，在当今的 RTC 场景下，3A 处理已然是不可或缺的一环，我们很难想象，再回到充斥着回声、噪声、音量还起伏不定的环境会是一种怎样的“折磨”，用户体验无从谈起，恐怕再优秀有趣的玩法都无济于事。在未来，随着 RTC 场景的不断扩展，我们必然会遇到更多的技术挑战，但我们有理由相信，随着技术应用的不断深入，业界势必也会有更优秀、更智能的 3A 算法落地，会持续为我们的用户体验保驾护航，我们大可以拭目以待！]]></description><category></category></item><item><title><![CDATA[直播案例剖析：手机降频对直播声音体验的影响]]></title><link>https://blog.youkuaiyun.com/Atoops/article/details/128989666</link><guid>https://blog.youkuaiyun.com/Atoops/article/details/128989666</guid><author>Atoops</author><pubDate>Sat, 11 Feb 2023 21:56:02 +0800</pubDate><description><![CDATA[从 audioMixerThread 线程看，发热情况下黄色被抢占的时间明显增多，在资源紧缺（发热降频、低端机、耗时任务数较多）的时候，低优先级线程会被高优先级的线程抢占的比较严重，比如，系统开辟的高优先级线程（UI 线程、coreanimation、AppleBCMWLANBusInterfacePCIe 等等）。另外，虽然 AURemoteIO 有较高的线程优先级，但依然有可能被更高优先级的线程抢占，且在资源紧缺的情况下，线程的执行时间明显减少至正常情况的三分之一。由此推测是命中降频了。]]></description><category></category></item><item><title><![CDATA[零基础开启元宇宙｜如何快速创建虚拟形象]]></title><link>https://blog.youkuaiyun.com/Atoops/article/details/128977753</link><guid>https://blog.youkuaiyun.com/Atoops/article/details/128977753</guid><author>Atoops</author><pubDate>Fri, 10 Feb 2023 21:47:22 +0800</pubDate><description><![CDATA[这是即构官方免费提供的资源，可以满足一般性需求了。需要注意的是，上面示意图中采用的是AvatarView，可以非常方便的直接展示Avatar形象，但是不方便后期将画面通过RTC实时传递， 因此，我们后面的具体实现视通过TextureView替代AvatarView。可以看到，上面数据基本包含所有人脸属性了，基本具备了捏脸能力，篇幅原因，我们这里不具体去实现。元宇宙（Metaverse），是人类运用数字技术构建的，由现实世界映射或超越现实世界，可与现实世界交互的虚拟世界，具备新型社会体系的数字生活空间。]]></description><category></category></item><item><title><![CDATA[音视频开发基础入门｜声音的采集与量化、音频数字信号质量、音频码率]]></title><link>https://blog.youkuaiyun.com/Atoops/article/details/128959608</link><guid>https://blog.youkuaiyun.com/Atoops/article/details/128959608</guid><author>Atoops</author><pubDate>Thu, 09 Feb 2023 19:56:28 +0800</pubDate><description><![CDATA[音色是一种“感官属性”，我们利用这种“感官属性”，能区分发声的物体，发声的状态，还能评价听感上的优劣，比如“钢琴声、二胡声”，比如“只闻其声，如见其人”，比如“悦耳、动听”等等。前面我们了解到，声音是由物体振动产生的波，而物体整体振动发出的只是基音，其各部分还有复合的振动，这些复合的振动也会发出声音并形成泛音，基音+泛音的不同组合就产生了多样化的音色，声音世界才变得丰富多彩起来。如图 5，我们设定纵轴的坐标取值范围为 0 ~8，得到每个采样点的纵坐标（向上取整），这里的坐标值即为量化后的幅度值。]]></description><category></category></item><item><title><![CDATA[音视频基础知识：RGB 与 YUV 的采样与存储]]></title><link>https://blog.youkuaiyun.com/Atoops/article/details/128959554</link><guid>https://blog.youkuaiyun.com/Atoops/article/details/128959554</guid><author>Atoops</author><pubDate>Thu, 09 Feb 2023 19:53:26 +0800</pubDate><description><![CDATA[同时，参考对 YUV 4:2:2 的分析，我们还可以推断，由于 YUV 4:2:0 进一步降低了对 UV 分量的采样，其采样数据量相对于 YUV 4:2:2 更少，数据得到进一步压缩。了解采样格式后，就需要考虑如何进行存储，YUV 的存储格式也有好几类，并且一种采样格式还可以选择不同的存储格式，不同采样格式搭配不同的存储格式，得到了不同的 YUV 类型，这些知识综合起来还是有一定理解和记忆难度的，大家跟着我的思路继续往下学习。采样区域的第二行，将不再采集独立的 UV 分量组，而是复用第一行的采样结果。]]></description><category></category></item><item><title><![CDATA[Android 接入FFmpeg命令-低成本完成各类音视频操作]]></title><link>https://blog.youkuaiyun.com/Atoops/article/details/128943682</link><guid>https://blog.youkuaiyun.com/Atoops/article/details/128943682</guid><author>Atoops</author><pubDate>Wed, 08 Feb 2023 21:21:03 +0800</pubDate><description><![CDATA[cmdutils.c、ffmpeg.c、ffmpeg_opt.c、ffmpeg_filter.c、ffmpeg_hw.c、ffmpeg-cmd.c都有一定的依赖关系，这几个C文件共同编译成一个库ffmpeg-cmd，ffmpeg-cmd是我的JNI层方法，负责双边沟通，fftools中依赖了其它例如解码，滤镜，重采样等外部库，也是我们之前编译了的其它库，我们需要把它们作为ffmpeg-cmd的库链接进去。这其中我们要考虑很多条件，音频信息导致的不同处理，异常的捕捉等等，麻烦不说，兼容性都有一段路走。]]></description><category></category></item><item><title><![CDATA[花几分钟学会这些android音视频知识不亏]]></title><link>https://blog.youkuaiyun.com/Atoops/article/details/128908086</link><guid>https://blog.youkuaiyun.com/Atoops/article/details/128908086</guid><author>Atoops</author><pubDate>Mon, 06 Feb 2023 20:46:47 +0800</pubDate><description><![CDATA[我们用关键字来控制无限循环，当停止录制的时候就关键字就控制while循环停止，然后在while循环中我们使用read方法，read方法会把数据传入byte数组中并返回数组大小，我们用for循环将byte数组中的数据用文件输出流输出到文件中，这就完成了PCM数据的采集，最后记住关闭audioRecord就可以了。：通过 getMinBufferSize()方法可以获得，根据我们采样录制的过程中的参数来确定，每次从硬件读取数据所需要的缓冲区的大小。Android中的音频采集——AudioRecord的使用。]]></description><category></category></item><item><title><![CDATA[Android音视频： 引入FFmpeg]]></title><link>https://blog.youkuaiyun.com/Atoops/article/details/128876734</link><guid>https://blog.youkuaiyun.com/Atoops/article/details/128876734</guid><author>Atoops</author><pubDate>Fri, 03 Feb 2023 22:13:54 +0800</pubDate><description><![CDATA[但是不必担心，一是有了 CMake ，二是对于 C/C++ 的基本使用其实和 Java  差不多，本系列涉及到的，也都是对 C/C++ 的基础使用，毕竟，高级的我也不会不是吗？在方法中，使用 FFmpeg 提供的方法 av_codec_next，获取到 FFmpeg 的编解码器，然后通过循环遍历，将所有的音视频编解码器信息拼接起来，最后返回给 Java 层。中，我们编译的 FFmpeg so 库的 CPU 架构为 armv7-a，所以，我们需要把所有的 so 库放置到 armeabi-v7a 目录下。]]></description><category></category></item><item><title><![CDATA[曾经辉煌一世的流媒体协议RTMP是什么样的？它能完全被取代吗？一文带您走进RTMP的世界]]></title><link>https://blog.youkuaiyun.com/Atoops/article/details/128868677</link><guid>https://blog.youkuaiyun.com/Atoops/article/details/128868677</guid><author>Atoops</author><pubDate>Fri, 03 Feb 2023 15:37:22 +0800</pubDate><description><![CDATA[随着 Flash 的弃用，RTMP 不再用于向视频播放器传输视频，并且正面临来自 MPEG-DASH 和 HLS 等基于 HTTP 的视频传输协议的激烈竞争，但是，RTMP 仍然在与编码器之间的视频传输中扮演着重要的角色。RTMP使用独占的 1935 端口，无需缓冲，基于 TCP，所以连接稳定，这样的话，用户在观看视频的时候，假如看到一半断网了，等到网络重连还可以接着上次断开的进度看。现在RTMP 主要用作流式传输实时视频，并且播放的时候非常流畅，还支持动态播放控制，允许用户跳转播放。]]></description><category></category></item><item><title><![CDATA[音频基础知识]]></title><link>https://blog.youkuaiyun.com/Atoops/article/details/128680121</link><guid>https://blog.youkuaiyun.com/Atoops/article/details/128680121</guid><author>Atoops</author><pubDate>Fri, 13 Jan 2023 21:50:49 +0800</pubDate><description><![CDATA[简单讲一下音频的处理流程，一是音频文件的生成，如在 Android 中使用 AudioRecord 、MediaRecord 等采集到的音频数据就是 PCM 数据，这种数据属于数字音频信号，是原始的 PCM 裸流，PCM 数据经过编码也就是将 PCM 数据压缩，在通过复用生成对应的音频文件，二是音频文件的播放，经解复用、解码转换成 PCM 进行播放。的高低，表示人的听觉分辨一个声音的调子高低的程度，物体振动的快，发出的声音的音调就高，振动的慢，发出的音调就低。]]></description><category></category></item></channel></rss>