有段时间没更新了,最近学习webrtc等音视频相关的东西也先放下了。因为我发现学习这些真的一时半会真没有什么成就感,并且是一个漫长的过程,不能很好的给予我正反馈。但不是说我花费的时间和努力就浪费了,相反我认为我在上面花的时间和努力是值得的,一方面是让我在计算机网络、程序的运行编译环境上、常用的集成开发环境,工具的使用、等等有了一定的认识和了解,我觉的更重要的是锻炼了我的自主学习和解决问题的能力。 目前我在学习的是springboot,也就是后端方向的学习。并且我也深刻认识到了AI的强大,我用cursor实现了一个简单的图书管理系统,代码全由AI完成,并且数据库的设计,以及前端的UI设计也全是由
想学习一下webrtc原生API的使用,开始是学习 https://www.nxrte.com/jishu/webrtc/29168.html 这个项目的,奈何出现太多问题了,webtc版本问题、线程安全问题、好些问题都不知道什么原因造成的、最后就是弄到能跑一半的程度。只能说,还得学( ̄﹃ ̄),然后就是看到官方源码上的案例,但就是挺坑的,运行还有点问题。在网上各处找解决办法。总结下来,要改的地方有三处。 需要修改的地方 第一处在main.cc中 12345678910111213141516171819202122MainWnd wnd(server.c_str(), absl::GetF
为了使用编译后的webrtc库我花了很多时间,终于在今天解决了各个问题,并正式在自己的项目中使用。说真的很累(* ̄(oo) ̄)。但成功了让我觉得这一切都没有白费(≧▽≦q) Windows 环境下下载 WebRTC 源码 准备工作 安装必要工具 Visual Studio 安装 Visual Studio 2022 勾选以下组件: C++开发桌面工作负载(包含 MSVC、Windows 10 SDK) 安装 Python 安装时勾选 “Add Python to PATH”。 安装 Git 从官网下载并安装:https://git-scm.com/download
线程管理 线程控制 线程创建 通过pthread_create函数创建线程,线程可以并发执行任务。示例中创建了两个线程,一个用于读取控制台输入,另一个用于将数据输出到控制台。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263#include<pthread.h>#include<stdio.h>#include<stdlib.h>#include<unistd.h
这里我将学习的进程与线程分为三个大部分 1.进程创建:使用fork创建子进程,execve执行新程序。 2.进程通信:匿名管道、有名管道、共享内存、消息队列、信号 3.线程管理:线程创建、终止、同步(互斥锁、读写锁、条件变量等) 要想进一步了解系统的底层原理可以去看操作系统相关的知识,了解了解进程线程的内存模型,以及进程线程在系统上的工作原理。这里有一篇不错的文章 https://zybtree.github.io/2020/08/10/进程-线程模型/ 进程创建 使用 fork 创建子进程 • fork 的作用:fork 是 Linux 系统中用于创建子进程的系统调用。调用 fork
花了点时间跟着B站的教程手敲了一个关于WebRtc的项目,它是B/S框架的,用js做的前后端。工具用的是node,可以说是非常的方便。js语法本身也简单易学,和C有很多相似之处。总的来说nodejs YYDS(q(≧▽≦q)) 整个项目可以分为三大块 身份验证:登录、注册 涉及到前端界面,数据库,信令服务器,node web服务器 聊天室 涉及到前端界面,信令服务器,node web服务器 1v1聊天室 涉及到前端界面,信令服务器,node web服务器,NAT穿透服务器(当然我这里没有搭建,所以候选者用的host,毕竟就是为了学习WebRtc) 相关设计 1、B/S架构模式
在网上找到了一个非常适合入门的教程,分享给有缘人(稍微改了以下布局,并添加了一点内容o( ̄︶ ̄)o) WebRtc处理过程 实现1v1的通话有4个部分,WebRtc终端(这里理解为浏览器端)、Signal(信令)服务器、STUN/TURN服务器 WebRtc终端,负责音视频的采集、编解码、NAT穿越、音视频数据传输 (这里终端暂时看做浏览器,webRtc不止应用在浏览器) Signal服务器,负责信令处理,如有人加入房间、离开房间、媒体协商消息传递等。(类似聊天室的xx加入房间),一般采用WebSocket连接 STUN/TURN服务,负责获取WebRtc终端在公网的ip地址,以及NAT穿
通过学习跟着写了一个音视频播放器。内容有点多,所以我就不打算在博客都展示出来了,这里就展示一下每个类的核心逻辑。思路很清晰,这里就简单讲解一下吧((~o ̄3 ̄)~) 音视频队列 packet队列 avpacketqueue 存储解复用线程中读取到的packet数据,因为队列的实现比较简单,我就展示一下该类的结构吧 12345678910111213class AVPacketQueue{public: AVPacketQueue(); ~AVPacketQueue(); void Abort(); int Size(); int Push(AVPa
用FFmpeg与SDL写了一个简单的音视频播放器,但还有很大的问题。首先并没有使用多线程,音视频的解码渲染操作都在主线程中,导致在同时播放视频的时候,音频的播放会出现断断续续的情况,把视频的播放关闭就不会出现问题。还有就是队列的实现,目前只有音频使用了队列,而视频则是直接播放渲染, 要使用队列的话就不得不实现多线程了。之后还有音视频的同步等等,这些都是需要改进的点。不过我相信在后面的学习中都会解决的<( ̄︶ ̄)↗[GO!] 这里就直接放源码了(○` 3′○) 12345678910111213141516171819202122232425262728293031323334353637
学习了一下SDL,跟着教学用SDL实现了以下的简单程序 这里入口函数被设置为了WinMain,是因为SDL对入口函数的要求,可以通过加入#define SDL_MAIN_HANDLED来阻止SDL重写main函数。 随机加载红色方块 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959