iOS整理 - 关于直播 - 搭建服务端

这篇具有很好参考价值的文章主要介绍了iOS整理 - 关于直播 - 搭建服务端。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

其实本人一直都想自己简单做一套直播(包括移动端和服务端)的开发测试,但是之前一直做得比较迷茫。最近偶然间在来了灵感,瞬间解除了我很多疑惑。我会分享出来,希望大家一起研究下。稍后,我完整做好了,会更新一篇完整的做的过程。今天,我们先搭建一下直播部分的服务端。

1、安装Homebrow

Homebrew简称brew,是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件,可以说Homebrew就是mac下的apt-get、yum神器

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

如果安装过,想要卸载的话

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"

2、安装Nginx服务器

brew tap homebrew/nginx

增加对Nginx的扩展;也就是从github上下载,home-brew对nginxnx的扩展。

3、安装Nginx服务器和RTMP模块

brew install nginx-full --with-rtmp-module

这个安装,耗时相对来说比较长。通过操作以上步骤Nginx和RTMP模块就安装好了,下面开始来配置Nginx的RTMP模块。

brew info nginx-full

nginx安装所在位置 /usr/local/Cellar/nginx-full/1.10.1/bin/nginx nginx配置文件所在位置 /usr/local/etc/nginx/nginx.conf nginx服务器根目录所在位置 /usr/local/var/www

执行命令,测试下是够能成功启动nginx服务
 

nginx

点击http://localhost:8080, 看到Welcome to nginx!,就说明nginx安装成功了。

4、配置RTMP

用Xcode打开nginx.conf,找到/usr/local/etc/nginx/nginx.conf 文件,拖入到Dock中的Xcode,就可以打开。

文件内容说明:

  • rtmp是协议名称
  • server 说明内部中是服务器相关配置
  • listen 监听的端口号,rtmp协议的默认端口号是1935
  • application 访问的应用路径是zbcs
  • live on 开始实时
  • record off 不记录数据

5、保存文件后,重新加载Nginx的配置文件

nginx -s reload

#这一步很重要

6、安装ffmepg工具

brew install ffmpeg

安装这个需要等一段时间,这时,你可以准备一个视频文件作为来推流,然后安装一个支持rtmp协议的视频播放器。Mac下可以用VLC。

7、 通过ffmepg命令进行推流

ffmpeg -re -i 你的视频文件的绝对路径(如/Users/lideshan/Downloads/Demo.mp4)  -vcodec copy -f flv rtmp://localhost:1935/zbcs/room

这里zbcs是上面的配置文件中,配置的应用的路径名称;后面的room可以随便写。

【免费分享】音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击788280672加群免费领取~

iOS整理 - 关于直播 - 搭建服务端,ios

8、验证视频

然后电脑上打开VLC这个播放器软件, 点击File-----Open Network 在弹出来的框中选择Network然后输入URL:

rtmp://localhost:1935/zbcs/room

接下来 HLS直播流配置

 sudo /usr/local/nginx/sbin/nginx -s stop
 sudo /usr/local/nginx/sbin/nginx

找到http----server,在花括号中增加

server {
    listen    8080;
    server_name localhost;
    
    #charset koi8-r;
    
    #access_log logs/host.access.log main;
    
    location/ {
        root   html;
        index index.html index.htm;
    }

    #HLS配置开始,这个配置为了‘客户端‘能够以http协议获取HLS的拉流
    location /hls{
        # Serve HLS fragments
        types {
            application/vnd.apple.mpegurlm3u8;
            video/mp2t ts;
        }
        root html;
        add_ header Cache-Control no-cache;
    }
    #HLS配置结束
    
    
    #error_page   404  /404.html;


    # redirect server error pages to the static page /
    50x.html
    #
    error_page  500 502 503 504 /50x.html;
    location = /50x.html {
        root   html;
    }
    
    # proxy the PHP scripts to Apache listening on
    127.0.0.1:80
    #
    #location ~ \.php$ {
    #   proxy_pass   http://127.0.0.1;
    #}

找到rtmp下的server在花括号中增加

rtmp {
    server {
        listen 1935;
        application zbcs {
            live on;
            revord off;
        }
        application live {
            live on;
            revord off;
        }
        
        #增加对HLS支持开始
        application hls {
            live on;
            hls on;
            hls_path /usr/local/var/www/hls;
            hls_fragment 5s;
        }
        #增加对HLS支持结束
    }
}

说明:

  • live on 开启实时
  • hls on 开启hls
  • hls_path ts文件村放路径
  • hls_fragment 5s 每个TS文件包含5秒的视频内容

HLS直播延时

我们知道hls协议是将直播流分成一段一段的小段视频去下载播放的,所以假设列表里面的包含5个ts文件,每个TS文件包含5秒的视频内容,那么整体的延迟就是25秒。因为当你看到这些视频时,主播已经将视频录制好上传上去了,所以时这样产生的延迟。当然可以缩短列表的长度和单个ts文件的大小来降低延迟,极致来说可以缩减列表长度为1,并且ts的时长为1s,但是这样会造成请求次数增加,增大服务器压力,当网速慢时回造成更多的缓冲,所以苹果官方推荐的ts时长时10s,所以这样就会大改有30s的延迟。参考资料

保存配置文件,重新加载Nginx配置

nginx -s reload

进行推流

ffmpeg推流还是和上一篇的一样,不过,我们需要推到新配置的hls中,movie关键字可以任何替换

ffmpeg -re -i /Users/jiangys/Documents/Document/demo.mp4 -vcodec copy -f flv rtmp://localhost:1935/hls/movie

然后我们可以在这个目录下(这也是Nginx下html默认配置文件)

/usr/local/var/www/hls

看到生成一个个ts的文件,还会生成一个以.m3u8格式的文件

测试拉流

通过上面的配置,我们可以同时通过rtmp和hls两种播放方式来看到退出来的流。注意,如果使用http方式,则是监听的8080端口,这个是在配置文件中写的

  • 1用rtmp:(使用VLC验证播放)
rtmp://192.168.1.109/hls/movie

2 用HLS播放

http://192.168.1.109:8080/hls/movie.m3u8

补充:

1、HLS中,我们想把流生成的ts文件存放在指定的目录下,比如“/tmp/hls” root html 是指使用当前Nginx服务器根目录所在位置,指向的是/usr/local/var/www 这个目录。

最终,我们要使用Nginx和rtmp插件搭建视频直播和点播服务器

使用 Nginx和rtmp模块,可以很容易地搭建一个视频直播和点播的服务器出来。 我们已经安装好了Nginx和rtmp模块 接下来配置Nginx视频直播和点播服务 对于视频直播服务,如果需要支持多路流输入的话,很简单,在Nginx配置文件里多配几个Application就可以了,像下面这样:
 

iOS整理 - 关于直播 - 搭建服务端,ios

这样,就可以通过下面的地址来推送直播流,其观众端也可以通过下面的地址来访问直播流:

rtmp://192.168.31.185/live/test
rtmp://192.168.31.185/live2/test

后面紧跟的test关键字,可以对边更换,只要你的推送流和访问流的地址一样就可以了。

HLS我们之前已经配置好了,推流可以使用下面的地址

rtmp://192.168.31.185/hls/movie

对于观众端来说,可以有几种播放方式: 用rtmp:

rtmp://192.168.31.185/hls/movie

用HLS播放:

http://192.168.31.185:8080/hls/movie.m3u8

这样就可以看到主播端退出来的流。注意,如果使用http方式,则是监听8080端口,这个实在配置文件里写的。 网页播放器插件, 在第二部里,出了可以直接在浏览器里打开网址来观看视频,还可以写一个网页,实现想优酷那样的视频点播业务。通过使用第三方的播放器,在网页里植入该播放器来实现这个功能,比如说使用JWPlayer播放器。 下载JWPlayer播放器,放到Nginx网页服务的根目录。把JWPlayer解压到这个目录里,然后再这个目录里新建一个play.html的文本文件。

作者:阿华12年
原文链接 iOS整理 - 关于直播 - 搭建服务端文章来源地址https://www.toymoban.com/news/detail-832761.html

到了这里,关于iOS整理 - 关于直播 - 搭建服务端的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • iOS开发-WebRTC本地直播高分辨率不显示画面问题

    iOS开发-WebRTC本地直播高分辨率不显示画面问题 在之前使用WebRTC结合ossrs进行推流时候,ossrs的播放端无法看到高分辨率画面问题。根据这个问题,找到了解决方案。 WebRTC是什么呢? WebRTC (Web Real-Time Communications) 是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒

    2024年02月13日
    浏览(48)
  • Linux搭建Web服务器(一)——阻塞与非阻塞、同步与异步、Linux五种IO模型

    目录 0x01 阻塞与非阻塞、同步与异步 阻塞与非阻塞 同步与异步 总结 0x02 Unix、Linux上的五种IO模型 阻塞(blocking) 非阻塞(non-blocking——NIO) IO复用(IO multiplexing) 信号驱动(signal-driven) 异步(asynchronous) 为了理清楚这几个概念,我们可以从 数据就绪 以及 数据读写 层面

    2023年04月10日
    浏览(66)
  • C# IO FileStream流(一)使用整理

    一、C# IO 文件流,常用操作整理 来自其他开发者的整理: 文件操作常用相关类 1)Directory //操作目录(文件夹),静态类。 2)Path//静态类,对文件或目录的路径进行操作(很方便)【字符串】 3)File //操作文件,静态类,对文件整体操作。拷贝、删除、剪切等。 4)DriveInfo //获取磁

    2024年02月15日
    浏览(35)
  • 利用阿里云服务器搭建私有云电脑(Windows 11),不受局域网限制,安卓iOS也可随时远程访问

             个人喜欢折腾,希望更好地掌控自己的设备,所以在收集网上各路教程、自己动手倒腾,终于建好了属于自己的云电脑。现在已经可以随时随地用另一台电脑、手机来远程访问它,感觉挺方便。          我把搭建方法记录下来,既为了分享给各路网友,也为

    2024年02月03日
    浏览(100)
  • iOS 关于键盘监听

    - (void)viewWillAppear:(BOOL)animated{ [superviewWillAppear:animated];  //增加监听,当键盘出现或改变时收出消息     [[NSNotificationCenterdefaultCenter] addObserver:selfselector:@selector(keyboardWillShow:)name:UIKeyboardWillShowNotificationobject:nil];  //增加监听,当键退出时收出消息     [[NSNotificationCenterdefaul

    2024年02月10日
    浏览(38)
  • 开源IM即时通讯源码-社交+电商+音视频+直播-pc+web+ios+安卓-uniapp+php+mysql

      / 产品介绍 /     即时通讯源码是一个平台或聊天应用程序,使用户能够发送和接收即时消息并进行连接。如今,在线交流已成为一种新常态。目前据统计超过30亿人定期使用聊天应用程序而这一数字将保持持续增长。目前您可能需要一个新的聊天应用程序来简化您自己组织

    2024年02月05日
    浏览(57)
  • uniapp开发WebRTC语音直播间支持app(android+IOS)和H5,并记录了所有踩得坑

    1. 创建自己的语音直播间 2. 查询所有直播间列表 3.加入房间 4.申请上位 5.麦克风控制 6.声音控制 7.赠送礼物(特效 + 批量移动动画) 8.退出房间 1.uniapp 实现客户端H5、安卓、苹果 2.webRTC实现语音直播间(具体原理网上有很多文章我就不讲了,贴个图) 3.使用node.js搭建信令服

    2024年02月19日
    浏览(47)
  • 关于 IO、存储、硬盘和文件系统

    在计算机领域,IO(Input/Output)指的是将数据从一个设备传输到另一个设备的过程。而存储指的是将数据保存在内存或硬盘等设备中的过程。硬盘则是存储设备的一种,用于长期存储数据。同时,为了更有效地管理和组织硬盘或其他存储设备中的数据,我们需要使用文件系统

    2024年02月02日
    浏览(46)
  • 关于iOS:如何使用SwiftUI调整图片大小?

    我在Assets.xcassets中拥有很大的形象。 如何使用SwiftUI调整图像大小以缩小图像? 我试图设置框架,但不起作用: 1 2 Image(room.thumbnailImage)     .frame(width: 32.0, height: 32.0) 在Image上应用任何大小修改之前,应使用.resizable()。 1 2 Image(room.thumbnailImage).resizable() .frame(width: 32.0, height: 3

    2024年02月05日
    浏览(42)
  • 关于ios客户端与web网页js交互

    iOS与JS的交互可以通过以下几种方式实现: 1.使用UIWebView或WKWebView加载Html页面并在其中添加Javascript脚本,通过WebView的代理方法捕获Javascript脚本发出的事件,从而实现与iOS原生代码的交互。 2.使用JSBridge框架,它提供了一种简单的方式在Javascript和iOS原生代码之间进行通信。

    2024年02月10日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包