V1.0 2024年6月13日 发布于博客园 目录base64.hbase64.c 基本原理见代码注释! base64.h #ifndef _BASE64_H #define _BASE64_H /** * @file name : base64.h * @brief : 用于将字节进行base64 ...
JSON 简介 JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式。它基于ECMAScript(欧洲计算机制造商协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON成 ...
XviD是个开源的视频编解码器,它与DivX一同被纳入MPEG-4规范第二部分的视频标准,但DivX并未开源。早期的MP4视频大多采用XviD或者DivX编码,当时的视频格式被称作MPEG-4。现在常见的H.264后来才增补到MPEG-4规范的第十部分,当然如今使用XviD压缩的视频已经不多了。 ...
上一篇文章介绍了如何通过ZLMediaKit实现视频推拉流,并使用VLC播放器验证视频直播地址。即使不用VLC播放器,直接在Qt工程的C++代码中调用FFmpeg的API,也能访问ZLMediaKit的直播地址,并正常渲染视频画面。关于如何在Qt工程中引入FFmpeg,可参考《FFmpeg开发实战 ...
V1.0 2024年6月5日 发布于博客园 目录理论代码服务器端客户端 理论 服务器端先运行, 能够接收来自任何地方的多个客户端发起的指向特定端口(这里是50002)的TCP请求, 并和客端建立稳定的TCP连接. 没有连接请求时等待, 有连接后先来后到的原则, 依次服务, 能够相互通信. 当客户端结 ...
用udp协议传输文件 目录用udp协议传输文件头文件/宏定义客户端服务器 头文件/宏定义 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <netinet/in.h> ...
在典型的NAT穿透场景中,知道服务器端的公网IP和端口,但不知道客户端的公网IP,可以通过一些技巧来实现UDP打洞。可实现内网客户端与服务器相互UDP通信。 ...
进程间通信方式 1.无名管道/有名管道 2.信号 3.共享队列(system V-IPC) 4.共享内存(system V-IPC) 5.信号量(system V-IPC) 6.套接字 无名管道特征 1.文件没有名字,无法使用open 2.只能用于亲缘进程间 3.半双工工作方式:读写端分开 4.写入 ...
进程是计算机分配资源的基本单位,线程是cpu调度的基本单位 线程基本概念: LWP:light weight process 轻量级的进程。创建线程的底层函数和进程一样,都是clone,因此线程的本质仍是进程(在linux环境下) 与进程相比,线程有独立的TCB结构体(类似于进程的PCB),但没有独 ...
1.线程池本质 多个线程组成的一个集合,目的为了并发执行任务,定义时是一个结构体,成员有互斥锁,条件变量,任务链队列指针,任务链队列中等待的任务个数,当前活跃的线程数量,线程ID,线程销毁标记等 2.线程池的关键技术 (1)万能函数指针(通用函数指针): *void *(*p)(void ) ( ...
《FFmpeg开发实战:从零基础到短视频上线》一书在第10章介绍了轻量级流媒体服务器MediaMTX,通过该工具可以测试RTSP/RTMP等流媒体协议的推拉流。不过MediaMTX的功能实在是太简单了,无法应用于真实直播的生产环境,真正能用于生产环境的流媒体服务器还要看SRS或者ZLMediaKi ...
互斥锁,也叫互斥量。有以下几个显著的特点: 唯一性:互斥锁保证在任何给定的时间点,只有一个线程可以获得对临界区资源的访问权。如果一个线程锁定了一个互斥量,在它解除锁定之前,没有其他线程可以锁定这个互斥量。 原子性:锁定和解锁互斥锁的操作是原子的,这意味着操作系统(或pthread函数库)保证了如果一 ...
读写锁(rwlock)与互斥锁(Mutex Lock)相比,有如下特点: 更加细致的区分了读和写,给共享资源分别上了“读”锁和“写”锁。 “写”独占,“读”共享,“写”锁优先级更高 如果共享资源在绝大多数情况下是“读”操作,可以提高程序的并发性能。 常用的函数原型总结如下: pthread_rwlo ...
《FFmpeg开发实战:从零基础到短视频上线》一书介绍了JPEG、PNG、GIF等图片格式,以及如何通过FFmpeg把视频画面转存为这些格式。除了上述这些常见的图片格式,还有较新的WebP格式,它由VP8视频标准派生而来,VP8演进的视频格式叫做WebM,图片格式则叫WebP。 若想让FFmpeg ...
我们知道,lua通过package模块来管理模块的搜索和加载,当使用require首次成功加载一个模块后,模块(Table)会被存储在package.loaded中,之后的require行为会直接获取到已加载的模块缓存。 如何在程序执行时,将对模块文件的修改热更新到程序中,同时确保运行时状态的正常。 ...
Design OOP use C 使用c语言实现面向对象特性 以底层思维来理解面向对象。我所理解的oop:为不同的数据元提供稳定的处理逻辑框架,同时提供复写的可能,支持不同数据元个性化定制有限的逻辑; 多态特性: 基类实现一组通用处理逻辑接口,子类通过改变特定接口的执行逻辑实现将子类与个性化操作绑定 ...
strcpy和memcpy 目录strcpy和memcpy 复制内容: strcpy:专门用于复制字符串,它会一直复制直到遇到源字符串中的'\0'结束符。这意味着如果源字符串长度超过了目标缓冲区的大小(不包括'\0'),就会发生缓冲区溢出,这是一个常见的安全隐患。 memcpy:可以复制任意内容,如 ...
AV1是一种新兴的免费视频编码标准,它由开放媒体联盟(Alliance for Open Media,简称AOM)于2018年制定,融合了Google VP10、Mozilla Daala以及Cisco Thor三款开源项目的成果。据说在实际测试中,AV1标准比H.265(HEVC)的压缩率提升了 ...
OBS是一个开源的直播录制软件,英文全称叫做Open Broadcaster Software,广泛用于视频录制、实时直播等领域。OBS不但开源,而且跨平台,兼容Windows、Mac OS、Linux等操作系统。 OBS的官网是https://obsproject.com/,录制软件名叫OBS ...
笔者做项目过程中,使用了很多关于字符串的C库中自带功能函数,极大便利了项目流程。再次做一个小结,之后若有增加会继续补充。 所需采用函数 序号 函数/描述 1 char *strcat(char *dest, const char *src) 【char *strncat(char *dest, co ...