C# FFmpeg推流Vlc.DotNet拉流优化参数

Posted beiger

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# FFmpeg推流Vlc.DotNet拉流优化参数相关的知识,希望对你有一定的参考价值。

FFmpeg是流媒体开源神器,视频转换、剪裁包括推流,无所不能,很多系统都是基于其开发的。拉流可以用FFplay,但是不利于集成到自己的代码中,因此拉流选择了Vlc.DotNet。

在使用中,仅使用默认参数,会导致整体开销大、占用网络资源、硬件资源都很多,而且会导致较长的延迟,因此推拉流参数必须进行优化。

1、推流参数

-f dshow -i video="USB Camera":audio= "Internal MIC" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -crf 28 -acodec aac -s 1280x720 -g 1 -keyint_min 2 -f rtsp -rtsp_transport tcp rtsp://192.168.0.66:554/video

-vcodec libx264 -preset:v ultrafast -tune:v zerolatency -crf 28 这段是视频编码,这几个参数使用CPU编码,开销小,图像质量一般可以容忍。如果能使用GPU效果更好

-s 1280x720是分辨率设置,如果整体系统性能较高,可以设置为摄像头的最高分辨率。

-g 1 -keyint_min 2 间隔帧设置,有利于实现“秒开”,减少连接的时间。

-rtsp_transport tcp另rtsp传输使用TCP方式,有利于传输可靠性,降低系统开销。

音视频设备中间的冒号“:”,告诉ffmpeg音视频一起编码,确保音视频同步,降低系统开销。

2、拉流参数

String[] option = 
    ":audio-desync=0,
    ":network-caching=100",
    ":rtsp-tcp",
    ":clock-synchro=0",
    ":live-caching=0",
    ":file-caching=0",
    ":grayscale"
;
vlcObj.Play(new Uri("rtsp://192.168.0.66:554/video"), option);

audio-desync:音频不延迟,数值越大,音频越错后与视频

network-caching:网络缓存,数值越大越流畅,但延迟增加

:rtsp-tcp:与ffmpeg推流配置保持一致

clock-synchro:时钟同步 0 (禁用), 1 (启用)

live-caching:直播缓存

file-caching:文件缓存

grayscale:视频灰度

3、最终效果

通过以上优化,rtsp单机播放测试时的延迟由小于3秒优化为小于1秒,效果显著。而起音视频同步,“口型”对得准确,无需调整音频延迟了。

 

如何通过ffmpeg 实现实时推流和拉流保存的功能

FFMPEG是特别强大的专门用于处理音视频的开源库,既可以使用它的API对音视频进行处理,也可以使用它提供的工具,如 ffmpeg, ffplay, ffprobe,来编辑你的音视频文件。

我们在开发TSINGSEE青犀视频产品过程中也会采用FFMPEG来对现有的系统进行简单的编译及调整,比如TSINGSEE青犀视频通道FFmpeg获取视频片段。本文将简要介绍一下 FFMPEG 库的基本目录结构及其功能,然后详细介绍一下我们在日常工作中,如何使用 ffmpeg 提供的工具来处理音视频文件。

ffmpeg通过 -i 选项读取任意数量的输入“文件”(可以是常规音视频文件,网络流,抓取设备等,并写入任意数量的输出“文件”。

原则上,每个输入/输出“文件”都可以包含任意数量的不同类型的视频流(视频/音频/字幕/附件/数据)。 流的数量和/或类型是由容器格式来限制。 选择从哪个输入进入到哪个输出将自动完成或使用 -map 选项。

要引用选项中的输入文件,您必须使用它们的索引(从 0 开始)。 例如。 第一个输入文件是 0,第二个输入文件是 1,等等。类似地,文件内的流被它们的索引引用。 例如 2:3 是指第三个输入文件中的第四个流。

上面就是 FFMPEG 处理音视频的常用命令,下面是一些常用参数:

拉流保存命令:

ffmpeg -i rtmp://server/live/streamName -c copy dump.flv
该命令就是将rtmp://server/live/streamName视频流保存为dump.flv文件

实时推流命令

ffmpeg -framerate 15 -f avfoundation -i “1” -s 1280x720 -c:v libx264 -f flv rtmp://localhost:1935/live/room

该命令就是将源文件作为1280x720并且作为264编码推到 rtmp://localhost:1935/live/room地址上进行直播。

在部分常见的应用场景中,由于ffmpeg的领先性、包容性,并且还具有高度的便携性,很多客户都会使用ffmpeg来进行视频的处理,通过ffmpeg推流到视频服务器,如果大家对ffmpeg推流比较感兴趣,也可以和我们交流。TSINGSEE
青犀视频各视频平台均欢迎大家免费下载测试。

以上是关于C# FFmpeg推流Vlc.DotNet拉流优化参数的主要内容,如果未能解决你的问题,请参考以下文章

FFMPEG监控拉流,向流媒体服务器推流

win10下用ffmpeg推流拉流

如何通过ffmpeg 实现实时推流和拉流保存的功能

使用FFmpeg工具进行推流拉流截图变速转换,及常见问题处理

FFmpeg入门 - rtmp推流

ffmpeg本地拉流时, 连接不到rtmp