`
haoningabc
  • 浏览: 1476200 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

srt学习笔记四:srs支持srt

阅读更多
协议:rtmp. hls flv
264 265 标准


####################################
准备:
yum install autoconf automake bzip2 cmake freetype-devel gcc gcc-c++ git libtool make mercurial pkgconfig zlib-devel harfbuzz-devel -y  
yum install bzip2 bzip2-devel -y  
yum install tcl tcl-devel -y  


centos7上实验用原生的 gcc, 编译ffmpeg的时候需要升级,这里不考虑

卸载
 
yum remove openssl-devel openssl

因为srs要装了两个版本的openssl 1.1和1.0 ,避免引起冲突

安装srs之前需要先安装 libsrt.so ,但是libsrt.so的编译又需要openssl1.0,  1.1是不行的,没有aes那个api,AES_ctr128_encrypt 会报错

所以
需要装srs,还需要装srt

重点内容:
1.安装:srs  https://github.com/ossrs/srs  ./configure 得到 openssl1.0的版本 ,但是提示没有,libsrt.so这个库
2.指定openssl的环境变量:
export OPENSSL_ROOT_DIR=/opt/hao/srs/trunk/objs/openssl
export OPENSSL_LIB_DIR=/opt/hao/srs/trunk/objs/openssl/lib
export OPENSSL_INCLUDE_DIR=/opt/hao/srs/trunk/objs/openssl/include

装srt:https://github.com/Haivision/srt
3.再回去编译 srs:
先trunk/auto/depend.sh 连接libsrt.so 的库,
再重新  ./configure --with-srt
make
就完成了




安装srs:
srs如果想支持srt 必须用develop分支,参考[url] https://github.com/ossrs/srs/wiki/v1_CN_Git[/url]
git branch -a
#git checkout remotes/origin/develop
git checkout remotes/origin/4.0release
cd srs/trunk
./configure --with-srt

make


可能会出现
#src/service/srs_service_st.hpp:97:12: 错误:‘struct mmsghdr’重定义
#注释掉 这个结构体
这个问题正常版本已经不出现了。

AES_ctr128_encrypt’未定义的引用 ,的问题是应为openssl版本不一致的问题,这里要用srs里要求的1.1和1.0同时装,readme里面有。



###############重新安装srt之前,准备好openssl的版本和环境变量

srs要使用4.0的版本,默认是3.0(目前2020年4月21日)
git checkout remotes/origin/4.0release


LIBRARY_PATH和LD_LIBRARY_PATH的区别:(这个重要)

https://blog.csdn.net/h490516509/article/details/86496097

开发时,设置LIBRARY_PATH,以便gcc能够找到编译时需要的动态链接库。C_INCLUDE_PATH、CPLUS_INCLUDE_PATH 也是编译时用的

发布时,设置LD_LIBRARY_PATH,以便程序加载运行时能够自动找到需要的动态链接库。

README.md:107:
export OPENSSL_ROOT_DIR=/opt/hao/srs/trunk/objs/openssl
export OPENSSL_LIB_DIR=/opt/hao/srs/trunk/objs/openssl/lib
export OPENSSL_INCLUDE_DIR=/opt/hao/srs/trunk/objs/openssl/include



需要两个版本的openssl SRTP需要1.0,rtmp需要1.1 ,cao
由于安装srt的时候需要openssl1.0.2 ,但是srs中默认安装的openssl1.0.2没有开启生成动态库
所以需要操作:

生成动态库参考 https://www.cnblogs.com/405845829qq/p/8717571.html

tar xvf  srs.tar.gz
git checkout remotes/origin/4.0release

vim trunk/auto/depends.sh

	#OPENSSL_OPTIONS="-no-shared -no-threads -DOPENSSL_NO_HEARTBEATS"
    OPENSSL_OPTIONS="-no-threads -DOPENSSL_NO_HEARTBEATS"
    #注意no-thiread要保留,否则 编译srt报错
    #OPENSSL_CONFIG="./config"
    OPENSSL_CONFIG="./config -d shared "


676行有libsrt.a 的判断
路径写死了/usr/local/lib64/libsrt.a 
所以把后面编译的 libsrt.a连接过来

srs第一次执行,只为了编译openssl1.0.2u
./configure --with-srt


编译之后终于生成
./objs/Platform-Linux-3.10.0-SRS4/openssl-OpenSSL_1_0_2u/_release/lib/libcrypto.so

再回去编译srt



编译srt: 需要刚才指定的openssl
export OPENSSL_ROOT_DIR=/opt/hao/srs/trunk/objs/openssl
export OPENSSL_LIB_DIR=/opt/hao/srs/trunk/objs/openssl/lib
export OPENSSL_INCLUDE_DIR=/opt/hao/srs/trunk/objs/openssl/include


重新装srt:
#scl enable devtoolset-7 bash   不用这步骤了,使用centos原生的gcc4.2即可,

#PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="/opt/hao/srt_build"  

把librst.so编译到指定位置,后续连接用
./configure --prefix="/opt/hao/srt_build"   
make   
make install 

ln -s  /opt/hao/srt_build/lib64/libsrt.so /usr/local/lib64/libsrt.a




再回去编译srs
因为srs的trunk/auto/depends.sh 定义了需要指定/usr/local/lib64/libsrt.a才能--with-srt

在srs中继续执行:
./configure --with-srt
就成功了!!!!!
make

启动的时候
./objs/srs -c conf/srs.conf就可以了
试验一下是否支持 srt_server 选项

参考https://github.com/ossrs/srs/wiki/v4_CN_SampleSRT

发现./configure --with-srt编译出来的比普通./configure出来的多了

conf/srt.conf 文件 里面默认 srt_server端口10080

./objs/srs -c conf/srt.conf


测试推srt流
10080似乎没起来??
netstat -nltp|grep 10080 好奇怪,但是不耽误使用

运行下面这个
ffmpeg -re -i chrome.mp4 \
        -vcodec copy -acodec copy \
        -f mpegts 'srt://127.0.0.1:10080?streamid=#!::h=live/livestream,m=publish'

注意单引号,原文档里的双引号会报:
-bash: :: unrecognized history modifier

客户端使用
ffplay -loglevel verbose  "rtmp://106.54.192.92/live/livestream live=1"


达到  ffmpeg用 srt传给 srs  ,客户端用rtmp接收srs的流




######################### 精简版:#########################
##################################################
centos7.7
#gcc (GCC) 8.2.0 测试不行 ,找不到UDT 的namespace
还是需要原生的 gcc 4.8

yum install autoconf automake bzip2 cmake freetype-devel gcc gcc-c++ git libtool make mercurial pkgconfig zlib-devel harfbuzz-devel -y    
yum install bzip2 bzip2-devel -y    
yum install tcl tcl-devel -y 

yum remove openssl-devel openssl
git clone https://github.com/Haivision/srt


1.安装srs里的openssl
git clone https://github.com/ossrs/srs
git checkout remotes/origin/4.0release 


vim trunk/auto/depends.sh 
  
    #OPENSSL_OPTIONS="-no-shared -no-threads -DOPENSSL_NO_HEARTBEATS"  
    OPENSSL_OPTIONS="-no-threads -DOPENSSL_NO_HEARTBEATS"  
    #注意no-thiread要保留,否则 编译srt报错  
    #OPENSSL_CONFIG="./config"  
    OPENSSL_CONFIG="./config -d shared "  


cd trunk    
./configure --with-srt 


cat /etc/profile
export OPENSSL_ROOT_DIR=/opt/hao/srs/trunk/objs/openssl
export OPENSSL_LIB_DIR=/opt/hao/srs/trunk/objs/openssl/lib
export OPENSSL_INCLUDE_DIR=/opt/hao/srs/trunk/objs/openssl/include

openssl1.0.2u就安装完了
如果希望openssl命令生效
export LD_LIBRARY_PATH=/opt/hao/srs/trunk/objs/openssl/lib:/opt/hao/srt_build/lib64/:$LD_LIBRARY_PATH

开始安装srt:
git clone https://github.com/Haivision/srt
./configure --prefix=/opt/hao/srt_build
make     
make install
ln -s  /opt/hao/srt_build/lib64/libsrt.so /usr/local/lib64/libsrt.a 

再去编译srs: 因为srs编译的时候需要srt.h所以
要设置环境变量,
export LD_LIBRARY_PATH=/opt/hao/srs/trunk/objs/openssl/lib:/opt/hao/srt_build/lib64/:$LD_LIBRARY_PATH
export LIBRARY_PATH=/opt/hao/srs/trunk/objs/openssl/lib:/opt/hao/srt_build/lib64/:$LIBRARY_PATH

export C_INCLUDE_PATH=/opt/hao/srs/trunk/objs/openssl/include:/opt/hao/srt_build/include:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=/opt/hao/srs/trunk/objs/openssl/include:/opt/hao/srt_build/include:$CPLUS_INCLUDE_PATH

否则可能出现错误:
./src/srt/srt_server.hpp:29:10: 致命错误:srt/srt.h:没有那个文件或目录
#include <srt/srt.h>
          ^~~~~~~~~~~
./configure --with-srt
make


就可以运行 了
/objs/srs -c conf/srs.conf


############
mac下安装srs:
之前需要安装srt,
在安装ffmpeg的时候已经安装了libsrt.a 但是路径有问题,需要:
ln -s /usr/local/lib/libsrt.a /usr/local/lib64/libsrt.a  


参考:https://www.jianshu.com/p/dd3f58392aa0

注意4.0的srs才支持--with-srt选项
git clone https://github.com/ossrs/srs   
git checkout remotes/origin/4.0release  
./configure --osx --with-srt  
make  


可能出现
no libsrt, please run in docker ossrs/srs:srt or build from source https://github.com/ossrs/srs/issues/1147#issuecomment-577469119  

这种问题都是libsrt.a没找到
检查srs/trunk/auto/depend.sh
里面的libsrt.a的路径是写死的,需要自行连接库到这个位置/usr/local/lib64/




注意修改配置文件
conf/srt.conf
#max_connections     1000;
max_connections     200;

否则在mac下起不来,

启动:
./objs/srs -c conf/srt.conf


测试:
1.播放视频:
ffmpeg -re -i chrome.mp4 -vcodec copy -acodec copy -f mpegts 'srt://127.0.0.1:10080?streamid=#!::h=live/livestream,m=publish'

注意单引号

客户端使用
ffplay -loglevel verbose  "rtmp://127.0.0.1/live/livestream live=1"


2.mac本地摄像头用rtmp协议:
ffmpeg -f avfoundation -video_size 640x480 -framerate 30 -i 0:0 -vcodec libx264 -preset veryfast -f flv rtmp://127.0.0.1/live/livestream


本地打开视频:
ffplay -loglevel verbose  "rtmp://127.0.0.1/live/livestream live=1"

延迟非常高!!!!




分享到:
评论

相关推荐

    看国产开源流媒体SRS如何支持视频监控GB28181协议1

    - **简洁性**:SRS的代码架构清晰,易于理解和维护,无论是部署、运维还是源码阅读,都能感受到其设计的简洁。 - **开源协议**:采用IMT(Institute of Media Transmission)宽松的开源协议,鼓励学习和商业应用。...

    android 外挂字幕,目前仅支持SRT格式

    "android 外挂字幕,目前仅支持SRT格式"这一标题揭示了这个项目专注于实现对SRT(SubRip)字幕文件的支持。SRT是一种常见的字幕格式,其结构简单,易于读写,因此成为许多应用程序的首选。 描述中提到,开发者可以...

    字幕文件字幕文件

    非常好的字幕文件非常好的字幕文件非常好的字幕文件

    TXT 转 SRT 字幕

    常见的字幕格式有多种,其中TXT和SRT是两种较为常见的格式。本篇将详细介绍如何将TXT格式的字幕转换成SRT格式,并提供相关的视频教程及Excel文件辅助操作。 TXT格式的字幕通常是纯文本文件,包含了逐行的对话内容,...

    srt协议的caller模式的c语言源码

    SRT(Secure Reliable Transport)协议是一种专为实时流媒体传输设计的高效、低延迟的传输...通过理解和学习这些知识点,开发者可以更好地利用提供的C语言源码,进一步开发和优化SRT应用,提升实时传输的效率和稳定性。

    B站Json字幕转换为Srt字幕源码

    B站(哔哩哔哩)作为一个流行的视频平台,其字幕格式通常是Json,而Srt是一种广泛支持的、用户友好的字幕格式。这个项目是关于将B站的Json字幕转换为Srt格式的源码实现,这有助于用户在不支持Json字幕的环境下观看...

    SRS(Simple Realtime Server) v6.0.36

    9. **跨平台支持**:SRS支持多种操作系统,包括Linux、Windows等,这使得它能在各种环境下部署和运行。 10. **文档与社区**:SRS有一个活跃的开源社区,提供了详尽的文档和示例代码,方便开发者快速上手和解决问题...

    没序号webvtt to srt

    WebVTT(Web Video Text Tracks)和SRT(SubRip Subtitle)是两种常见的字幕格式,主要用于视频内容的字幕同步与显示。在处理网络视频时,有时需要将WebVTT格式转换为SRT格式,以适应不同的播放器或平台的要求。本文...

    windows编译SRT流媒体协议所有lib和dll以及exe等

    《Windows环境下编译SRT流媒体协议库及可执行文件详解》 SRT(Secure Reliable Transport)是一种高效、安全的实时传输协议...在实际应用中,结合SRT的特性和示例程序,可以为各种直播、点播场景提供强大的技术支持。

    srs-3.0release.zip

    SRS/3.0,OuXuli,是一个流媒体集群,支持RTMP/HLS/WebRTC/SRT/GB28181,高效、稳定、易用,简单而快乐。 SRS is a RTMP/HLS/WebRTC/SRT/GB28181 streaming cluster, high efficiency, stable and simple. Remark: ...

    srt2txt srt格式文件转txt

    这是因为txt文件不支持srt的结构化格式,尤其是时间码部分。 "用这款软件另存,没有时间信息" 指出,使用特定的srt2txt软件进行转换,会去除srt文件中的时间码,只保留文本内容。这可能是因为某些场景下,用户只...

    srt字幕制作软件

    【标题】:“srt字幕制作软件” 在多媒体领域,字幕是不可或缺的一部分,尤其对于非母语观众或听力障碍者来说,字幕能够帮助他们理解视频内容。srt(SubRip Subtitle)格式是一种常见的字幕文件格式,被广泛应用于...

    srs:SRS是RTMPHLSWebRTCSRTGB28181流群集,高效,稳定,简单

    SRS / 3.0, ,是一个流媒体集成,支持RTMP / HLS / FLV,高效,稳定,易用,简单而快乐。 SRS是RTMP / HLS / FLV流式群集,高效,稳定,简单。 备注:尽管SRS是根据许可的,但是有一些依赖的库是使用其自己的许可...

    Srt.sub.edit.rar_SRT显示_Srt edi_edit srt_sub_字幕文件

    标题中的"Srt.sub.edit.rar"是一个压缩包文件,主要用于编辑SRT字幕文件,以便解决在观看电影或视频时,字幕与音频不同步的问题。SRT是一种常见的字幕格式,它包含了时间码和字幕文本,使得我们可以将文字字幕与视频...

    srt.rar_SRT java_srt校准

    SRT(SubRip Subtitle)是一种常见的字幕格式,它包含时间码和文本信息,用于指示字幕何时出现和消失。本文将深入探讨如何使用Java进行SRT字幕文件的校准,并提供相关知识点。 首先,我们要理解SRT文件的结构。SRT...

    Android 外挂字幕,支持srt和ass格式,支持微调字幕

    本文将深入探讨如何实现Android应用对外挂字幕(如srt和ass格式)的支持,并介绍如何进行微调及修改字幕的样式。 首先,外挂字幕是指与视频分离的文本文件,它们包含时间轴信息和对应的文字内容,通过视频播放器...

    SRT流媒体协议启用实测

    - 在“Stream Files”中添加SRT接收链接,例如:“srt://0.0.0.0:9998”。 - 设置应用和流属性,选择SRT作为传输协议。 3. **推流客户端配置**: - 使用Larix Broadcaster APP进行推流。 - 配置SRT流地址,格式...

    srt制作助手srt16

    《srt制作助手srt16:轻松驾驭字幕制作的艺术》 在多媒体内容日益丰富的今天,字幕作为辅助理解的重要手段,其制作质量直接影响着观众的观看体验。特别是对于外语影片、听障人士以及听力有障碍的人来说,字幕更是不...

    java程序B站json字幕转srt

    Java程序用于将B站(哔哩哔哩)的JSON格式字幕转换为SRT字幕是一种常见的需求,尤其是在处理视频字幕同步时。这个程序利用了Java的强大处理能力,将B站特有的JSON格式解析,然后转化为SRT这种更为通用的字幕格式。...

    srt-editor:在线字幕编辑器(.srt 文件)

    5. **多语言支持**:对于多语种的视频,srt-editor 可能会支持导入和导出不同语言的字幕文件,方便不同地区的观众观看。 在 srt-editor-master 压缩包中,你可能找到以下内容: 1. **源代码文件**:包含用 ...

Global site tag (gtag.js) - Google Analytics