设为首页 收藏本站
查看: 1351|回复: 0

[经验分享] C#推送RTMP到SRS通过VLC进行取流播放!!

[复制链接]

尚未签到

发表于 2017-6-23 11:13:51 | 显示全部楼层 |阅读模式
  前面一篇文章简单的介绍了下如何利用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请参考我的前一篇)之后,开机使用内置的浏览器进行下载,如下图所示:
     DSC0000.png
  使用过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了,网上的参考资料非常少,还是自己编译的通过了,一定要跟大家分享,代码如下:



  /// <summary>
         /// 推流至服务器SRS
         /// </summary>
         /// <param name="sender"></param>
         /// <param name="e"></param>
         private void button1_Click(object sender, EventArgs e)
         {
             //第一步检测读取的地址是否为空
             if (this.textBox1.Text.Trim() != "")
             {
                 //第二步读取后缀名是否为flv
                 //string path = Path.GetExtension(this.textBox1.Text.Trim());
                 //if (path != "flv")
                 //{
                     //第三步检测服务器SRS是否正常开启
                     string strpath = System.IO.Directory.GetCurrentDirectory(); //文件名
                     //string strpath = "d:\\我的文档\\visual studio 2015\\Projects\\SRS_RTMP\\SRS_RTMP\\bin\\Debug\\ffmpeg.exe";

                     Process p = new Process();//创建进程
                     p.StartInfo.FileName = @"" + strpath + "" + "\\ffmpeg.exe";//ffmpeg的绝对路径可以自由更改
                     p.StartInfo.Arguments = "-i " + this.textBox1.Text.Trim().ToString() + " -vcodec copy -acodec copy -f flv -y rtmp://192.168.61.128/live/livestream";//ffmpeg参数
                     //F:\ffmpeg-20170214-8fa18e0-win64-static\bin\ffmpeg.exe -i F:\mytest.flv
                     p.StartInfo.UseShellExecute = false;//不使用操作系统外壳程序启动线程
                     p.StartInfo.RedirectStandardError = true;//把外部程序错误输出写到StandardError流中
                     p.StartInfo.CreateNoWindow = true; //设置置不显示示窗口
                     //p.ErrorDataReceived += new DataReceivedEventHandler(Output);//外部程序(这里是FFMPEG)输出流时候产生的事件
                     p.Start();//启动线程
                     p.BeginErrorReadLine();//开始异步读取
                     p.WaitForExit();//阻塞等待进程结束
                     p.Close();//关闭进程
                     p.Dispose();//释放资源
                     MessageBox.Show("推流完成,推流的同时可以使用播放器进行观看!");

                     ffplay();

                 //}
                 //else
                 //{
                 //    MessageBox.Show("请先进行转码后再进行推送!");
                 //}
             }
             else
             {
                 MessageBox.Show("先打开文件后再进行推流!");
             }
         }
  8.这是一个简单的Winform推流代码,希望对大家有帮助,推流完成之后,我们就可以开始使用第三方播放器VLC取流进行播放,这边暂时还没使用内置播放器ffpaly进行播放。效果图如下:
   DSC0001.png
   9.至此推流完成,可以实时进行推流播放,目前还在学习ffmpeg中,还有很多需要研究,这边只是做一个备注作用以防忘记。希望对刚入门的所有菜鸟们有个更好的理解。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-387269-1-1.html 上篇帖子: 【xamarin + MvvmCross 从零开始】一、环境安装 下篇帖子: Centos 7 64位 minimal 最小化安装的系统中静默安装oracle 11g r2
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表