- 博客(1286)
- 收藏
- 关注
原创 FFmpeg-Window QT环境调试环境搭建教程-1
2,下载完之后,用qt creator 打开 ffmpeg-qt 项目,kit选择 Qt 5.15.2 MinGW 32bit ,因为 ffmpeg.c 里面用了linux api函数,只能用MinGW编译,用MSVC编译会报错。写在最后 Visual Studio 2015 其实貌似是不需要安装的,因为上面没用过Qt MSVC编译器环境,不过为了第二篇文章,自己编译ffmpeg dll,最好还是装一下。继续安装漏的组件,注意一定要用命令行打开,这样才能切换源,要不会拉取失败,只显示已安装的组件。
2023-09-29 14:15:00
19
原创 FFmpeg 的使用与Docker安装流媒体服务器
本文阐述的均为命令行的使用方式,并不牵扯FFmpeg 的 C++音视频开发内容,补充一句,C++的资料真的少,能把C++学好的人,我真的是觉得巨佬。我主要是使用FFmpeg 推流方面的知识,案例大都是靠近这方面。一、FFmpeg 介绍本文读者会比较小众~ 看到此文的朋友,大概率是需要用到FFmpeg啦,简单说一下下。就算是从来没接触过的朋友,其实也已经在生活的各个方面都接触过FFmpeg处理完东西(音视频)。一句话来总结:FFmpeg 就是一款封装好的关于音视频方面的开源处理工具。
2023-09-28 15:00:00
19
原创 基于FFmpeg和Wasm的Web端视频截帧方案
FFmpeg作为一个开源的强大的音视频处理工具,实现视频和音频的录制、转换、编辑等多种功能。FFmpeg包含了众多的编码库和工具,可以处理各种格式的音视频文件,例如MPEG、AVI、FLV、WMV、MP4等等。FFmpeg最初是由Fabrice Bellard于2000年创立的,现在它是由一个庞大的社区维护的开源软件项目。FFmpeg支持各种操作系统,包括Windows、macOS、Linux等,也支持各种硬件平台,例如x86、ARM等。
2023-09-27 14:15:00
27
原创 为了分析WebRTC, 重学Windows开发
In_ HINSTANCE hInstance, //句柄_In_ HINSTANCE hPrevInstance, //总是 NULL_In_ LPSTR lpCmdLine, //在命令行启动程序时的命令_In_ int nCmdShow //程序启动时的显示方式hInstance:句柄,就是一个内存地址,在该地址上有该程序的基本信息。hPrevInstance:总是NULL,没啥用。lpCmdLine: 用命令行启动时的命令,有兴趣的可以自己打印出来。
2023-09-26 14:30:00
28
原创 WebRTC Pacing之IntervalBudget分析
WebRTC中Pacing等模块需要按照指定的码率发送报文,保证码率稳定,会用到这个类,这个类是控制码率平稳的核心。本篇将介绍这个类。
2023-09-25 21:40:14
30
原创 FFmpeg解封装与代码示例(notes 3)
媒体播放器播放一个媒体文件,需要以下步骤:解协议,解封装,解码,视音频同步,如果播放本地文件则不需要解协议。其中解封装(解复用)的作用是将输入的封装格式(AVI、MP4、TS、FLV等封装格式)的数据分离成音频流压缩编码数据和视频压缩编码数据,把这些视音频以及字幕等基本流分离出来。在这个解封装的过程中,我们可以获取到媒体文件的一些基本信息。
2023-09-23 14:15:00
34
原创 WebRTC,音视频会议底层支撑技术解读
WebRTC 是 Web Real-Time Communication 的缩写,是谷歌在 2011 年推出的一种技术,可以实现跨网络和本地浏览器的实时音频、视频和数据传输。WebRTC允许应用使用P2P通信。WebRTC是一个广泛的话题,在本文中,我们将重点讨以下问题。要连接两个浏览器,Web RTC需要执行五个步骤来建立P2P连接。浏览器中的P2P连接由服务器建立,以确保所有Peer同意建立会话。
2023-09-22 17:45:00
33
原创 使用WebRTC作为RTMP的替代方案
因此,如果你需要真正的交互(我们这里讨论的是用于紧急响应和远程监控等场景的低于一秒的视频传输),那么WebRTC将是你的最佳选择。LL-HLS和用于DASH的LL-CMAF同样也是不错的选择,但是它们无法实现像WebRTC一样的实时传输。在视频生产方面,WebRTC仅使用Web浏览器就可以进行简单的直播,但是对于希望使用硬件或者软件解决方案控制编码设置的直播厂商来说,基于浏览器的编码并不理想。在我们的2021视频流延迟报告中,我们发现WebRTC已成为用于推流的第二流行的格式,用于传输的第三流行格式。
2023-09-22 14:15:00
29
原创 [WebRTC架构分析]WebRTC 的线程模型
线程之间的通信要么是通过图中标出的 Packet 队列,要么是通过 WebRTC 的 MessageQueue 来实现的。之所以要分析线程模型,因为 WebRTC 明确规定了哪些模块在哪些线程下执行,在 Debug 版本中增加了很多检测,如果哪个模块没有在自己的线程下执行,会产生 abort 异常,程序自动退出。要想更好的理解 WebRTC 的实现,分析 WebRTC 的线程框架是必不可少的。为此,为了降低系统的复杂性,提高系统的运行效率,WebRTC 设计了一套多线程框架,并且做了精心的设计。
2023-09-20 21:45:00
37
原创 当前开源WebRTC项目技术选型
当前Webrtc技术已经成熟,各大公司都在自己的产品中集成Webrtc功能,Webrtc除了要实现视音频通信外还有需要实现信令传输,而Webrtc的核心模块就是流转发模块,即流媒体服务器,如果要自已实现流媒体服务器困难还是比较大的,付出的时间成本也将不少,它里面要涉及到去研究 DTLS 协议、ICE 协议、SRTP/SRTCP 协议等方面,光理解这些协议就要花不少的时间,更何况要去实现它了,所以最快捷的办法就是使用开源的实现。本文就开源的几个webrtc做下介绍比较。
2023-09-20 17:30:42
33
原创 FFmpeg音频滤镜-搞怪的播放器
零、写在前面我正在参加「掘金·启航计划」;书接上回。如果只解码音频然后就拿去给播放器播放那也太单调了,FFmpeg带有音频滤镜功能,我们把它加进去,让我们的播放器实现一些搞怪的音频效果。我们以实现音频滤镜为中心,讲一下实现滤镜的过程,当然视频滤镜的实现原理一致,不同的是FFmpeg支持音视频滤镜的种类。
2023-09-19 15:36:47
32
原创 Mac中编译FFmpeg教程(Android版)
FFmpeg简介FFmpeg既是一款音视频编解码工具,同时也是一组音视频编解码开发套件,作为编解码开发套件,它为开发者提供了丰富的音视频处理的调用接口。FFmpeg提供了多种媒体格式的封装和解封装,包括多种音视频编码、多种协议的流媒体、多种色彩格式转换、多种采样率转换、多种码率转换等。FFmpeg框架提供了多种丰富的插件模块,包含封装与解封装的插件、编码与解码的插件等。开发环境然后在命令行中输入ndk-build测试环境是否配置成功。下载FFmpeg源码FFmpeg的源码可以在。
2023-09-15 13:53:15
43
原创 新手学习FFmpeg - 调用API完成录屏
以后就按照这种的处理逻辑,不停的从输入设备读取数据,然后经过解码->转码->编码,最后发送到输出设备。然后获取设备视频流ID(解码数据包时需要判断是否一致),再获取输入编码器(解码时需要)。将视频流保存到文件中,只需要一个合适的编码器(用于生成符合MP4容器规范的帧)既可。从输入设备读取的是原生的数据流,也就是经过设备编码之后的数据。),下一篇再研究如何通过日志获取当前支持的设备,本次就直接写死设备ID。的数据,在编码成输出设备可识别的数据。对读取后的数据进行拆包,找到我们所感兴趣的数据。
2023-09-14 16:28:24
48
原创 HTML5如何实现视频直播功能
浏览器使用的是 m3u8 文件。如果减少每个 ts 的长度,减少 m3u8 中的索引数,延时确实会减少,但会带来更频繁的缓冲,对服务端的请求压力也会成倍增加。HTTP Live Streaming(简称 HLS)是一个基于 HTTP 的视频流协议,由 Apple 公司实现,Mac OS 上的 QuickTime、Safari 以及 iOS 上的 Safari 都能很好的支持 HLS,高版本 Android 也增加了对 HLS 的支持。它的实时性非常好,延迟很小,但无法支持移动端 WEB 播放是它的硬伤。
2023-09-14 16:25:10
65
原创 FFmpeg+SDL2实现简易音视频同步播放器
大体的流程就是这样了,相比之前的Demo复杂度会高不少,但是所有的知识在前面的博客中都有涉及,在博客中也讲不了什么东西,还是直接自己运行,再去看代码会更好,理清流程,整个播放器的代码也不会很难看懂,这里附上FFmpeg+SDL2实现简易音视频同步播放器。这是实现的简易播放器的线程模型,通过这张图再结合我们之前博客中学习的内容,基本可以了解播放器的一个整体运行流程。具体代码也是根据这张图来实现。整个播放器中最重要的结构体,解复用、解码、音视频同步、渲染相关参数都在该结构体中,它贯穿了整个播放流程。
2023-09-14 14:15:00
35
原创 FFmpeg 入门学习 01--打开视频文件
由于近期工作中的项目涉及到了音视频相关开发,本系列文章用来整理和记录在使用 FFmpeg 开发过程中的一些学习经验,以备之后的查阅。在进行音视频解码之前,需要先打开媒体文件,以获取其中包含的音/视频流的相关信息。FFmpeg 是音视频开发中最常用到的开源软件,许多商业软件都以 FFmpeg 为基础进行开发定制。上图来源于网上,描述了视频播放的基本原理。即:要实现一个视频播放器,需要完整实现上图中的每一个过程。本文先从打开视频文件开始,记录怎么使用 FFmpeg 打开一个视频文件。
2023-09-13 20:44:35
44
原创 FFMPEG开发快速入坑——基础准备知识
另一方面,在一个GOP中,P、B帧是由I帧预测得到的,当I帧的图像质量比较差时,会影响到一个GOP中后续P、B帧的图像质量,直到下一个GOP开始才有可能得以恢复,所以GOP值也不宜设置过大。也就是其在时间相关性上,还依赖后面的视频帧,也正是由于 B 帧图像采用了后面的帧作为参考,因此造成视频帧的传输顺序和显示顺序是不同的。B帧解码既要依赖于前面的P帧或I帧,还依赖于其之后的P帧。在码率不变的前提下,GOP值越大,P、B帧的数量会越多,平均每个I、P、B帧所占用的字节数就越多,也就更容易获取较好的图像质量;
2023-09-13 20:40:53
47
原创 视音频学习入门---ffmpeg篇(一)---入门ffmpeg
音视频知识是特定行业的知识,一般是嵌入式音视频开发,以及目前现在很火的直播行业的技术知识,本系列是带领大家入门,以便想要进入该行业的小伙伴有一个较好的基础知识。进入ffmpeg官网,下载windows版本,依次点击“download source code”--> "windows图标" --> "windows build by zeranoe"。是否想过它们的底层原理呢?打开控制面板--> 切换到大图标 --> 系统 --> 高级配置--> 环境变量--> 系统变量path--> 添加环境变量。
2023-09-13 20:36:09
55
原创 wasm + ffmpeg实现前端截取视频帧功能
有没有那么一种可能,在前端页面处理音视频?例如用户选择一个视频,然后支持他设置视频的任意一帧作为封面,就不用把整一个视频上传到后端处理了。支持mp4/mov/mkv/avi等文件。基本的思想是这样的:使用一个file input让用户选择一个视频文件,然后读取为ArrayBuffer,传给ffmpeg.wasm处理,处理完之后,输出rgb数据画到canvas上或者是转成base64当做img标签的src属性就形成图片了。
2023-09-09 14:12:29
90
原创 WebRTC 用例和性能
事实上,这不仅仅是 WebRTC 提供的单个部分,而是所有组件协同工作以提供用于在浏览器中构建点对点应用程序的简单统一的 API。然而,即使有所有内置服务,设计高效和高性能的点对点应用程序仍然需要大量仔细的思考和规划:点对点本身并不意味着高性能。如果有的话,对等点之间带宽和延迟的增加的可变性,媒体传输的高要求,以及不可靠交付的特性,使其成为一项更加艰巨的工程挑战。更复杂的是,大多数 ISP 和移动运营商提供的连接不是对称的:大多数用户的下行链路吞吐量明显高于上行链路吞吐量。WebRTC 用例和性能。
2023-09-08 16:15:00
76
原创 webRTC的标准与发展
随着移动互联网的、AI、5G等等新兴技术的高速发展,结合WebRTC技术,未来将衍生出更多的应用场景,改变人类的衣、食、住、行等生活方式。原文 webRTC的标准与发展 - 知乎★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。见下方!
2023-09-08 14:15:00
53
原创 关于WebRTC视频Android端实现的原理解读
进入公司之后做了第一个项目就是关于视频的,因为用的是别人提供的sdk,所以说很容易就能实现其中的功能,那么项目结尾的时候就想着不能光会用,起码得知道原理过程吧!那么下面就讲解一下本人对关于WebRTC的视频连接过程的一些讲解:关于WebRTC这个库。
2023-09-08 14:03:56
65
原创 WebRTC TURN协议初识及turnserver实践
但是TURN协议对服务器有很高的依赖,服务器在带宽和集群上有很大的压力,所以TURN协议通常是当作ICE协议中的一部分来使用。ChannelData message不使用STUN头部,而使用一个4字节的头部,包含了一个称之为信道号的值(channel number),每一个使用中的信道号都与一个特定的peer绑定,即作为对等端地址的一个记号。该relay地址是个公网地址,可以看作是客户端A在公网上的一个代理,任何想要联系A的客户端,只要将数据发送到A的relay地址就可以了。
2023-09-07 21:53:28
58
原创 音视频通信为什么要选择WebRTC?
另一方面,当网络传输层收到数据后,它要判断数据的类型是什么,如果是音频,它会将数据交给音频引擎模块处理,数据首先被放入到NetEQ模块做平滑处理及音频补偿处理,之后进行音频解码,最终将解码后的数据通过扬声器播放出来。巧合的是,Mac端用于采集音频的系统API也称为CoreAudio,不过具体的函数名肯定是不同的;这些问题都是非常棘手的。从这张图中你可以看到,要实现跨平台,难度最大、首当其冲的,是访问硬件设备的模块,如音频采集模块、音频播放模块、视频采集模块以及视频播放模块等,它们在架构中的变化是最大的。
2023-09-07 16:34:16
58
原创 Licode—基于webrtc的SFU/MCU实现
本文先介绍了自己对webrtc的概念理解与使用参考,接下来从系统架构、交互流程、系统组成与模块划分几个角度对Licode进行概要设计级别的分析,最后对自己觉得Licode比较有特色的三大技术,即网络收发流水线架构技术、分布式保活技术与资源管理技术进行了浅层次的解释。文中表述内容可能会有不准确之处,希望能与读者们交流并及时改正。原文 Licode—基于webrtc的SFU/MCU实现 - 知乎。
2023-09-06 16:30:00
61
原创 WebRTC音视频传输基础:NAT穿透
NAT(Network Address Translation)指的是网络地址转换,常部署在一个组织的网络出口位置。网络分为私网和公网两个部分,NAT网关设置在私网到公网的路由出口位置,私网与公网间的双向数据必须都要经过NAT网关。位于NAT后的是私网IP地址,分配给NAT的是公网IP地址。NAT通过将私网IP地址映射为公网IP地址,实现私网设备访问外部互联网的能力。组织内部的大量设备,通过NAT就可以共享一个公网IP地址,解决了IPv4地址不足的问题。同时NAT也起到隐藏内部设备,安全防护的作用。
2023-09-06 14:45:00
57
原创 WebRTC,P2P技术,IPv6的一些思考
之前也说了,IPv4地址太贵只是NAT被广泛使用的原因之一,更深层次的原因是,互联网诞生之初所构想的世界大同的格局根本不可能实现,从物理设备的角度思考,如果想让人人平等地使用互联网,想要人人都能随时随地获得一个公网IP,就得在世界各地均匀地搭建类似蜂窝布局的互联网接入点(如5G基站),从而将互联网络覆盖到地球每个角落,但只要国家和地区之间充斥着不信任,各种私人领地像钉子户一般的存在,基站就不可能覆盖全球。这样一来,问题就解决了。所以,从资源守恒的角度看,NAT是牺牲端口号资源来扩充稀缺的ip地址资源;
2023-09-05 14:38:10
77
原创 WebRTC会成主流吗,webrtc音视频传输和p2p的组合
但是由于是基于BT协议,所以是一种pull-based的算法,这种算法是一种随机抓取的策略,随机抓取其它节点的buffer,但这样会存在一个问题:抓取的buffer不一定是目前需要的,也不一定是其他节点需要的,而且还会浪费下行带宽和其它节点的上行带宽,因此同时造成了“带宽饥饿”和“内容饥饿”问题。我们公司的创始人Alan在腾讯工作的时候也投入到这方面的研究,但失望的发现用WebRTC做P2P流媒体还有一些问题难以解决,比如用户在线的时间并不稳定,当用户关闭页面,WebRTC的数据通道也就关闭了。
2023-09-05 14:32:54
62
原创 WebRTC实现P2P文件传输
webrtc是为浏览器提供实现实时音视频通信能力的Api,分为Network Stream API、 RTCPeerConnection、Peer-to-peer Data API三类MediaStream:MediaStream用来表示一个媒体数据流。MediaStreamTrack在浏览器中表示一个媒体源。RTCPeerConnection: 一个RTCPeerConnection对象允许用户在两个浏览器之间直接通讯。RTCIceCandidate :表示一个ICE协议的候选者。
2023-09-05 14:29:00
86
原创 WebRTC ——实现视频会议的协议
自 COVID 时代开始以来,远程工作变得越来越流行已经不是什么秘密了,尽管疫苗已经出现,但许多公司和团队已经完全接受了在线工作的想法,并且不打算放手。因此,对在线协作工具的需求不断增加;尤其是视频会议解决方案。刚开始时,我对视频会议知之甚少。在彻底调查此事之后,我遇到了WebRTC 一种负责实时通信的协议(因此是RTC)。WebRTC不一定要用于视频会议,但绝对是在考虑到这一点而构建的。按照今天的标准,不到一秒的延迟被认为是实时的。
2023-09-01 14:30:00
93
原创 WebRTC实现P2P文件传输
本文讲的是利用WebRTC中的RTCPeerConnection的能力如何实现P2P通信的,在文末还有demo实现了P2P传输文件的应用,P2P传输文件的好处就是可以在同一内网的两台机器直接通过内网传输。本文涉及的技术点会有点多,我会先从介绍WebRTC和P2P开始,然后围绕WebRTC建立P2P连接的过程了解所有的具体内容。
2023-08-31 14:47:14
143
原创 WebRTC是如何实现音视频的录制
本文讲WeRTC是如何实现音视频的录制的参考资料:1.2022Android十一位大厂面试题;134道真题;再也不怕面试了2.腾讯Android开发笔记WebRTC) 是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和(或)音频流或者其他任意数据的传输。WebRTC包含的这些标准使用户在无需安装任何插件或者第三方的软件的情况下,创建点对点(Peer-to-Peer)的数据分享和电话会议成为可能。跨平台。
2023-08-30 21:39:52
110
原创 零基础快速入门WebRTC:基本概念、关键技术、与WebSocket的区别等
对称 NAT:Symmetric NAT 该方式是限制最多的一种,即必须匹配完整的 IP:port,区别在于发送到 5.5.5.5:3333 的数据包中,只有来自 4.4.4.4:80 的才会被自动转发到 10.0.0.2:8992,其他的包均无法通过。举例说明,发送到 5.5.5.5:3333 的数据包中,只有来自 4.4.4.4:80 或其他表中有过记录的 IP: Port 才会被自动转发到 10.0.0.2:8992,即使这个 IP: Port 之前并不是和 3333 端口进行的通信。
2023-08-29 20:33:19
61
原创 WebRTC技术简介
是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流、音频流或者其他任意数据的传输。WebRTC 必须在 HTTPS 环境下运行,你可以在appr.tc/、snapdrop.net/体验 WebRTC 应用,或者在nashaofu.github.io/webrtc-demo…,nashaofu.github.io/webrtc-demo…查看 WebRTC 示例。
2023-08-28 17:33:04
62
原创 搞懂WebRTC ,看这一篇就够了
WebRTC(Web Real-Time Communication——网页实时通信,是一个基于浏览器的实时多媒体通信技术。WebRTC最初是一个由Google发起的实时通讯解决方案,其中包含视频音频采集,编解码,数据传输,音视频展示等功能,我们可以通过技术快速地构建出一个音视频通讯应用。WebRTC架构。
2023-08-28 16:00:29
112
原创 如何用FFMpeg生成视频
我们知道在一个多媒体文件中,既包括音频也包括视频,而且音频和视频都是分开进行压缩的,因为音频和视频的压缩算法不一样,既然压缩算法不一样,那么肯定解码也不一样,所以需要对音频和视频分别进行解码。**简单来说,解复用这一步就是将音频流和视频流分开,方便后续解码。了,但是这种方式生成的MP4其实是有问题的,不仅剪辑软件无法支持(比如剪映),在添加音频、字幕的时候也非常奇怪(血的教训)。,也有两个概念比较重要,一个是采集到的原始音频数据(比如PCM),另一个是压缩后的音频数据,比如AAC,后面也会经常看到。
2023-08-26 15:28:12
105
原创 FFmpeg 之音视频解码与音视频同步(二)
我们经常所说的视频格式,如 mp4 、 mkv 、 rmvb 、flv 等,表示的是音视频的封装格式,封装格式实质上是把音频数据、视频数据和字幕数据打包成一个文件的规范。如果简单的按照音频的采样率与视频的帧率去播放,由于机器运行速度,解码效率等种种造成时间差异的因素影响,很难同步,音视频时间差将会呈现线性增长。音频中二者是相同的,但是视频由于B帧(双向预测)的存在,会造成解码顺序与显示顺序并不相同,也就是视频中DTS与PTS不一定相同。datalen为数据长度。2.以视频为基准,音频去同步视频的时间。
2023-08-26 15:15:37
123
原创 使用FFmpeg进行视频、音频转换
将D:\BaiduNetdisk\Download\bs_4096.mp4转化为720分辨率,新视频命名为bs_720.mp4。打开cmd命令窗口,输入命令“ffmpeg -version”,若出现版本号即可安装成功。
2023-08-26 15:11:59
128
原创 FFmpeg连载2-分离视频和音频
前面我们搭建好了FFmpeg的开发环境,今天我们就来小试牛刀,使用FFmpeg库对mp4文件进行解封装,提取mp4中的视频流和音频流输出到单独的输出文件中。关于FFmpeg开发环境搭建可以看我之前的文章。所谓的分离视频和音频是我们通俗的说法,官方的说法叫解封装。与解封装对应的叫封装或复用器,也就是将多个视频流或音频流合并成一个多媒体文件就叫封装。在FFmpeg中解封装的大致流程如下图所示:在这里需要注意的一个点是不一定能获取到你想要的流,比如你想通过。
2023-08-26 14:30:20
83
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人