文档章节

用SRS和FFMPEG进行直播流转码

冯继虎
 冯继虎
发布于 2015/05/13 23:29
字数 546
阅读 9228
收藏 16

WIKI:https://github.com/simple-rtmp-server/srs/wiki/v1_CN_FFMPEG

一、直播流转码配置及说明

listen              1935;

max_connections     1000;

#定义一个默认的vhost

vhost __defaultVhost__ {

}

#定义一个名为v.flyfn.com的vhost,这样只对v.flyfn.com这个vhost中所有流进行转码

vhost v.flyfn.com {

    transcode {

        enabled     on;     #开始实时转码

        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;   #ffmpeg的执行文件

        engine sd {      #这里通过engine定义转一个名为sd的转码引擎,这个名称在下面输出流的时候用到

            enabled         on;   #开始,设置为off就是关闭

            vfilter {     #对应ffmpeg中的滤镜参数,可以在这里写

                v           quiet;   #减少ffmpeg的输出日志

            }

            vcodec          libx264; #视频编码器

            vbitrate        500;   #视频比特率

            vfps            25;   #视频帧率

            vwidth          768;    #宽

            vheight         320;    #高

            vthreads        12;   #使用ffmpeg线程数

            vprofile        main;  #编码等级,high、main、baseline

            vpreset         medium;  #视频预设

            vparams {        #ffmpeg的其他视频参数

                g            100;  # 指定gop时长为4秒=100 / 25(vfps)

            }

            acodec          libfdk_aac;   #音频编码器

            abitrate        70;     #音频比特率

            asample_rate    44100;     #音频采样率

            achannels       2;    #声道

            aparams {    #ffmpeg中的其他音频参数

            }

           #转码后的流输出到那里,这里是输出到本机了。另外一种推流到vhost的方法:

            #rtmp://SRS_IP:[port]/[app]?vhost=[vhost]/[stream]

            #[vhost] 输入流的vhost

            #[port] 输入流的端口

            #[app] 输入流的app

            #[stream] 输入流的流名称

            #[engine] 转码引擎的名称

            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];

        }

        #可以定义多个engine

        engine ld {

            enabled         on;

            vfilter {

            }

            vcodec          libx264;

            vbitrate        300;

            vfps            25;

            vwidth          640;

            vheight         480;

            vthreads        12;

            vprofile        main;

            vpreset         medium;

            vparams {

            }

            acodec          libfdk_aac;

            abitrate        70;

            asample_rate    44100;

            achannels       2;

            aparams {

            }

            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];

        }

    }

}

二、用ffmpeg推流

./ffmpeg -re -i 'abc.rmvb' -f flv -y rtmp://v.flyfn.com:1935/live?vhost=v.flyfn.com/test


原始视频播放:rtmp://v.flyfn.com/live/test

转码流1(sd):rtmp://v.flyfn.com/live/test_sd

转码流2(ld):rtmp://v.flyfn.com/live/test_ld


三、推流到srs的vhost时的另一种方法

rtmp://SRS_IP:[port]/[app]?vhost=[vhost]/[stream]


四、如何对某一个app下的流都进行转码

listen 1935;

vhost v.flyfn.com {

    transcode live{          #对形如rtmp://srs_ip:1935/live下的流进行转码

        ......

    }

}

五、如何对某一路直播流进行转码

listen 1935;

vhost v.flyfn.com {

    transcode live/livestream {          #对形如rtmp://srs_ip:1935/live/livestream进行转码

        ......

    }

}


© 著作权归作者所有

上一篇: SRS配置HLS分发
下一篇: 什么是rtmp协议?
冯继虎
粉丝 32
博文 52
码字总数 21459
作品 0
西城
部门经理
私信 提问
加载中

评论(16)

h
heiren93

引用来自“heiren93”的评论

引用来自“heiren93”的评论

博主 你好 !我利用ingest把视频流拉到SRS 它只能以rtmp的格式转发出去吗 ?
我是这样配置的
# conf/ingest.conf
listen 1935;
max_connections 1000;
vhost __defaultVhost__ {
ingest livestream {
enabled on;
input {
type stream;
url rtmp://172.18.147.125/live/livestream;
}
ffmpeg ./objs/ffmpeg/bin/ffmpeg;
engine {
enabled off;
output rtmp://127.0.0.1:[port]/live?vhost=[vhost]/livestream;
}
}
}

回复@heiren93 : 我想把视频流转成 HLS,HTTP-flv等其他格式转发出去 应该怎么做

引用来自“Johnny_feng”的评论

再增加一个vhost,在这个vhost中配置输出hls、http-flv。default vhost推出的流推到新增加的vhost中。
我找到问题了,谢谢你的回答!
h
heiren93

引用来自“heiren93”的评论

引用来自“heiren93”的评论

博主 你好 !我利用ingest把视频流拉到SRS 它只能以rtmp的格式转发出去吗 ?
我是这样配置的
# conf/ingest.conf
listen 1935;
max_connections 1000;
vhost __defaultVhost__ {
ingest livestream {
enabled on;
input {
type stream;
url rtmp://172.18.147.125/live/livestream;
}
ffmpeg ./objs/ffmpeg/bin/ffmpeg;
engine {
enabled off;
output rtmp://127.0.0.1:[port]/live?vhost=[vhost]/livestream;
}
}
}

回复@heiren93 : 我想把视频流转成 HLS,HTTP-flv等其他格式转发出去 应该怎么做

引用来自“Johnny_feng”的评论

再增加一个vhost,在这个vhost中配置输出hls、http-flv。default vhost推出的流推到新增加的vhost中。
我按照你说的配置了一个conf文件,但是收不到http-flv格式的流,想请教一下哪里出错了。
listen 1935;
max_connections 1000;
http_server {
enabled on;
listen 8080;
dir ./objs/nginx/html;
}
vhost __defaultVhost__ {
http_remux {
enabled on;
mount [vhost]/[app]/[stream].flv;
hstrs on;
}

ingest livestream {
enabled on;
input {
type file;
url ./doc/source.200kbps.768x320.flv;
}
ffmpeg ./objs/ffmpeg/bin/ffmpeg;
engine {
enabled off;
output http://172.18.147.125:8080/live/livestream.flv;
}
}
}
😄
h
heiren93

引用来自“heiren93”的评论

引用来自“heiren93”的评论

博主 你好 !我利用ingest把视频流拉到SRS 它只能以rtmp的格式转发出去吗 ?
我是这样配置的
# conf/ingest.conf
listen 1935;
max_connections 1000;
vhost __defaultVhost__ {
ingest livestream {
enabled on;
input {
type stream;
url rtmp://172.18.147.125/live/livestream;
}
ffmpeg ./objs/ffmpeg/bin/ffmpeg;
engine {
enabled off;
output rtmp://127.0.0.1:[port]/live?vhost=[vhost]/livestream;
}
}
}

回复@heiren93 : 我想把视频流转成 HLS,HTTP-flv等其他格式转发出去 应该怎么做

引用来自“Johnny_feng”的评论

再增加一个vhost,在这个vhost中配置输出hls、http-flv。default vhost推出的流推到新增加的vhost中。
感谢你的回答!
冯继虎
冯继虎

引用来自“heiren93”的评论

引用来自“heiren93”的评论

博主 你好 !我利用ingest把视频流拉到SRS 它只能以rtmp的格式转发出去吗 ?
我是这样配置的
# conf/ingest.conf
listen 1935;
max_connections 1000;
vhost __defaultVhost__ {
ingest livestream {
enabled on;
input {
type stream;
url rtmp://172.18.147.125/live/livestream;
}
ffmpeg ./objs/ffmpeg/bin/ffmpeg;
engine {
enabled off;
output rtmp://127.0.0.1:[port]/live?vhost=[vhost]/livestream;
}
}
}

回复@heiren93 : 我想把视频流转成 HLS,HTTP-flv等其他格式转发出去 应该怎么做
再增加一个vhost,在这个vhost中配置输出hls、http-flv。default vhost推出的流推到新增加的vhost中。
h
heiren93

引用来自“heiren93”的评论

博主 你好 !我利用ingest把视频流拉到SRS 它只能以rtmp的格式转发出去吗 ?
我是这样配置的
# conf/ingest.conf
listen 1935;
max_connections 1000;
vhost __defaultVhost__ {
ingest livestream {
enabled on;
input {
type stream;
url rtmp://172.18.147.125/live/livestream;
}
ffmpeg ./objs/ffmpeg/bin/ffmpeg;
engine {
enabled off;
output rtmp://127.0.0.1:[port]/live?vhost=[vhost]/livestream;
}
}
}

回复@heiren93 : 我想把视频流转成 HLS,HTTP-flv等其他格式转发出去 应该怎么做
h
heiren93
博主 你好 !我利用ingest把视频流拉到SRS 它只能以rtmp的格式转发出去吗 ?
我是这样配置的
# conf/ingest.conf
listen 1935;
max_connections 1000;
vhost __defaultVhost__ {
ingest livestream {
enabled on;
input {
type stream;
url rtmp://172.18.147.125/live/livestream;
}
ffmpeg ./objs/ffmpeg/bin/ffmpeg;
engine {
enabled off;
output rtmp://127.0.0.1:[port]/live?vhost=[vhost]/livestream;
}
}
}
冯继虎
冯继虎

引用来自“biao007h”的评论

你好,想请教下,ffmpeg -vsync drop 参数怎么写入到srs配置文件中

引用来自“Johnny_feng”的评论

在vfilter中增加 vsync drop;试试。

引用来自“biao007h”的评论

试过这种写法了,不过不行,还是谢谢你了
那你试过没有不要写在filter中,写在 vparams { } 这个里面。可以看看vsync drop在ffmpeg中是滤镜还是参数。
b
biao007h

引用来自“biao007h”的评论

你好,想请教下,ffmpeg -vsync drop 参数怎么写入到srs配置文件中

引用来自“Johnny_feng”的评论

在vfilter中增加 vsync drop;试试。
试过这种写法了,不过不行,还是谢谢你了
冯继虎
冯继虎

引用来自“biao007h”的评论

你好,想请教下,ffmpeg -vsync drop 参数怎么写入到srs配置文件中
在vfilter中增加 vsync drop;试试。
b
biao007h
你好,想请教下,ffmpeg -vsync drop 参数怎么写入到srs配置文件中
srs配置-基本RTMP配置 && 日志配置

1、RTMP URL rtmp://HOST:PORT/app/streamname rtmp: 协议头 HOST:注意的IP地址或域名 app: 应用名称 streamname:流名称 2、SRS中基本RTMP的配置 listen 1935; pid ./objs/srs.pid; chunk......

Johnny_feng
2015/05/12
0
6
利用Simple-RTMP-Server搭建RTMP和HLS直播服务(上)

SRS(Simple-RTMP-Server)定位是运营级的互联网直播服务器集群,追求更好的概念完整性和最简单实现的代码,在Github上人气颇高。本文是由王学投稿的SRS搭建直播的学习笔记,由LiveVideoStac...

livevideostack
2017/12/04
0
0
Twitch如何实现转码比FFmpeg性能提升65%?(下)

文 / Jeff Gong, Sahil Dhanju, Chih-Chiang Lu, Yueshi Shen 编者按:超过220万创作者在Twitch发布海量的视频,这对实时转码业务造成了巨大压力,Twitch团队通过优化多线程的转码服务以及I...

livevideostack
2017/12/13
0
0
ffmpeg: hls 转流 rtmp

最近遇到一个需求,需要将hls协议的直播流转换成rtmp协议的直播流;在网上找了很长时间,没有找到相应的技术文章,最后leader给了一个终极命令搞定: 如果提示缺少 libx264 ,可能是你安装f...

那只是一股逆流
2018/04/27
0
0
ffmpeg在windows下视频采集

ffmpeg视频采集功能非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用。 ffmpeg在Linux下的...

WuHonghai
2011/11/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JWT学习总结

官方 https://jwt.io 英文原版 https://www.ietf.org/rfc/rfc7519.txt 或 https://tools.ietf.org/html/rfc7519 中文翻译 https://www.jianshu.com/p/10f5161dd9df 1. 概述 JSON Web Token(......

冷基
今天
4
0
AOP的学习(1)

AOP 理解AOP编程思想(面向方法、面向切面) spring AOP的概念 方面 -- 功能 目标 -- 原有方法 通知 -- 对原有方法增强的方法 连接点 -- 可以用来连接通知的地方(方法) 切入点 -- 将用来插入...

太猪-YJ
今天
4
0
一张图看懂亮度、明度、光度、光亮度、明亮度

亮度、明度、光亮度,Luminance和Brightness、lightness其实都是一个意思,只是起名字太难了。 提出一个颜色模型后,由于明度的取值与别人的不同,为了表示区别所以就另想一个词而已。 因此在...

linsk1998
昨天
11
0
Python应用:python链表示例

前言 python链表应用源码示例,需要用到python os模块方法、函数和类的应用。 首先,先简单的来了解下什么是链表?链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是...

python小白1
昨天
5
0
Source Insight加载源码

Source Insight是一个图形化的源代码查看工具(当然也可以作为编译工具)。如果一个项目的源代码较多,此工具可以很方便地查找到源代码自建的依赖关系。 1.创建工程 下图为Snort源代码的文件...

天王盖地虎626
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部