夸克之书

  • 首页
  • 科普
  • 笔记
  • .NET/C#
  • 物联网
  • 算法
  • Linux
  • 树莓派
夸克之内,别有洞天
  1. 首页
  2. .NET/C#
  3. 正文

C# RTMP推流到网页实现直播

2018-08-13 21540点热度 0人点赞 5条评论

最近想实现智能家居的监控功能,在网页上面查看摄像头图像。但是对于一般的mjpg-streamer方案无法实现更高的安全性,而且需要映射内网中的树莓派到外网上面。既然如此,利用直播推流技术,便可以最大程度实现需要的功能了。

有两种方案实现RTMP推流并在外网播放。

第一种 利用Docker搭建RTMP服务器

(1)安装Docker

过程略

(2)拉取镜像

docker pull alfg/nginx-rtmp

(3)启动镜像

docker run -it -p 1935:1935 -p 8080:80 --rm nginx-rtmp

如果是云服务器,记得开放防火墙端口。

至此,RTMP服务器搭建完成。推流和拉流方式放在文末,还有第二种搭建方式。至于为什么要讲第二种方式,因为通过这种方式搭建的RTMP服务器只能通过VLC或者HLS播放器才能播放,在网页上面无法通过H5播放视频流(Flash可以播放HLS流,但Flash毕竟已经淘汰了)。

第二种 使用开源项目 Harmonic

Github地址: https://github.com/a1q123456/Harmonic

Harmonic 是一个用C#编写高性能的RTMP服务器,可以实时将HLS流转换为websocket-flv方式,并通过websocket推流播放。通过这种方式,就可以用H5在线播放视频流了。

下面用到的程序是我编译Harmonic然后发布的,因为Harmonic作者并没有发布直接可用的程序代码。

(1)获取程序(腾讯云Ubuntu18.04)

wget https://github.com/withsalt/LiveServer/releases/download/20191001/liveserver_linux_x64.zip

(2)解压并授权

unzip liveserver_linux_x64.zip && chmod -R 775 liveserver_linux_x64 && chmod +x liveserver_linux_x64/LiveServer

(3)运行服务器

sudo ./LiveServer

输出“10/1/2019 5:34:54 PM [Info] Server started at ws://0.0.0.0:8080 (actual port 8080)”就表示运行成功,可以推流了。

推流与播放

通过第一种方法或第二种方法搭建服务器成功之后就可以推流了。使用FFmpeg推流摄像头(Windows为例)。

首先查看电脑上面支持的摄像头设备:

ffmpeg -list_devices true -f dshow -i dummy
%title插图%num
支持的摄像头设备

记录下摄像头名称。然后使用以下代码推流该摄像头:

ffmpeg -thread_queue_size 1024 -f dshow -s hd720 -i video="摄像头名称" -vcodec libx264 -pix_fmt yuv420p -preset:v ultrafast -tune:v zerolatency -f flv -an "rtmp://服务器地址/living/video"

FFmpeg参数可以说的博大精深,值得认真学习[/无奈]~~如果拉流播放效果不满意,请检查服务器带宽或者ffmpeg推流参数。

然后通过ffplay可以拉流播放和测试:

ffplay "rtmp://服务器地址/living/video"
%title插图%num

推流地址“rtmp://服务器地址/living/video”中, video可以换成任意字符串,同样的拉流地址也应该和推流地址相同。

如何在网页上面通过H5播放器播放视频流?

任意找一个开源的,支持websocket live的H5播放器,此处以playease为例,下载demo并运行,地址栏填写

ws://服务器地址:8080/websocketplay/video

点击播放,就可以看到视频啦。

%title插图%num
网页播放

playease 项目地址:

https://github.com/studease/playease

web demo下载:demo

注意:第一种方式没有推送websocket-flv或者http-flv流,不支持在Web浏览器中通过H5播放器播放。

本作品采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2020-12-13

afirefish

这个人很懒,什么都没留下

打赏 点赞
< 上一篇
下一篇 >

文章评论

  • 不打扰

    请教一下 成功推流之后,h5播放器播不出怎么回事

    2020-11-24
    登录以回复
    • afirefish

      @不打扰 你可以试试先用ffmpeg能不能播放流,如果可以播放。那就检查一哈H5播放器,不能播放,那可能推流有问题。

      2020-11-25
      登录以回复
  • RR

    @afirefish,请问一下:本地推流可以,使用腾讯服务器的话,推流不成功,求什么原因

    2021-01-13
    登录以回复
    • afirefish

      @RR 腾讯云服务器带宽多少?你看哈你本地推流码率呢

      2021-01-13
      登录以回复
  • 您需要 登录 之后才可以评论
    放松一下
    https://www.quarkbook.com/wp-content/uploads/2021/05/凤凰传奇-海底(Live).flac
    分类
    • .NET/C#
    • Linux
    • 树莓派
    • 物联网
    • 科普
    • 笔记
    • 算法
    • 默认
    最新 热点 随机
    最新 热点 随机
    在代码中判断龙芯新旧世界平台 Windows获取固定后缀的IPv6地址 目前为止,你可能找不到第二台支持志强的1L小主机(P350 Tiny+W-1350+ECC+双NVME+PCIE扩展)!!! iKuai(爱快)实现成都移动IPTV IPoE拨号 Linux EXT4分区误删除后数据恢复 C#连接到巴法云
    在代码中判断龙芯新旧世界平台
    Vieu主题作者疑似跑路?这人品?!!! 23种常见的设计模式(7):原型模式 ASP.NET Core 3.1 WebApi Swagger与API版本控制的美妙结合 ASP.NET Core MVC添加控制器提示“运行所选代码生成器时出错”解决方法 Ubuntu/Debian安装Frps并设置开机启动 那些令人惊叹的宣传片(CG)
    最近评论
    Eagle 发布于 7 个月前(10月21日) 参考博主教程成功搞定了成都移动IPTV组播转单播,电脑、手机都可以播放了。但目前有个问题,原IPTV...
    rundoze 发布于 9 个月前(08月31日) 牛逼
    cc21216695 发布于 2 年前(09月27日) 试了一下,加入启动项也无效,压根没有用
    afirefish 发布于 3 年前(11月28日) 非常感谢,非常棒!
    》随缘《 发布于 3 年前(11月20日) 最新【一键处理】方法: https://github.com/MrXhh/VSTools/rele...
    书签
    • 打赏
    • 毒鸡汤
    • 米店
    • 金鱼直播间

    COPYRIGHT © 2023 quarkbook.com. ALL RIGHTS RESERVED.

    Theme Kratos Made By Seaton Jiang

    蜀ICP备15036129号-9

    登录
    注册|忘记密码?