夸克之书

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

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

2018-08-13 12938点热度 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
    分类
    • C#
    • Linux
    • 树莓派
    • 物联网
    • 科普
    • 笔记
    • 算法
    • 默认
    最新 热点 随机
    最新 热点 随机
    Windows移除多余输入法'Unknown Locale (qaa-Latn)' 【算法】具有层级关系的城市,例如"中国 广州","中国 浙江 杭州" 一个 List 最后应该是转成树状图输出 树莓派安装Golang环境 树莓派 Zero USB/以太网方式连接配置教程 树莓派Zero 2 w超频 PVE使用山克UPS(ViewPower)
    解决Visual Studio 2022中无法编译 .NET Framework 4.5/4.5.1项目(Visual Studio 2022安装.NET Framework 4.5)PVE使用山克UPS(ViewPower)树莓派Zero 2 w超频树莓派 Zero USB/以太网方式连接配置教程树莓派安装Golang环境【算法】具有层级关系的城市,例如"中国 广州","中国 浙江 杭州" 一个 List 最后应该是转成树状图输出
    Error response from daemon: cannot stop container: ******: Cannot kill container *******:..... 树莓派.Net Core Iot入门系列篇(4):UART串口通信 Chrome显示完整URL和HTTP协议 安装ESP8266的Arduino开发环境 Visual Studio 2022(VS2022) 密钥/激活码 OpenWrt x86安装Frpc
    最近评论
    去月球 发布于 4 个月前(01月17日) 如果使用CSI的摄像头应该怎么修改命令呢
    Me 发布于 5 个月前(12月31日) 好像还得写启动项 要不重启就还原了。
    十三 发布于 5 个月前(12月23日) 大神,网盘链接失效了,重新分享一下吧,
    一键快乐 发布于 11 个月前(07月09日) 老哥 我替换之后能进去了但是网络和声音上有两个×怎么办
    翩翩蒯公子 Maxwell 发布于 1 年前(05月15日) 赞一个,挺好的文章。
    书签
    • 打赏
    • 毒鸡汤(有点意思)
    • 米店
    • 金鱼直播间

    COPYRIGHT © 2022 quarkbook.com. ALL RIGHTS RESERVED.

    Theme Kratos Made By Seaton Jiang

    蜀ICP备15036129号-9

    登录
    注册|忘记密码?