前面一篇文章简单的介绍了下如何利用 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 请参考我的前一篇)之后,开机使用内置的浏览器进行下载,如下图所示:
使用过 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(object sender, 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 进行播放。效果图如下:
9. 至此推流完成,可以实时进行推流播放,目前还在学习 ffmpeg 中,还有很多需要研究,这边只是做一个备注作用以防忘记。希望对刚入门的所有菜鸟们有个更好的理解。
来源: http://www.cnblogs.com/BarryJames/p/6429489.html