- 博客(855)
- 资源 (5)
- 收藏
- 关注
转载 FFmpeg代码导读系列(一)----基础篇
推流端:负责音视频数据的采集、处理、编码及封装后将数据推送至至源站;服务端:涵盖源站和CDN,接收来自推流端的音视频数据,然后将数据分发至各播放端;播放端:从CDN拉取直播数据,解复用、解码后渲染音视频数据;图1. 直播框架图.png引入HEVC编码模块:需要支持HEVC格式的编解码,该部分不属于本文的介绍范畴,我们有在其它文章中介绍如何在iOS11上进行HEVC的硬编硬解,感兴趣的朋友可自行查阅;RTMPHTTP-FLV流媒体协议需要增加对HEVC。
2024-04-17 15:09:51 2
转载 音频格式--PCM介绍
对于语音电话信道,每秒采集 8,000 个样本就足够了,即每 125 μs 采集一个样本,因为根据采样定理,当采集频率为最大频率两倍的电信号样本时信号,这些样本将包含重建原始信号所需的所有信息。PCM指的是脉冲编码调制(Pulse Code Modulation),是一种数字信号处理技术,将由波形表示的模拟音频信号转换为由1和0表示的数字音频信号。在电话交谈的采样中,由于样本在语音强度范围内可以有无限多个值,因此电话信道中的范围约为 60 dB。为了简化过程,所做的是对一系列预定值中最接近的值进行近似。
2024-03-29 16:56:41 12
转载 语音大模型之Whisper
Whisper模型方法证明了只需要用大量的弱标签数据,不需要很复杂的模型和调优方法,就可以到达非常不错的识别性能,尤其是在鲁棒性和泛化性上。这也是大家比较公认的一个结论,即数据才是模型性能提升的最大影响因素。
2024-03-05 14:17:45 133
转载 深度学习之语音识别-音频基础知识、声谱图(Spectrogram)
但由于谐波的多少不同,并且各谐波的幅度各异,因而产生了不同的音色。轻轻敲鼓时,鼓膜振动的幅度小,发出的声音弱。音色是人们区别具有同样响度、同样音调的两个声音之所以不同的特性,或者说是人耳对各种频率、各种强度的声波的综合反应。另外,人们对响度的感觉还和声波的频率有关,同样强度的声波,如果其频率不同,人耳感觉到的响度也不同。通过改变它们的振幅(amplitude),即这个震动的具有的能量大小,被称为音量(volume)纵坐标(频率):纵坐标表示声音频率,纵坐标越大,说明频率越高,越接近0,说明频率越低。
2024-01-24 11:07:50 137
转载 Kafka: 理解Kafka offset
因此,如果需要保证主题内或跨主题的顺序性,需要在生产者和消费者端进行额外的处理,例如使用同一个分区键或同一个消费组。生产者也可以自定义分区算法。消费者在消费 Kafka 消息时,需要维护一个当前消费的 offset 值,以及一个已提交的 offset 值。当前消费的 offset 值表示消费者正在消费的消息的位置,已提交的 offset 值表示消费者已经确认消费过的消息的位置。提交 offset 是消费者在消费完一条消息后,将当前消费的 offset 值更新到 Kafka broker 中的操作。
2024-01-16 14:39:20 68
转载 详解Enhanced-RTMP支持H.265
SrsVideoFrame中的SrsSample数据,是去掉flvTagHeader的视频帧数据,这样传递到下行后,可以根据需要再次打包flvTagHeader,下行可以再次打包成传统的CodecId=12的H.265格式,也可以打包成Enhance RTMP格式(因为下行的兼容性问题,不推荐下行打包成Enhance RTMP格式,下一节会说明原因)准确的说,RTMP是传输协议,传输协议内部的封装是flv格式,其实我们所说的支持H.265,是在flv封装格式里面支持H.265编码数据。
2024-01-03 14:58:53 219
转载 《ZLToolKit源码学习笔记》(2)工具模块之日志功能分析
该类包含一个纯虚函数write,以及一个静态函数printTime,两个成员函数name和setLevel,以及一个虚函数format,实际的日志输出最终在format中,如果是终端,还会对不同级别的日志信息分颜色输出。当执行logContextCapturer
2023-10-27 16:52:57 198
原创 视频分辨率: UXGA/SVGA/VGA/QVGA/QQVGA
1. VGAVideo Graphics Array, 视频图形阵列, 最大分辨率: 640 * 480, 纵横比: 4/32. SVGASuper Video Graphics Array,高级视频图形阵列,由VESA为IBM兼容机推出的标准,属于VGA的替代品。最大支持分辨率: 800*600, 纵横比: 4/33. XGAExtended Graphics Array,扩展图形阵列,是IBM于1990年发明的, 最大支持分辨率: 1024*768, 纵横比: 4/34. SXGA。
2023-08-09 16:59:06 1165
原创 音视频开源库: libsrtp
初始化 srtp 库,初始化内部加密算法,在使用 srtp 前,必须要调用了。通过这个结构传递给 libsrtp,用于 session key 的生成。设置和获取 stream 的 ROC,这两个接口在最新的 2.3 版本加入。libsrtp是被广泛使用的 SRTP/SRTCP 加密的开源项目。使用该库作为基础库的开源音视频项目: srs/zlmediakit。,对应我们之前描述的 srtp 防重放攻击的窗口大小。,用来初始化加解密参数,在。,是否允许重传相同序号的包。RTCP 包的加解密接口。
2023-07-18 14:18:55 691
转载 Kubernetes 设计模式笔记 —— 声明式部署
或者不允许有 downtime,但在升级过程中,新旧版本的服务同时在线会造成资源消耗的增长(旧版本开始停止的时候就添加新版本的实例)。一旦用户确认新版本的 Pod 是健康的,可以提供服务,就将入站流量从旧的 Pod 副本切换到新版本的副本。比如在升级过程中,会有两个版本的容器同时运行,这有可能导致接收服务的客户端出现一些 issue,尤其当更新引入了没有向后兼容的特性时。滚动升级有一个切换的过程,必然导致某个时间段内新旧版本的应用同时运行,从而实际运行的 Pod 数量大于声明的副本数量。
2023-03-16 17:59:25 192 1
转载 开源多媒体框架
Mpp的API思路其实跟目前绝大多数的编解码库是一致的,都是queue/dequeue的队列操作方式,先设置好编解码状态,然后不停的queue/dequeue input/output buffer就可以实现编解码控制了。一个良好的多媒体框架提供了一个直观的API和一个模块化的架构而易于添加对新的音频、视频和容器格式以及传输协议的支持。该文章记录的每个开源库的简介和链接地址,总结的很好,有常用的FFMPEG,WebRTC,VLC,X264、X265等,也有人工智能处理相关的,以及播放器类。
2023-01-19 14:48:34 529
原创 开源播放器
GSYVideoPlayer: 视频播放器(IJKplayer、ExoPlayer、MediaPlayer),HTTPS支持,支持弹幕,支持滤镜、水印、gif截图,片头广告、中间广告,多个同时播放,支持基本的拖动,声音、亮度调节,支持边播边缓存,支持视频本身自带rotation的旋转(90,270之类),重力旋转与手动旋转的同步支持,支持列表播放 ,直接添加控件为封面,列表全屏动画,视频加载速度,列表小窗口支持拖动,动画效果,调整比例,多分辨率切换,支持切换播放器,进度条小窗口预览,其他一些小动画效果,rt
2023-01-05 11:57:48 256
转载 Linux下玩转nginx系列(八)---如何使用upsync模块实现动态负载均衡
一、HTTP动态负载均衡动态负载均衡动态负载均衡策略类似于加权轮询策略,可以通过对于后端服务器集群的状态监测,量化不同服务器的性能差异,来周期性调整服务器的比重来实现权重的动态调整。在nginx中传统的负载均衡,如果Upstream参数发生变化,每次都需要重新加载nginx.conf文件,因此扩展性不是很高,所以我们可以采用动态负载均衡,实现Upstream可配置化、动态化,无需人工重新加载nginx.conf。这类似分布式的配置中心。动态负载均衡实现方案Consul+Consul-template 每次
2022-12-07 17:56:27 380
转载 重磅:SRS 5.0正式支持GB28181
而这些问题的解决方案都是Lazy Sweep,也就是互相持有的不是裸指针,而是Wrapper指针(有点像C++ 11的智能指针只是没有什么智能可言),因为Wrapper释放后Resource还是可用的,其他Wrapper对象还是可以使用Resource,我们在释放Resource时,等所有Wrapper都释放后再安全释放,也就是Lazy Sweep。从未来看,GB协议也不一定就是唯一可用的协议,当然了人应该活在当下,既然有这么多开发者在用SRS做GB,那么SRS尽量把GB做好一些,也是应该做的。
2022-11-08 14:19:31 3674
转载 SRS:流媒体服务器如何实现负载均衡
, Benjamin当我们的业务超过单台流媒体服务器的承受能力,就会遇到负载均衡问题,一般我们会在集群中提供这种能力,但实际上集群并非是唯一的实现方式。有时候负载均衡还会和服务发现等时髦词汇联系起来,而云服务的LoadBalancer无疑是不可回避,因此,这个问题其实相当复杂,以致于大家会在多个场合询问这个问题,我打算系统的阐述这个问题。好吧,让我们详细聊聊负载和负载均衡。
2022-11-03 11:40:33 283
转载 技术分享| 视频传输Simulcast与Svc
可伸缩视频编码SVC(Scalable Video Coding)是一种可扩展的视频编码模式,是H.264标准的一个扩展,最初由JVT在2004年开始制定。H.264 SVC是H.264标准的扩展部分,SVC扩展部分引入了一种传统H.264 AVC不存在的概念——编码流中的层。基本层编码最低层的时域、空域和质量流;增强层以基本层作为起始点,对附加信息进行,从而在解码过程中重构更高层的质量、分辨率和时域层。通过解码基本层和相邻增强层,解码器能生成特定层的视频流。
2022-09-17 16:02:20 447
转载 【H264】压缩编码原理
H264 视频压缩算法现在无疑是所有视频压缩技术中使用最广泛,最流行的。随着 x264/openh264 以及 FFmpeg 等开源库的推出,大多数使用者无需再对 H264 的细节做过多的研究,这大降低了人们使用 H264 的成本。但为了用好 H264,我们还是要对 H264 压缩编码的基本原理弄清楚才行。今天我们就来看看 H264 压缩编码的基本原理。回到顶部H264 编码器采用的是变换和预测的混合编码法。由上图所示,输入的帧或场 Fn 以宏块为单位被编码器处理。首先,按帧内或帧间预测。
2022-09-09 13:55:02 232
转载 视频编码基础知识2-H264帧间编码原理
再结合上一节的编码器来看,当传输缓冲器接收到B帧时会暂时缓冲在传输缓冲器中,直到获取到I帧或P帧时,会将传输缓冲器中的B帧通过编码控制重新经过视频信源编码器、视频复合编码器、传输缓冲器一起依次排在P帧之后通过传输编码器输出。这里以点盖面,以车子的车牌为例:车牌向左移动了,就是宏块位置发生了变化,在第二帧数据中就不用再次编码宏块的左侧和上侧的像素信息,只需要记录宏块的坐标信息(运动矢量),从而减少编码和传输的数据量(P帧和B帧的来源)。与I帧相似程度高达到95%以上会编码成B帧,相似程度70%编码成P帧。
2022-09-09 13:44:14 593
转载 流媒体基础知识TS流 PS流 ES流区别
IP数据报有首部和数据两部分组成的,首部的前一部分是固定长度20字节,是所有IP数据报必须具有的。首部包括:总长度、标识、MF、DF、片偏移。数字信号实际传送的是数据流,一般数据流包括以下三种:(1)ES流(Elementary Stream):也叫基本码流,包含视频、音频或数据的连续码流。(2)PES流(Packet Elementary Stream):也叫打包的基本码流,是将基本的码流ES流根据需要分成长度不等的数据包,并加上包头就形成了打包的基本码流PES流。(3)TS流:也叫传输流,是由固定长度为
2022-09-06 17:40:52 613
原创 FFmpeg源代码:avformat_write_header/av_write_frame/av_interleaved_write_frame/av_write_trailer
跟写视频文件相关的三个配套接口是avformat_write_header()用于写视频文件头av_write_frame()用于写视频数据av_interleaved_write_frame() 用于交错写视频数据av_write_trailer()用于写视频文件尾。
2022-08-26 11:14:52 867
原创 FFmpeg源代码:avformat_new_stream
avformat_new_stream接口声明位于ffmpeg/libavformat/avformat.h 中,主要功能为在AVFormatContext 中创建 Stream 通道 与该接口相关的结构体avformat_new_stream接口实现位于ffmpeg/libavformat/utils.c 中
2022-08-26 10:15:26 731
原创 FFmpeg源代码:avformat_alloc_output_context2()
avformat_alloc_output_context2接口位于ffmpeg/libavformat/avformat.h中,avformat_alloc_output_context2()函数可以初始化一个用于输出的AVFormatContext结构体。如果指定为NULL,可以设定后两个参数(format_name或者filename)由FFmpeg猜测输出格式。根据格式名称,FFmpeg会推测输出格式。输出格式可以是“flv”,“mkv”,“mpegts”等等。...
2022-08-25 22:18:18 365
原创 FFmpeg源代码:av_image_get_buffer_size&av_image_copy_to_buffer
对齐的对齐数,也就是按多大的字节进行内存对齐。比如设置为1,表示按1字节对齐,那么得到的结果就是与实际的内存大小一样。再比如设置为4,表示按4字节对齐。也就是内存的起始地址必须是4的整倍数。av_image_get_buffer_size 接口声明位于libavutil/imgutils.h。根据像素格式、宽、高、linesize 对其方式来计算所需的内存大小。重点说明一个参数align:此参数是设定。...
2022-08-12 16:31:16 1104
原创 FFmpeg源代码:av_read_frame
例如,解码视频的时候,每解码一个视频帧,需要先调用 av_read_frame()获得一帧视频的压缩数据,然后才能对该数据进行解码(例如H.264中一帧压缩数据通常对应一个NAL)。从接口定义中可以看出,av_read_frame()调用了read_frame_internal()1. ff_read_packet()从相应的AVInputFormat读取AVPacket数据;ffmpeg中的av_read_frame()的作用是读取码流中的。read_frame_internal()是一个内部函数。...
2022-08-10 23:17:28 381
原创 FFmpeg源代码:AVFormatContext相关接口
需要注意的是,有些封装格式并没有header 或者header中并没有存储足够的信息,所以还需要调用avformat_find_stream_info函数来读取并解码一些帧来获取足够的信息。该接口的功能是打开一个输入媒体文件,读取文件头(如果有的话,MPEG没有format header)并探测视频封装格式,将媒体文件信息存储到ps中。dictionay:附加的一些选项,一般情况下可以设置为NULL。该接口注释已经写的很详细了,中文简单概述下。url:打开的视音频流的URL。.........
2022-08-10 18:02:40 211
转载 nginx代理多次302的解决方法(nginx Follow 302)
这篇文章主要介绍了nginx代理多次302的解决方法(nginx Follow 302),详细的介绍了解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧用proxy_intercept_errors和recursive_error_pages代理多次302302是HTTP协议中的一个经常被使用状态码,是多种重定向方式的一种,其语义经常被解释为“Moved Temporarily”。这里顺带提一下,现实中用到的302多为误用(与303,307混用),在HTTP/1
2022-05-06 11:13:12 15801
GBT 28181-2016 公共安全视频监控联网系统信息传输、交换、控制技术要求.pdf
2024-03-27
video_file_format_spec_v10_1.pdf
2018-05-14
Lex和Yacc从入门到精通pdf
2017-12-25
rtmpdump-2.3_add_note
2017-09-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人