深入研究 kvm,ceph,fuse 特性
项目地址:[https://github.com/0voice/kernel_awsome_feature]
(https://github.com/0voice/kernel_awsome_feature)
项目地址:[https://github.com/0voice/kernel_awsome_feature]
(https://github.com/0voice/kernel_awsome_feature)
io_uring(以前称为aioring)是一个用于存储设备异步 I/O操作的Linux 内核系统调用接口,解决了与/或/等函数提供的类似接口的性能问题,用于对文件描述符访问的数据进行操作。
cgroups,其名称源自控制组群(英语:control groups)的简写,是Linux内核的一个功能,用来限制、控制与分离一个进程组的资源(如CPU、内存、磁盘输入输出等)。
这个项目最早是由Google的工程师(主要是Paul Menage和Rohit Seth)在2006年发起,最早的名称为进程容器(process containers)。在2007年时,因为在Linux内核中,容器(container)这个名词有许多不同的意义,为避免混乱,被重命名为cgroup,并且被合并到2.6.24版的内核中。自那以后,又添加了很多功能。
eBPF 是一项革命性的技术,起源于 Linux 内核,可以在操作系统内核中运行沙盒程序。它用于安全有效地扩展内核的功能,而无需更改内核源代码或加载内核模块。
从历史上看,由于内核具有监督和控制整个系统的特权,操作系统一直是实现可观察性、安全性和网络功能的理想场所。同时,操作系统内核由于其核心作用和对稳定性和安全性的高要求,难以演进。因此,与在操作系统之外实现的功能相比,操作系统级别的创新率传统上较低。
LLVM 项目是模块化和可重用的编译器和工具链技术的集合。尽管有它的名字,LLVM 与传统的虚拟机几乎没有关系。“LLVM”这个名字本身不是首字母缩写词;它是项目的全名。
LLVM 最初是伊利诺伊大学的一个研究项目,其目标是提供一种现代的、基于 SSA 的编译策略,能够支持任意编程语言的静态和动态编译。从那时起,LLVM 已经发展成为一个由多个子项目组成的伞形项目,其中许多子项目被各种 商业和开源项目用于生产,并被广泛用于学术研究。LLVM 项目中的代码根据 “Apache 2.0 License with LLVM exceptions”获得许可。
以上所有资源内容,都整合到我的Github项目中了:https://github.com/0voice/kernel_new_features
目前项目还在不断完善当中,有需要的开发者,可以去下载学习。 记得给小弟一个Star,谢谢!
ffmpeg --help
大概分为6个部分,具体如下:# 封装和解封装
ffmpeg -formats
# 解封装
ffmpeg -demuxers
# 封装
ffmpeg -muxers
# 查看FLV封装器的参数支持
ffmpeg -h muxer=flv
# 查看FLV解封装器的参数支持
ffmpeg -h demuxer=flv
# 编解码
ffmpeg -codecs
# 解码
ffmpeg -decoders
# 编码
ffmpeg -encoders
# 查看H.264(AVC)的编码参数支持
ffmpeg -h encoder=h264
# 查看H.264(AVC)的解码参数支持
ffmpeg -h decoder=h264
# 滤镜
ffmpeg -filters
# 查看colorkey滤镜的参数支持
ffmpeg -h filter=colorkey
ffmpeg -i WMV9_1280x720.wmv -vcodec mpeg4 -b:v 200 -r 15 -an output.mp4
# -i 文件 (后缀名)封装格式
# -vcodec 视频编码格式
# -b:v 视频码率
# -r 视频帧率
# -an 不包括音频
-show_packets
查看多媒体数据包信息字段 | 说明 |
---|---|
codec_type | 多媒体类型,如视频包、音频包等 |
stream_index | 多媒体的stream索引 |
pts | 多媒体的显示时间值 |
pts_time | 根据不同格式计算过后的多媒体的显示时间 |
dts | 多媒体解码时间值 |
dts_time | 根据不同格式计算过后的多媒体的解码时间 |
duration | 多媒体包占用的时间值 |
duration_time | 根据不同格式计算过后的多媒体包所占用的时间值 |
size | 多媒体包的大小 |
pos | 多媒体包所在的文件偏移位置 |
flags | 多媒体包标记,如关键包与非关键包的标记 |
-show_format
查看多媒体的封装格式字段 | 说明 |
---|---|
filename | 文件名 |
nb_streams | 媒体中包含的流的个数 |
nb_programs | 节目数 |
format_name | 使用的封装模块的名称 |
format_long_name | 封装的完整名称 |
start_time | 媒体文件的起始时间 |
duration | 媒体文件的总时间长度 |
size | 媒体文件的大小 |
bit_rate | 媒体文件的码率 |
-show_frames
查看视频文件中的帧信息属性 | 说明 | 值 |
---|---|---|
media_type | 帧的类型(视频、音频、字幕等) | video |
stream_index | 帧所在的索引区域 | 0 |
key_frame | 是否为关键帧 | 1 |
pkt_pts | Frame包的pts | 0 |
pkt_pts_time | Frame包的pts的时间显示 | 0.080000 |
pkt_dts | Frame包的dts | 80 |
pkt_dts_time | Frame包的dts的时间显示 | 0.080000 |
pkt_duration | Frame包的时长 | N/A |
pkt_duration_time | Frame包的时长时间显示 | N/A |
pkt_pos | Frame包所在文件的偏移位置 | 344 |
width | 帧显示的宽度 | 1280 |
height | 帧显示的高度 | 714 |
pix_fmt | 帧的图像色彩格式 | yuv420p |
pict_type | 帧类型 | I |
-show_streams
查看多媒体文件中的流信息属性 | 说明 | 值 |
---|---|---|
index | 流所在的索引区域 | 0 |
codec_name | 编码名 | h264 |
codec_long_name | 编码全名 | MPEG-4 part 10 |
profile | 编码的profile | High |
level | 编码的level | 31 |
has_b_frames | 包含B帧信息 | 2 |
codec_type | 编码类型 | video |
codec_time_base | 编码的时间戳计算基础单位 | 1/50 |
pix_fmt | 图像显示的色彩格式 | yuv420p |
coded_width | 图像的宽度 | 1280 |
coded_height | 图像的高度 | 714 |
codec_tag_string | 编码的标签数据 | [0][0][0][0] |
r_frame_rate | 实际帧率 | 25/1 |
avg_frame_rate | 平均帧率 | 25/1 |
time_base | 时间基数(用来进行timestamp计算) | 1/1000 |
bit_rate | 码率 | 200000 |
max_bit_rate | 最大码率 | N/A |
nb_frames | 帧数 | N/A |
-printf_format
或-of
格式化输出支持XML、INI、JSON、CSV、FLAT等Visualize information exported by some codecs.
http://ffmpeg.org/ffmpeg-all.html#codecview
https://trac.ffmpeg.org/wiki/Debug/MacroblocksAndMotionVectors
ffmpeg -h filter=codecview
Visualize forward predicted MVs of all frames using
ffplay -flags2 +export_mvs input.mp4 -vf codecview=mv_type=fp
Visualize multi-directionals MVs of P and B-Frames using
ffplay -flags2 +export_mvs input.mp4 -vf codecview=mv=pf+bf+bb
需要知道 源容器 和 目标容器 的可容纳的编码格式
编码格式如果相互兼容,可以用-c copy
拷贝原有的stream
ffmpeg -i input.mp4 -c copy -f flv output.flv
编码格式如果不兼容,需要转化成目标文件支持的编码
ffmpeg -i input_ac3.mp4 -vcodec copy -acodec aac -f flv output.flv
FFmpeg转HLS举例
常规的从文件转换HLS直播时:
ffmpeg -re -i input.mp4 -c copy -f hls -bsf:v h264_mp4toannexb output.m3u8
# -bsf:v h264_mp4toannexb 作用是将MP4中的H.264数据转换成H.264 AnnexB标准编码,AnnexB标准的编码常见于实时传输流中
如果源文件为FLV、TS等可以作为直播传输流的视频,则不需要这个参数。
ffmpeg推流上传HLS相关的M3U8以及TS文件
Nginx配置webdav模块
ffmpeg -re -i input.mp4 -c copy -f hls -hls_time 3 -hls_list_size 0 -method PUT -t 30 http://127.0.0.1/test/output.m3u8
FFmpeg抽取音视频文件中的AAC音频流 ffmpeg -i input.mp4 -vn -acodec copy output.aac
FFmpeg抽取音视频文件中的H.264视频流 ffmpeg -i input.mp4 -vcodec copy -an output.h264
FFmpeg抽取音视频文件中的H.265视频流(前提文件视频编码格式为hevc)
ffmpeg -i input.mp4 -vcodec copy -an -bsf hevc_mp4toannexb -f hevc output.hevc
ffmpeg -i input.mp4 -c:v libx265 -vtag hvc1 h265_output.mp4
ffmpeg -i AVC_high_1280x720_2013.mp4 -vn -acodec libmp3lame -f mp3 out.mp3
$git clone git://git.videolan.org/x264.git
$cd x264
$./configure –enable-shared
$make
$sudo make install
x264 --full help
编码器预设参数设置preset 通常通过preset来设置编码的速度,影响清晰度 ffmpeg -i input.mp4 -vcodec libx264 -preset ultrafast -b:v 2000k output.mp4
H.264编码优化参数tune 在使用ffmpeg与x264进行H.264直播编码并进行推流时,只用tune参数的zerolatency将会提升效率,因为其降低了因编码导致的延迟。
H.264的profile与level设置 baseline profile编码的H.264视频不会包含B Slice,而使用main profile、high profile编码出来的视频,均可以包含B Slice ffmpeg -i input.mp4 -vcodec libx264 -profile:v baseline -level 3.1 -s 352x288 -an -y -t 10 output_baseline.ts
ffmpeg -i input.mp4 -vcodec libx264 -profile:v high -level 3.1 -s 352x288 -an -y -t 10 output_high.ts
查看包含B帧的情况:
ffprobe -v quiet -show_frames -select_streams v output_baseline.ts | grep "pict_type=B" | wc -l
当进行实时流媒体直播时,采用baseline编码相对main或high的profile会更可靠些。
控制场景切花关键帧插入参数 sc_threshold ffmpeg通过-g参数设置以帧数间隔为GOP的长度,但是当遇到场景切换时,例如从一个画面突然变成另一个画面时,会强行插入一个关键帧,这是GOP的间隔将会重新开始,可以通过使用sc_threshold参数进行设定以决定是否在场景切换时插入关键帧。 ffmpeg命令控制编码时的GOP大小 ffmpeg -i AVC_high_1280x720_2013.mp4 -c:v libx264 -g 50 -t 60 output.mp4
为了使得GOP的插入更加均匀,使用参数 sc_threshold ffmpeg -i AVC_high_1280x720_2013.mp4 -c:v libx264 -g 50 -sc_threshold 0 -t 60 -y output.mp4
设置x264内部参数x264opts 去掉B帧 ffmpeg -i input.mp4 -c:v libx264 -x264opts "bframes=0" -g 50 -sc_threshold 0 output.mp4
控制I帧、P帧、B帧的频率与规律 例如设置GOP中,每2个P帧之间存放3个B帧: ffmpeg -i input.mp4 -c:v libx264 -x264opts "bframes=3:b-adapt=0" -g 50 -sc_threshold 0 output.mp4
CBR 恒定码率设置参数 nal-hrd (固定码率好处,可能是网络传输)
VBR:可变码率
CBR:恒定码率
ABR:平均码率。VBR和CBR混合产物。
ffmpeg -i input.mp4 -c:v libx264 -x264opts "bframes=10:b-adapt=0" -b:v 1000k -maxrate 1000k -minrate 1000k -bufsize 50k -nal-hrd cbr -g 50 -sc_threshold 0 output.ts
# 设置B帧的个数,并且是每2个P帧之间包含10个B帧
# 设置视频码率为 1000 kbit/s
# 设置最大码率为 1000 kbit/s
# 设置最小码率为 1000 kbit/s
# 设置编码的buffer大小为 50KB
# 设置 H.264 的编码HRD信号形式为 CBR
# 设置每50帧一个GOP
# 设置场景切换不强行插入关键帧
MP3转码 ffmpeg -i INPUT -acodec libmp3lame output.mp3
参数控制
# -q 控制码率(0~9) 高->低
ffmpeg -i input.mp3 -acodec libmp3lame -q:a 8 output.mp3
# -b 设置为CBR
ffmpeg -i input.mp3 -acodec libmp3lame -b:a 64k output.mp3
# -abr 设置为abr编码
ffmpeg -i input.mp3 -acodec libmp3lame -b:a 64k -abr 1 output.mp3
FFmpeg操作RTMP的参数
参数 | 类型 | 说明 |
---|---|---|
rtmp_app | 字符串 | RTMP流发布点,又称为APP |
rtmp_buffer | 整数 | 客户端buffer大小(单位:毫秒),默认为3秒 |
rtmp_conn | 字符串 | 在RTMP的Connect命令中增加自定义AMF数据 |
rtmp_flashver | 字符串 | 设置模拟的flashplugin的版本号 |
rtmp_live | 整数 | 指定RTMP流媒体播放类型,具体如下: - any:直播或点播 - live:直播 - recorded:点播 |
rtmp_pageurl | 字符串 | RTMP在Connect命令中设置的PageURL字段,其为播放时所在的Web页面URL |
rtmp_playpath | 字符串 | RTMP流播放的Stream地址,或者成为秘钥,或者成为发布流 |
rtmp_subscribe | 字符串 | 直播名称,默认设置为rtmp_playpath的值 |
rtmp_swfhash | 二进制 | 解压swf文件后的SHA256的hash值 |
rtmp_swfsize | 整数 | swf文件解压后的大小,用于swf认证 |
rtmp_swfurl | 字符串 | RTMP的Connect命令中设置的swfURL播放器的URL |
rtmp_swfverify | 字符串 | 设置swf认证时swf文件的URL地址 |
rtmp_tcurl | 字符串 | RTMP的Connect命令中设置的tcURL目标发布点地址,一般形如 rtmp://xxx.xxx.xxx/app |
rtmp_listen | 整数 | 开启RTMP服务时所监听的端口 |
listen | 整数 | 与rtmp_listen相同 |
timeout | 整数 | 监听rtmp端口时设置的超时时间,以秒为单位 |
rtmp_app、rtmp_playpath 参数
通过rtmp_app、rtmp_playpath参数设置rtmp的推流发布点
ffmpeg -re -i AVC_high_1280x720_2013.mp4 -c copy -f flv -rtmp_app live -rtmp_playpath play rtmp://127.0.0.1
等价于
ffmpeg -re -i AVC_high_1280x720_2013.mp4 -c copy -f flv rtmp://127.0.0.1/live/play
FFmpeg操作RTSP的参数
参数 | 类型 | 说明 |
---|---|---|
initial_pause | 布尔 | 建立连接后暂停播放 |
rtsp_transport | 标记 | 设置RTSP传输协议,具体如下: - udp:UDP - tcp:TCP -udp_multicast:UDP多播协议 - http:HTTP隧道 |
rtsp_flags | 标记 | RTSP使用标记,具体如下: - filter_src:只接收指定IP的流 - listen:设置为被动接收模式 - prefer_tcp:TCP亲和模式,如果TCP可用则首选TCP传输 |
allowed_media_types | 标记 | 设置允许接收的数据模式(默认全部开启),具体如下: - video:只接收视频 - audio:只接收音频 - data:只接收数据 - subtitle:只接收字幕 |
min_port | 整数 | 设置最小本地UDP端口,默认为5000 |
max_port | 整数 | 设置最大本地UDP端口,默认为65000 |
timeout | 整数 | 设置监听端口超时时间 |
reorder_queue_size | 整数 | 设置录制数据Buffer的大小 |
buffer_size | 整数 | 设置底层传输包Buffer的大小 |
user-agent | 字符串 | 用户客户端标识 |
TCP方式录制RTSP直播流
ffmpeg默认使用的rtsp拉流方式为UDP,为了避免丢包导致的花屏、绿屏、灰屏、马赛克等问题,将UDP改为TCP传输:
ffmpeg -rtsp_transport tcp -i rtsp://127.0.0.1/test.mkv -c copy -f mp4 output.mp4
User-Agent设置参数
ffmpeg -user-agent "Alex-Player" -i rtsp://input:554/live/1/stream.sdp -c copy -f mp4 -u output.mp4
FFmpeg操作HTTP的参数
参数 | 类型 | 说明 |
---|---|---|
seekable | 布尔 | 设置HTTP连接为可seek操作 |
chunked_post | 布尔 | 使用Chunked模式post数据 |
http_proxy | 字符串 | 设置HTTP代理传输数据 |
headers | 字符串 | 自定义HTTP Header数据 |
content_type | 字符串 | 设置POST的内容类型 |
user_agent | 字符串 | 设置HTTP请求客户端信息 |
multiple_requests | 布尔 | HTTP长连接开启 |
post_data | 二进制 | 设置将要POST的数据 |
cookies | 字符串 | 设置HTTP请求时写代码的Cookies |
icy | 布尔 | 请求ICY源数据:默认开关 |
auth_type | 整数 | HTTP验证类型设置 |
offset | 整数 | 初始化HTTP请求时的偏移位置 |
method | 字符串 | 发起HTTP请求时使用的HTTP的方法 |
reconnect | 布尔 | 在EOF之前断开发起重连 |
reconnect_at_eof | 布尔 | 在得到EOF时发起重连 |
reply_code | 整数 | 作为HTTP服务时向客户端反馈状态码 |
略
ffmpeg -re -i AVC_high_1280x720_2013.mp4 -vcodec libx264 -acodec aac -map 0 -f flv "tee:rtmp://127.0.0.1/live/p1|rtmp://127.0.0.1/live/p2"
ffmpeg -i rtmp://127.0.0.1/live/p1 -i rtmp://127.0.0.1/live/p2
http://ffmpeg.org/ffmpeg-filters.html
FFmpeg滤镜Filter的参数排列方式 [输入流或标记]滤镜参数[临时标记名];[输入流或标记]滤镜参数[临时标记名]… 输入两个文件,一个视频,一个图片,将logo进行缩放,然后放在视频的左上角:
ffmpeg -i input.mp4 -i input.jpg -filter_complex " [1:v] scale=176:144[logo];[0:v][logo]overlay=x=0:y=0" output.mp4
# [0:v]/[1:v]代表第几个输入的视频
FFmpeg为视频加水印
drawtext
滤镜
ffmpeg -h filter=drawtext
# 文字水印
ffmpeg -i input.mp4 -ss 50 -vf "drawtext=fontsize=100:fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf :text='Hello World':fontcolor='yellow':x=20:y=20" output.mp4
# 动态日期
ffmpeg -i input.mp4 -ss 50 -vf "drawtext=fontsize=100:fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf :text='%{localtime\:%Y\-%m\-%d %H-%M-%S}':fontcolor='yellow':x=20:y=20" output.mp4
# 闪烁
ffmpeg -i input.mp4 -ss 50 -vf "drawtext=fontsize=100:fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf :text='%{localtime\:%Y\-%m\-%d %H-%M-%S}':fontcolor='yellow':x=20:y=20:enable=lt(mod(t\,3)\,1)" output.mp4
movie
滤镜
# 图片水印
ffmpeg -i input.mp4 -vf "movie=logo.png[wm];[in][wm]overlay=30:10[out]" output.mp4
# colorkey 半透明
ffmpeg -i input.mp4 -ss 55 -vf "movie=../picture/3d_data.png,colorkey=black:1.0:0.1[wm];[in][wm]overlay=30:10[out]" output.mp4
overlay
滤镜
# 画中画
ffmpeg -re -i input.mp4 -vf "movie=sub.mp4,scale=480x320[test];[in][test]overlay[out]" -vcodec libx264 output.flv
# 跑马灯
ffmpeg -re -i input.mp4 -vf "movie=sub.wmv,scale=480x320[test];[in][test]overlay=x='if(gte(t,2), -w+(t-2)*50, NAN)':y=0[out]" -vcodec libx264 output.flv
# 视频多宫格处理
ffmpeg -i input1.mp4 -i input2.mp4 -i input3.mp4 -i input4.mp4 -filter_complex "
nullsrc=size=1280x720 [background];
[0:v] setpts=PTS-STARTPTS, scale=640x360 [upleft];
[1:v] setpts=PTS-STARTPTS, scale=640x360 [upright];
[2:v] setpts=PTS-STARTPTS, scale=640x360 [downleft];
[3:v] setpts=PTS-STARTPTS, scale=640x360 [downright];
[background][upleft] overlay=shortest=1 [background+upleft];
[background+upleft][upright] overlay=shortest=1:x=640 [background+up];
[background+up][downleft] overlay=shortest=1:y=360 [background+up+downleft];
[background+up+downleft][downright] overlay=shortest=1:x=640:y=360
" output.mp4
双声道合并单声道 fmpeg -i input.mp3 -ac 1 output.mp3
双声道提取
ffmpeg -i input.mp3 -map_channel 0.0.0 left.mp3 -map_channel 0.0.1 right.mp3
ffmpeg -i input.mp3 -filter_complex "[0:0]pan=1c|c0=c0[left];[0:0]pan=1c|c0=c1[right]" -map "[left]" left.mp3 -map "[right]" right.mp3
双声道转双音频流
ffmpeg -i input.mp4 -filter_complex channelsplit=channel_layout=stereo output.mka
ffprobe output.mka
# 可以看到有两个stream
不常用,大多数播放器也只会播放第一个流
单声道转双声道 ffmpeg -i left.aac -ac 2 output.m4a
这样的双声道并不是真正的双声道,而是单声道处理成的多声道,效果不会比原来多声道效果好
两个音频源合并双声道 ffmpeg -i left.mp3 -i right.mp3 -filter_complex "[0:a][1:a]amerge=inputs=2[aout]" -map "[aout]" output.mka
多个音频合并为多声道
ffmpeg -i front_left.wav -i front_right.wav -i front_center.wav -i lfe.wav -i back_left.wav -i back_right.wav -filter_complex "[0:a][1:a][2:a][3:a][4:a][5:a]amerge=inputs=6[aout]" -map "[aout]" output.wav
音频音量获得 ffmpeg -i input.wav -filter_complex volumedetect -f null -
绘制音频波形
ffmpeg -i input.wav -filter_complex "showwavespic=s=640x120" -frames:v 1 output.png
# 不通声道的波形图
ffmpeg -i input.wav -filter_complex "showwavespic=s=640x120:split_channels=1" -frames:v 1 output.png
ASS字母流写入视频流 ffmpeg -i input.mp4 -vf ass=t1.ass -f mp4 output.mp4
ASS字母流写入封装容器
ffmpeg -i input.mp4 -vf ass=t1.ass -acodec copy -vcodec copy -scodec copy output.mp4
# 输入的视频文件汇总原本同样带有字幕流,希望使用t1.ass字幕流,通过map写入
# 下面命令会分别将第一个输入文件的第一个流和第二个流与第二个输入文件的第一个流写入output.mkv
ffmpeg -i input.mp4 -i t1.ass -map 0:0 -map 0:1 -map 1:0 -acodec copy -vcodec copy -scodec copy output.mkv
chromakey 抠图和背景视频合并的操作
# 查询颜色支持
ffmpeg -colors
# chromakey滤镜将绿色背景中的人物抠出来,贴到input.mp4为背景的视频中
ffmpeg -i input.mp4 -i input_green.mp4 -filter_complex "[1:v]chromakey=Green:0.1:0.2[ckout];[0:v][ckout]overlay[out]" -map "[out]" output.mp4
# FFmpeg中除了有chromakey滤镜外,还有colorkey参数,chromakey滤镜主要用于YUV数据,所以一般来说做绿幕处理更有优势;而colorkey处理纯色均可以,因为colorkey主要用于RGB数据。
stereo3d
滤镜
# 黄蓝
ffplay -vf "stereo3d=sbsl:aybd" AVC_high_1280x720_2013.mp4
# 红蓝
ffplay -vf "stereo3d=sbsl:aybg" AVC_high_1280x720_2013.mp4
vframe
参数截取一张图片 ffmpeg -i input.flv -ss 00:00:7.435 -vframes 1 output.png
fps
滤镜定时获得图片
# 每隔1秒钟生成一张PNG图片
ffmpeg -i input.flv -vf fps=1 out%d.png
# 每隔一封中生成一张jpg图片
ffmpeg -i input.flv -vf fps=1/60 out%d.jpg
# select 按照关键帧截取图片
ffmpeg -i input.flv -vf "select='eq(pict_type,PICT_TYPE_I)'" -vsync vfr thumb%04d.png
音频测试流 lavfi 模拟音频源的abuffer、aevalsrc、anullsrc、flite、anoisesrc、sine滤镜生成音频流
# 白噪声
ffmpeg -re -f lavfi -i aevalsrc="-2+random(0)" -t 5 output.mp3
# 正弦波
ffmpeg -re -f lavfi -i "sine" -t 5 output.mp3
视频测试流 通过FFmpeg模拟多种视频源:allrgb、allyuv、color、haldclutsrc、nullsrc、rgbtestsrc、smptebars、smptehdbars、testsrc、testsrc2、yuvtestsrc
# 生成长度为5.3秒、图像大小为QCIF分辨率、帧率为25fps的视频图像数据,并编码成H.264
ffmpeg -re -f lavfi -i testsrc=duration=5.3:size=qcif:rate=25 -vcodec libx264 -r:v 25 output.mp4
# 纯红
ffmpeg -re -f lavfi -i color=c=red@0.2:s=qcif:r=25 -vcodec libx264 -r:v 25 output.mp4
# 随机雪花
ffmpeg -re -f lavfi -i "nullsrc=s=256x256,geq=random(1)*255:128:128" -vcodec libx264 -r:v 25 output.mp4
atempo
音频倍速处理 取值范围:0.5 ~ 2.0
# 半速处理
ffmpeg -i input.wav -filter_complex "atempo=tempo=0.5" -acodec aac output.aac
setpts
视频倍速处理 使用PTS控制播放速度的
# 半速处理
ffmpeg -re -i input.mp4 -filter_complex "setpts=PTS*2" output.mp4
Linux下查看设备列表 ffmpeg -h demuxer=fbdev
Linux采集设备fbdev FrameBuffer是一个比较有年份的设备,专门用于图像展示操作,早期的图形界面也是基于FrameBuffer进行绘制的,有时在向外界展示Linux的命令行操作又不希望别人看到你的桌面时,可以通过获取FrameBuffer设备图像数据进行编码后推流或录制:
ffmpeg -framerate 30 -f fbdev -i /dev/fb0 output.mp4
# ctrl+alt+F1 进入命令行界面
# ctrl+alt+F7 进入图形界面
Linux采集设备v4l2 v4l2主要用来采集摄像头,而摄像头通常支持多种像素格式,有些摄像头还支持直接输出已经编码好的H.264数据
ffmpeg -h demuxer=v4l2
ffmpeg -hide_banner -f v4l2 -list_formats all -i /dev/vide0
ffmpeg -hide_banner -s 1920x1080 -i /dev/vide0 output.avi
Linux采集设备x11grab
Linux下面采集桌面图像时,通常采用x11grab设备采集图像,输入设备的设备名规则:
# 桌面录制(帧率:25,图像分辨率:1366x768,采集的设备:0.0)
ffmpeg -f x11grab -framerate 25 -video_size 1366x768 -i :0.0 out.mp4
# 桌面录制指定起始位置(:0.0+300,200 指定了x坐标300,y坐标200)
# 注意:video_size不要超过实际采集区域的大小
ffmpeg -f x11grab -framerate 25 -video_size 352x288 -i :0.0+300,200 out.mp4
# 桌面录制带鼠标记录的视频
ffmpeg -f x11grab -video_size 1366x768 -follow_mouse 1 -i :0.0 out.mp4
下载
hg clone http://hg.videolan.org/x265
hg clone https://bitbucket.org/multicoreware/x265
编译
sudo apt-get install mercurial cmake cmake-curses-gui build-essential yasm
cd x265/build/linux
./make-Makefiles.bash
make
sudo make install
DTS、PTS 的概念如下所述:
需要注意的是:虽然 DTS、PTS 是用于指导播放端的行为,但它们是在编码的时候由编码器生成的。
当视频流中没有 B 帧时,通常 DTS 和 PTS 的顺序是一致的。但如果有 B 帧时,就回到了我们前面说的问题:解码顺序和播放顺序不一致了。
比如一个视频中,帧的显示顺序是:I B B P,现在我们需要在解码 B 帧时知道 P 帧中信息,因此这几帧在视频流中的顺序可能是:I P B B,这时候就体现出每帧都有 DTS 和 PTS 的作用了。DTS 告诉我们该按什么顺序解码这几帧图像,PTS 告诉我们该按什么顺序显示这几帧图像。顺序大概如下:
PTS: 1 4 2 3
DTS: 1 2 3 4
Stream: I P B B
1、将文件当作源推送到RTMP服务器
ffmpeg -re -i localFile.mp4 -c copy -f flv rtmp://server/live/streamName
参数解释 -r 以本地帧频读数据,主要用于模拟捕获设备。表示ffmpeg将按照帧率发送数据,不会按照最高的效率发送
2、将直播文件保存至本地
ffmpeg -i rtmp://server/live/streamName -c copy dump.flv
3、将其中一个直播流中的视频改用H.264压缩,音频不变,推送到另外一个直播服务器
ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v libx264 -vpre slow -f flv rtmp://server/live/h264Stream
4、将其中一个直播流中的视频改用H.264压缩,音频改用aac压缩,推送到另外一个直播服务器
ffmpeg -i rtmp://server/live/originalStream -c:a libfaac -ar 44100 -ab 48k -c:v libx264 -vpre slow -vpre baseline -f flv rtmp://server/live/h264Stream
5、将其中一个直播流中的视频不变,音频改用aac压缩,推送到另外一个直播服务器
ffmpeg -i rtmp://server/live/originalStream -acodec libfaac -ar 44100 -ab 48k -vcodec copy -f flv rtmp://server/live/h264_AAC_Stream
6、将一个高清流复制为几个不同清晰度的流重新发布,其中音频不变
ffmpeg -re -i rtmp://server/live/high_FMLE_stream -acodec copy -vcodec x264lib -s 640×360 -b 500k -vpre medium -vpre baseline rtmp://server/live/baseline_500k -acodec copy -vcodec x264lib -s 480×272 -b 300k -vpre medium -vpre baseline rtmp://server/live/baseline_300k -acodec copy -vcodec x264lib -s 320×200 -b 150k -vpre medium -vpre baseline rtmp://server/live/baseline_150k -acodec libfaac -vn -ab 48k rtmp://server/live/audio_only_AAC_48k
7、将当前摄像头以及扬声器通过DSHOW采集,使用H.264/AAC压缩后推送到RTMP服务器
ffmpeg -r 25 -f dshow -s 640×480 -i video=”video source name”:audio=”audio source name” -vcodec libx264 -b 600k -vpre slow -acodec libfaac -ab 128k -f flv rtmp://server/application/stream_name
8、将一个JPG图片经过H.264压缩后输出为MP4文件
ffmpeg -i INPUT.jpg -an -vcodec libx264 -coder 1 -flags +loop -cmp +chroma -subq 10 -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -flags2 +dct8x8 -trellis 2 -partitions +parti8x8+parti4x4 -crf 24 -threads 0 -r 25 -g 25 -y OUTPUT.mp4
9、将MP3转化为AAC
ffmpeg -i 20120814164324_205.wav -acodec libfaac -ab 64k -ar 44100 output.aac
10、将AAC文件转化为flv文件,编码格式采用AAC
ffmpeg -i output.aac -acodec libfaac -y -ab 32 -ar 44100 -qscale 10 -s 640*480 -r 15 outp
本文涉及的资料全部打包放到我Github仓:
GitHub:2022年,最新 ffmpeg 资料整理,项目(调试可用),命令手册,文章,编解码论文,视频讲解,面试题全套资料
有需要的可以前去下载,或者觉得还不错,请给我Star,感谢支持!
No1.《Linux内存管理分析与研究》
部分摘要: 内存管理系统是操作系统中最为重要的部分,因为系统的物理内存总是少于系 统所需要的内存数量。为发挥内存的最大作用,各种操作系统采用了不同的管理 策略。在 Linux 操作系统中采用分页式的内存管理方式,而它的内存管理算法采 用的是经典的伙伴算法。即:把所有的空闲页面分为 10 个块组,每组中块的大小 是 2 的幂次方个页面,例如,第 0 组中块的大小都为 20 (1 个页面),第 1 组中块 的大小为都为 21 (2 个页面),第 9 组中块的大小都为 29 (512 个页面)。也就是说, 每一组中块的大小是相同的,且这同样大小的块形成一个链表。
部分摘要: Linux操作系统采用 分页式 内存管理方式 ,它的 内存管理算法 是经 典的伙伴算法 。 伙伴算法中对于伙伴内存块的定义要求互为伙伴块的两个内存块大小相等 、地址连续 并且 出 自同一个 更大的 内存块 。这样的要求使得 操作系统在整个 内存 的管理上 十分简洁 、 动态分配和 回收 内存 算法简便 。然而 , 在 一些情况下会 出现系统 中存在着 足够大 的连 续 内存 , 但 足这 样的连续 内存不符合伙 伴算法要 求因此无法 得到合并利 用 , 在 一定程度上 影响少 了整个 系统的 内存利用率 。
部分摘要:
部分摘要: 近年来 , Linux 操作系 统 换源代码开放 、 功能齐全、 系统稳定等特性而从各种操 作系 统中脱颖而 出 , 也 越来越广泛的运用 于服务器领域中 。 隨着应用 的 越来越广, 其 安全问题不断地被曝露出 来 。 操作系 统作为整个软件系 统的基础, 其安全关系 到整个 系 统的安全 。 在操作系 统漏洞中 , 内 存 问 题首当其冲 , 研究表明 , 内 存 问题是造成漏 洞 的主 要原 因 。
No5.《Linux内核伙伴系统分析》
部分摘要: 本文针对 Linux 内核实现的伙伴系统进行了抽象分析, 并通过实例演示了算法的执行过程. 分析了用于物 理地址空间管理的三级数据结构及其关系. 在此基础上, 详细描述了用于分配和回收页框的伙伴算法. 对于待回收 的内存块而言, 计算其伙伴的索引及合并内存块的索引是回收操作的关键, 讨论了相关计算方法的几条结论并予以 证明。
No6.《基于内存池的空间数据调度算法》
部分摘要: 操作系统存储管理的主要目的是提高内存利用率,方便 用户使用内存。在多道程序环境中,多个作业须共享内存资 源,能否合理有效地利用内存对计算机整体性能影响很大。 目前操作系统大多采用页式或段页式内存管理方法[1],但这 种方法并不适用于调度 GIS 中具有尺度维的空间数据。由于 空间数据具有数据量大、类型复杂等特点,因此在浏览、导 航、编辑时,需要频繁申请释放内存空间,容易产生页面“抖 动”等问题[2]而降低 GIS 的效率。解决抖动问题最根本的方 法是控制多道程序的数量,使每个用户作业都有足够的内存 空间。但如果作业的个数太少,就会影响处理器的利用率[3]。 为了提高 GIS 调度空间数据的效率,本文提出基于内存池的 空间数据调度算法。
No7.《Linux实时内存的研究与实现》
部分摘要: Linux系统采用了虚拟存储技术,当请求的页面不在内存中时触发缺页中断,由此带来的延迟不确定,故 不能满足实时应用程序的要求.此外,对于用户态和内核态存在大量数据传输的情况下,通用 Linux系统也不能满 足实时应用程序的需求.针对以上问题,讨论了 Linux的内存管理,并采用内存映射技术来解决虚拟内存的换页问 题以及实现用户态和内核态共享一块物理内存来满足实时应用程序的需求.在 文 章 的 最 后,测试和比较了采用内 存映射技术实现实时内存的性能.测试结果表明,采用该技术可以有效地为实时应用程序提供实时内存。
部分摘要: Linux 2. 4操作系统内核的四个基本功能:进程管理 与调度机制、存储管理机制、文件系统管理机制。
通过分析Linux 2. 4操作系统内核,掌握了操作系统的设计思想和实现方法, 为以后进一步定制特定的嵌入式操作系统打下了坚实的基础;今后的工作应在操 作系统内核改进上进行定性分析和理论创新。
No9.《内存管理机制的高效实现研究》
部分摘要: 为了高效地管理内存,防止内存泄漏、越界访问等问题的出现,在分析传统动态内存管理机制的基础上,提出了一 种基于 Windows 虚拟内存管理的高效动态内存管理机制。通过创建内存管理器来维护虚拟地址空间和处理内存申请和释放 请求,改进了传统动态内存分配与回收算法,并在 VC++6.0 开发平台上实现了该动态内存管理机制。测试结果分析表明,该 方法有效降低了申请与释放内存的时间耗费,减少了内存碎片的产生,提高了动态内存管理效率。
部分摘要: 针对分页存储管理中的内存有效访问时 间的计算问题,对基本分页存储系统和请求分页存储系统分别进行了探讨,总结了多种情况下内 存有效访问时间的计算公式,并通过案例加以分析应用。通过分析,使学生对分页存储管理系统 的实现过程更加清晰。
No11.[《基于C++ 的高效内存池的设计与实现》](https://github.com/0voice/kernel_memory_management/blob/main/论文/基于C 的高效内存池的设计与实现.pdf)
部分摘要: 为了高效、安全地利用计算机内存资源,在大型的软件设计中,往往要进行大量的内存分配与回收操 作,为此,C ++ 专门提供了 malloc 等相关函数进行操作,这些函数能够满足一般的使用,但由于它们调用了操 作系统 API,所以实际使用时会在操作系统中产生大量的内存碎片,让内存分配成为效率瓶颈,从而降低系统 性能. 基于此,通过对循环首次适应算法进行改进,设计并实现了基于 C ++ 的高效内存池,大幅提升了内存分 配与回收的效率. 同时,还为内存池编写了相关的分配子,使其能与 C ++ 标准库无缝对接,提供了若干具有垃 圾回收功能的智能指针,提高了内存管理与程序运行的效率。
No12.[《基于C++ 自定义内存分配器的实现》](https://github.com/0voice/kernel_memory_management/blob/main/论文/基于C 自定义内存分配器的实现.pdf)
部分摘要: 一些需要长时间可靠运行的特殊系统,在进行频繁的内存分配和释放操作的过程中,容易产 生内存碎片,影响内存分配的速度,降低内存利用率,导致系统运行越来越慢。虽然,静态分配内存 的方案可以解决部分问题,但容易造成内存空间的浪费。一个简单的自定义内存分配器,实现了在提 高内存使用率的同时,还能减少内存碎片的产生。
部分摘要: 在软件开发过程中,共享内存经常会遇到一个进程消耗太多内存导致其他进程无法得到需要内存的潜在问题,针对该问题,基于 Linux 内核实现一种动态内存管理机制,该机制能够限制每个进程所能申请的最大内存数,同时可以避免进程内存泄露造成的系统崩溃。 实验结果表明,该机制效率高、且易用性好。
No14.《基于multimap映射的动态内存分配算法探究》
部分摘要: 对多种不同的动态内存分配算法的特点与优劣进行对比、分析,在兼顾效率和内存碎片率指标的要求下,提出了基 于multimap映射的动态内存分配算法。该算法以内存块的大小作为键,内存块的地址信息作为值,以键值对的形式存储 内存块的地址,并在内存块实体的首部与尾部添加标识信息。为检验算法效果,设计了多组数据对新算法和现有经典内 存管理算法效率进行比较,实验结果表明新算法在降低时间开销,保留较大连续空间,减少内存碎片等方面具有较明显的改善。
部分摘要: 首先介绍了linux伙伴系统的原理,然后提出了旧版本内核在解决碎片问题上的不足,并详细分析了内核对于该问题的 最新解决方法。
No16.[《有效的C++内存泄露检测方法》](https://github.com/0voice/kernel_memory_management/blob/main/论文/有效的C 内存泄露检测方法.pdf)
部分摘要: 提出了一个有效的 C++内存泄漏检测方法。方法在分析内存泄漏的基础上, 通过重新实现动态内存分配和释放函数, 记录内 存分配的确切位置并跟踪动态内存的使用情况。在程序结束时, 方法利用跟踪结果检测和定位内存泄漏。最后, 通过在 Windows 和 Linux 平台上的实验验证了本文方法的有效性。
No17.《浅析伙伴系统的分配与回收》
部分摘要: 分配效率、碎片问题是操作系统中内存分配的两大问题。一个好的分配器应该 能够快速地满足各种大小的分配要求,同时不能产生大量的碎片浪费空间。基于数据 结构中的伙伴系统的分配与回收思想给出了一个有效的算法。
No18.《用户态内存管理关键技术研究》
部分摘要: 在软件开发中 , 动态内 存管理是一 项很重要 的 内容 。 相 比不需要 开发人员干预的 静 态 内存管理方 式, 动态 内 存需要开发人员 自 己管理内 存 的 申请、 释放等操作 。 虽然动 态 内 存管理机制 非常强大, 但是 同时 由 于动态 内 存管 理复杂性, 由此也带来了 很多 问 题。 在这些问 题中 , 内 存碎片和 内 存泄漏成为其中最显著 的两个问 题 。 内 存碎片是 由 于频繁 的 申请和释放, 导致一 些小 的 内存块无法被程序使用 , 同 时也无法被系统回 收导致 。 内 存碎片积累首先会浪费 系统内 存, 同 时它也增加 了 动态内 存管理的 负 担 , 增 加程序 申 请 内 存块的 时 间 。 内 存 泄漏是指在 开发人员 申 请使用 了 内 存块之后 , 由 于各种 原因 没有释 放 内 存块, 同时操作系统也无法回收该 内 存块 , 造成程序使用 内 存持续增加 , 最终耗尽 系统内 存。
No19.《虚拟化系统中的内存管理优化》
部分摘要: 在 服 务器虚拟化中 , 多个虚拟机共 享 同 一 机器 的 物理 内 存 。 由 于 内 存 的读 写 速度通 常要 比磁盘等 外存设 备 高 出 1 ? 2 个 数量级 , 因 此将虚拟机的 数据 尽量放 入 内 存 可 以提升系 统 性 能 。 然 而 研 宄表 明 , 服务器 有 限 的 内 存容 量 正在 成 为 限 制 虚 拟机部署 密 度 和 系 统性 能提升 的 瓶颈 。 内 存 重 删 和 动态 内 存 调 节 是提 高虚 拟化系 统 内 存 利 用 率 的两个 重要 技术 。 内 存 重删 通过 消 除 重 复数 据 减少 虚拟机 的 内 存 占 用量 。 动 态 内 存调 节通过 回收虚拟 机空 闲 内 存 提高宿 主 机内 存 利用 率 。 本 文 分析 了 现有方法 的不 足 , 提 出 了 相 应的优化 方案 。
No20.《页面分配器的研究与实现》
部分摘要: 大部分现代操作系统实现了基于分页的虚拟存储器系统。物理内存被划分成大小相同 的页帧页面分配器管理所有的页帧负责分配和释放物理页面。页面级操作是内核代码 的关键路径页面分配器的评价标准首先是必须快其次是外部碎片和内部碎片必须少。
本文涉及的资料全部打包放到我Github仓:
GitHub:【内存管理】的资料,包含100论文,100文章,20视频,以及应用程序的内存泄露,内存池相关
有需要的可以前去下载,或者觉得还不错,请给我Star,感谢支持!
ps:我什么都不要,只求Star,行吗?
开发者们,你们好。今天给大家推荐Linux开发环境。
主要内容包含:
这里我列举了13款主流虚拟机。分别介绍了它们的特点,优势,我们可以根据自己的需要选择自己项目合适的虚拟机。
这里我将这些发行版的安装包,放到网盘中。大家有需要的可以下载。(考虑到有的OS需要科学上网)
另外还列举了我们国内优秀的Linux系统。
SSH客户端这个东西大家应该不陌生吧!我想大家只要有维护Linux系统,都有用过此类型的产品。这里我给大家罗列了一些,并对每一款ssh客户端作了简单的介绍。
编辑器就更不陌生了,这是每个工程师的生成工具。但是每个工程师会对某一个编辑器“情有独钟”,那么你“钟情”的编辑器是哪一款呢?
我们代码往往编写都是特定英文编程语法,那从我们的编写语言变成机器识别的“0101”的过程,就需要的编译器来完成了。
它主要的目的是将便于人编写、阅读、维护的高级计算机语言所写作的源代码程序,翻译为计算机能解读、运行的低阶机器语言的程序,也就是可执行文件。编译器将原始程序(source program)作为输入,翻译产生使用目标语言(target language)的等价程序。源代码一般为高级语言(High-level language),如Pascal、C、C++、C# 、Java等,而目标语言则是汇编语言或目标机器的目标代码(Object code),有时也称作机器代码。
.......
http://en.wikipedia.org/wiki/C%2B%2B_Standard_Library
https://en.wikipedia.org/wiki/Standard_Template_Library
https://en.wikipedia.org/wiki/C_POSIX_library
https://www.programmerworld.net/resources/c_library.htm
http://www.josuttis.com/libbook/examples.html
https://people.sc.fsu.edu/~jburkardt/cpp_src/cpp_src.html
各位开发者们,又开始新的资料整理工作。这次整理的是Rust语言相关内容。
希望大家,多多支持!
传送门:https://github.com/0voice/Understanding_in_Rust
@wenchao1024 感谢大家的支持!
<div align=center>
书籍电子版资料 | 官方文档 | 最新视频 | 大会ppt | 开源项目 | 论文 | 知名工程师 |
---|---|---|---|---|---|---|
</div>
<dr>
<div align=center>
</div>
<br>
2021年DPDK北美峰会 | 演讲者 |
---|---|
Welcome_ DPDK Summit NA 2021Virtual Experience | Arpit Joshipura |
DPDK on RISC-V | Stanislaw Kardach, Semihalf |
Getting Past Incubation_ DPDK for Windows Platform Goes Mainstream | |
Using Virtual Functions with DPDK in OpenShift 4 | Ip Sam & Wuxin Zeng, Red Hat |
High Density Scalable Cloud Gateway for Cloud Networking | Hongjun Ni & Pan Zhang, Intel |
Running P4 programs as DPDK applications | Cristian Dumitrescu & Han Wang - Intel |
Advanced API For Rules Management - RTE Flow Next Evolution | Ori Kam, NVIDIA |
Tools for Memory Model Simulation | Herd7 - Honnappa Nagarahalli, ARM |
Transitioning Flow Based ethdev Ops to rte_flow | Ajit Khaparde, Broadcom |
Closing Remarks - DPDK Summit NA 2021 | Arpit Joshipura |
<br>
2021年亚太DPDK峰会 | 演讲者 |
---|---|
Welcome- DPDK Summit APAC 2021 | Jim St. Leger |
Dynamic Mempool_ One of the Final Steps to Make DPDK Cloud-Native | Jielong Zhou |
An Ideal Network IO Virtualization Solution in DPDK | Xiuchun Lu, Chenbo Xia |
Handling Elephant Flow on a DPDK-Based Load Balancer | Hongjun Ni, Yipeng Wang, Chenmin Sun |
OvS Tunneling and Connection Tracking Hardware Offload via Rte_flow | Xiao Wang, Rosen Xu |
Accelerating vHost Data Plane with DMA in the CPU | Jiayu Hu |
Warp Speed Cryptographic Applications | Fan Zhang |
Introducing Hardware Content Inspection Accelerator Into the ... | Kun Qiu, Harry Chang |
Enhance SEBA-Based FTTH vCPE System with SPP vSwitch | Tri Trinh, Kentaro Ogawa |
Memory Error Detect Enhancement for DPDK Fuzzing | Xueqin Lin, Yinan Wang |
Using DPDK to Build PCIe Endpoint Framework | Jun Yang, Hongjun Chen |
<br>
<br>
项目 | 简介 |
---|---|
dpdk-burst-replay | 注入pcap文件 |
DTS | DPDK测试套件 |
intel-go/nff-go | NFF-Go - GO的网络功能框架(原YANFF) |
Pktgen | 由 DPDK 提供支持的流量生成器 |
SPP | DPDK 资源管理框架 |
ansyun/dpdk-ans | ANS(加速网络堆栈)是DPDK本地TCP/IP堆栈,也参考FreeBSD实现。ANS提供了一个与Intel DPDK一起使用的用户空间TCP/IP堆栈。 |
dpdkcap/dpdkcap | 基于dpdk的抓包工具 |
pktgen/Pktgen-DPDK | 基于DPDK的包生成器 |
iqiyi/dpvs | DPVS是一种基于DPDK的高性能四层负载均衡器 |
iqiyi/qnsm | QNSM是基于DPDK的网络安全监控框架 |
rumpkernel/drv-netif-dpdk | 用户空间TCP/IP栈的DPDK接口驱动程序 |
emmericp/MoonGen | MoonGen是一个完全可编写脚本的高速包生成器,构建在DPDK和LuaJIT之上。当为每个包执行用户提供的Lua脚本时,它可以在单个CPU核心上使用64字节的包来饱和10gb /s的连接。多核支持允许更高的速率。它还具有精确和准确的时间戳和速率控制。 |
libmoon/libmoon | libmoon是一个使用DPDK和LuaJIT进行快速灵活的包处理的库。 |
usnistgov/ndn-dpdk | NDN-DPDK:高速命名数据网络转发器 |
vipinpv85/DPDK_SURICATA-4_1_1 | 用于软件加速的DPDK基础设施。目前正在进行RX和ACL预过滤 |
wangbojing/NtyTcp | 单线程用户态TCP/IP协议栈,epoll实现,包含服务器案例,并发测试案例 |
tiglabs/jupiter | Jupiter是一种基于DPDK的高性能四层网络负载均衡服务。 |
F-Stack/f-stack | F-Stack是一个基于DPDK、FreeBSD TCP/IP栈和协程API的高性能用户空间网络开发工具包。 |
bytedance/ovs-dpdk | 这是Open vSwitch的一个分支,我们专注于基于DPDK的Open vSwitch |
napatech/daq_dpdk_multiqueue | Snort DPDK DAQ模块,支持多队列-主要用于Napatech网卡 |
Jim St. Leger —— 英特尔开源战略和营销总监
Edwin Verplanke —— 英特尔解决方案架构师
Harini Ramakrishnan —— Microsoft 的项目经理
Georgii Tkachuk —— 英特尔性能工程师
Honnappa Nagarahalli —— Arm 首席软件工程师
Yasufumi Ogawa —— NTT 服务系统实验室的研究工程师
Jingjing Wu —— 英特尔软件工程师
Jill Lovato —— Linux 基金会通信高级经理
Trishan de Lanerolle —— Linux 基金会技术项目经理
Jielong Zhou —— 蚂蚁集团
Yong Wang —— 中兴通讯硬件工程师
Xiuchun Lu —— 英特尔网络平台事业部工程师
Chenbo Xia —— 英特尔网络平台事业部工程师
Hongjun Ni —— 英特尔高级软件工程师
Yipeng Wang —— 英特尔高级软件工程师
Chenmin Sun —— 英特尔高级软件工程师
Jianfeng Tan —— 英特尔软件工程师
Hailong Wang —— 腾讯高级工程师
Cunming Liang —— 英特尔平台方案架构师
Changpeng Liu —— 英特尔资深工程师
Xin Zeng —— 英特尔资深工程师
Huai Huang —— 美团技术专家
Fangliang Lou —— 中兴通讯架构师
Liang Ma —— 英特尔资深工程师
Helin Zhang —— 英特尔技术经理
Jingjing Wu —— 英特尔资深工程师
Fan Zhang —— Intel 资深工程师,博士
Haohao Zhang —— 腾讯安全平台部高级工程师
Wei Wang —— Intel软件工程师
Hao Lin —— 太一星晨架构师
Zhaohui Sun —— 北京派网软件有限公司首席执行官
Jie Zheng —— United Stack网络虚拟化工程师
Kai Wang —— Yunshan资深工程师