C#推送RTMP到SRS通过VLC进行取流播放!!

摘要:
=“Flv”)14//{15//步骤3:检查服务器SRS是否可以正常启动。16stringstrpath=System.IO。目录获取当前目录()//文件名17//stringstrpath=“d:My Document visualstudio 2015 Projects SRS_RTMP SRS_RTMP-bin Debug ffmpeg.exe”;181920Processp=newProcess()//创建进程21p.StartInfo.FileName=@“”+strpath+“”+“ffmpeg.exe”//ffmpeg的绝对路径可以自由更改。22p.StartInfo.Info.Arguments=“-i”+this.textBox1.Text.Trim().ToString()+“-vcodeccopy acodeccoppy fflv-yrtmp://192.168.61.128/live/livestream “;//ffmpeg参数23//F:ffmpeg-20170214-8fa18e0-win64 static bin ffmpeg.exe IF:mytest.flv24p.StartInfo.UseShellExecute=false;//在不使用操作系统shell 25p.StartInfo.RedirectStandardError=true的情况下启动线程;//将外部程序错误输出写入StandardEror流26p.StartInfo.CreateNoWindow=true;//将设置设置为不显示窗口27//p.EerrorDataReceived+=newDataRecevedEventHandler//外部程序事件28p。在输出流//启动线程29p期间生成的Start()。BeginErrorReadLine()//开始异步读取30p。WaitForExit()//阻塞并等待进程结束31p。Close()//关闭进程32p。Dispose()//释放资源33MessageBox。显示(“流媒体播放完成,您可以在流媒体播放时使用播放器观看!

前面一篇文章简单的介绍了下如何利用SRS自带的播放地址进行观看RTMP直播流,也就是说是使用SRS的内置demo进行Test,但是进行视频直播肯定不可能使用那样的去开发,不开源的东西肯定不好用。由于在研究的过程中很少关于C#方面的资料,大部分都是自己慢慢磨出来的。觉得那些刚开始入门的人很有帮助,所以决定贴出来,方便那些刚入门的学者,因为毕竟有些资料写的太专业,而且有些刚入门的虽说写的很详尽,但是没有一个完整的概念,很难理解,本文着重讲解下如何使用C#进行编码推送RTMP至服务器,以及取流播放。让刚入门的菜鸟一看就懂。

1.准备材料:VMware Workstation 12 Player或更高版本(用于搭建Ubuntu)、Ubuntu(linux环境) 、SRS(linux下搭建的服务器)、VLC(播放器)或者ffplay、FFMPEG。

2. 语言:C#;

3.工具:VS2015

4.可以参考的资料:https://github.com/ossrs/srs SRS服务器搭建。

前面第4点已经给出了github的git地址,请大家在搭建好ubuntu(关于如何搭建ubuntu请参考我的前一篇)之后,开机使用内置的浏览器进行下载,如下图所示:

C#推送RTMP到SRS通过VLC进行取流播放!!第1张

使用过github的人不需要多废话,可以通过git的方式,或者直接点击【Download ZIP】的方式下载到ubuntu上,然后最重要的,也是其他人资料都是轻描淡写的步骤很关键:

1.从官网这里指的是(https://github.com/ossrs/srs)这边git或者下载下来保存在ubuntu上。(git地址:https://github.com/ossrs/srs.git)

2.获取之后要进行编译(很多资料写编译仅仅是列出一条指令,并不说明是在什么环境下,什么地方进行编译,因为根本没资料参考也没接触过这个东西只能自己磨,所以花了整整2天时间才磨透)这个对初学者非常重要。

在ubuntu下打开下载好的文件,然后打开文件夹:本人下载的是srs-2.0-b4》trunk,然后比较关键的一步,很多资料也不说清楚是怎么编译的,对于没接触过的初学者来讲难度很大;空白处右键:出现【在终端打开(T)】然后开始编译,使用命令:./configure && make然 后回车,回车完成之后有提示输入密码就输入密码(可能会看不见输入的密码,不管它)。然后再回车,继续编译,耐心等待它编译完成,编译完成之后再启动服务器SRS.

3.启动命令:scripts/run.sh然后回车,当然这条指令必须要明确路径,我是在第2条的基础上进行启动的。

4.至此服务SRS就已经编译并且完成启动了。接下来就开始准备另一个工具FFMPEG进行视频推送。

5.到官方网站:https://ffmpeg.zeranoe.com/builds/ 根据自己的系统下载相应的版本。(速度稍微有点慢,耐心等待完成)。

6.下载完成之后打开文件夹bin目录下会有三个可执行文件分别是ffmpeg.exe/ffpaly.exe/ffprobe.exe,本文着重介绍推流跟播放。

7.接下来就是C#编写调用ffmpeg.exe了,网上的参考资料非常少,还是自己编译的通过了,一定要跟大家分享,代码如下:

1  /// <summary>
2         ///推流至服务器SRS
3         /// </summary>
4         /// <param name="sender"></param>
5         /// <param name="e"></param>
6         private void button1_Click(objectsender, EventArgs e)
7 {
8             //第一步检测读取的地址是否为空
9             if (this.textBox1.Text.Trim() != "")
10 {
11                 //第二步读取后缀名是否为flv
12                 //string path = Path.GetExtension(this.textBox1.Text.Trim());
13                 //if (path != "flv")
14                 //{
15                     //第三步检测服务器SRS是否正常开启
16                     string strpath = System.IO.Directory.GetCurrentDirectory(); //文件名
17                     //string strpath = "d:\\我的文档\\visual studio 2015\\Projects\\SRS_RTMP\\SRS_RTMP\\bin\\Debug\\ffmpeg.exe";
18 
19 
20                     Process p = new Process();//创建进程
21                     p.StartInfo.FileName = @"" + strpath + "" + "\\ffmpeg.exe";//ffmpeg的绝对路径可以自由更改
22                     p.StartInfo.Arguments = "-i " + this.textBox1.Text.Trim().ToString() + "-vcodec copy -acodec copy -f flv -y rtmp://192.168.61.128/live/livestream";//ffmpeg参数
23                     //F:\ffmpeg-20170214-8fa18e0-win64-static\bin\ffmpeg.exe -i F:\mytest.flv 
24                     p.StartInfo.UseShellExecute = false;//不使用操作系统外壳程序启动线程
25                     p.StartInfo.RedirectStandardError = true;//把外部程序错误输出写到StandardError流中
26                     p.StartInfo.CreateNoWindow = true; //设置置不显示示窗口
27                     //p.ErrorDataReceived += new DataReceivedEventHandler(Output);//外部程序(这里是FFMPEG)输出流时候产生的事件
28                     p.Start();//启动线程
29                     p.BeginErrorReadLine();//开始异步读取
30                     p.WaitForExit();//阻塞等待进程结束
31                     p.Close();//关闭进程
32                     p.Dispose();//释放资源
33                     MessageBox.Show("推流完成,推流的同时可以使用播放器进行观看!");
34 
35 ffplay();
36 
37                 //}
38                 //else
39                 //{
40                 //MessageBox.Show("请先进行转码后再进行推送!");
41                 //}
42 }
43             else
44 {
45                 MessageBox.Show("先打开文件后再进行推流!");
46 }
47         }

8.这是一个简单的Winform推流代码,希望对大家有帮助,推流完成之后,我们就可以开始使用第三方播放器VLC取流进行播放,这边暂时还没使用内置播放器ffpaly进行播放。效果图如下:

C#推送RTMP到SRS通过VLC进行取流播放!!第2张

9.至此推流完成,可以实时进行推流播放,目前还在学习ffmpeg中,还有很多需要研究,这边只是做一个备注作用以防忘记。希望对刚入门的所有菜鸟们有个更好的理解。

免责声明:文章转载自《C#推送RTMP到SRS通过VLC进行取流播放!!》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇在控制台运行java时出错:错误: 找不到或无法加载主类FastReport4.6程序员手册_翻译下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

FFMPEG 内部 YUV444p16LE-&amp;gt; P016LE

y 方向直接复制 1. hscale 2. vscale static void yuv2p016cX_c(SwsContext *c, const int16_t *chrFilter, int chrFilterSize, const int16_t **chrUSrc, const int16_t *...

ffmpeg转码时对编码率和固定码率的处理

http://www.rosoo.net/a/201107/14663.html 一般fps在代码里这样表示 Fps = den/num 如果den = 15,num=1,则fps = 15。 如果帧率固定,pts*fps 就表示当前是第几帧。 当输入视频流的帧率不固定,如rmvb ,而输出视频流的帧率固定,ffmpeg作如下处理(参考ffmpeg代码版本...

迅为龙芯2K1000开发板Linux工具之make工具和Makefile文件

在编译程序hello world的时候我们是直接使用gcc命令进行编译的。我们编译一个程序是非常的简单的, 直接输入 gcc 然后跟上程序的名称再跟上指定生成程序的名称, 就可以很轻松的编译出可执行文件。但是大家有没有想过,如果要编译一个工程,这个工程里面有很多的源文件, 这时候我们全部使用这个命令来编译那就非常的麻烦了。为了解决编译一个工程非常繁琐这个问...

QQ会员AMS平台PHP7升级实践

作者:徐汉彬链接:https://zhuanlan.zhihu.com/p/21493018来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。QQ会员活动运营平台(AMS),是QQ会员增值运营业务的重要载体之一,承担海量活动运营的Web系统。AMS是一个主要采用PHP语言实现的活动运营平台, CGI日请求3亿左右,高峰期达到8亿...

Xilinx SDK编译出现undeference to "outbyte"错误的解决办法

【前言】自己初次接触MicroBlaze,好多东西都不太了解,借着博客园的平台把自己平时学习和工作遇到的问题和解决办法,以及自己的一些想法记录下来,边学习,边积累,也想与大家分享交流一下心得,与众乐方为乐也,^_^ 自己前些天在SDK中编译一个helloworld的时候,提示“print函数中undeference to outbyte”的错误,通过百度以...

ffmpeg文档24-协议

24 协议 FFmpeg协议配置元素,用于访问资源时要求特定的协议。 默认编译时会自动支持所有可用协议。你可以在编译脚本中添加 "–list-protocols"选项来了解有哪些协议被支持。 你也可以在编译时通过 "–disable-protocols"禁止所有的协议支持,然后通过 "–enable-protocol=PROTOCOL"来启用个别协议,或...