一看就能学会的H5视频推流方案[通俗易懂]

一看就能学会的H5视频推流方案[通俗易懂]一看就能学会的H5视频推流方案

大家好,又见面了,我是你们的朋友全栈君。

本文由云+社区发表

作者:周超

导语

随着直播平台爆发式增长,直播平台从 PC 端转战移动端,紧跟着直播的潮流,自己学习实现了一套简单的 H5 视频推流的解决方案,下面就给小伙伴们分享一下自己学习过程中的经验。

环境部署

1、 配置、安装 Nginx;

# ./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.pid --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.39 --with-zlib=/usr/local/src/zlib-1.2.11 --with-openssl=/usr/local/openssl/
# make
# make install
# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf  //启动Ngnix
# netstat -ano | grep 80

2、扩展 Nginx-rtmp-module

# ./configure --add-module=/usr/local/src/nginx-rtmp-module-master --with-openssl=/usr/local/openssl/
# make
# make install
# vim /usr/local/ngnix/conf/ngnix.conf
include /usr/localcinx-rtmp-module-master/testinx.conf;
# vim /usr/localcinx-rtmp-module-master/testinx.conf
rtmp {
    server {
        listen 1935;

        application myapp {
            live on;

            #record keyframes;
            #record_path /tmp;
            #record_max_size 128K;
            #record_interval 30s;
            #record_suffix .this.is.flv;

            #on_publish http://localhost:8080/publish;
            #on_play http://localhost:8080/play;
            #on_record_done http://localhost:8080/record_done;
        }

            application hls {
            live on;
            hls on;
            hls_path /tmp/hls;
            hls_fragment 10s;     #每个视频切片的时长。
            hls_playlist_length 60s;  #总共可以回看的事件,这里设置的是1分钟。
            #hls_continuous on; #连续模式。
            #hls_cleanup on;    #对多余的切片进行删除。
            #hls_nested on;     #嵌套模式。
        }
    }
}

http {
    server {
        listen      8080;

        location /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }

        location /stat.xsl {
            root /usr/local/src/nginx-rtmp-module-master/;
        }

        location /control {
            rtmp_control all;
        }

        location /rtmp-publisher {
            root /usr/local/src/nginx-rtmp-module-master/test;
        }

            location /hls {
            #server hls fragments
            types{
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            #alias /tmp/app;
            root /tmp;
            expires -1;
        }

        location / {
            root /usr/local/src/nginx-rtmp-module-master/test/rtmp-publisher;
        }
    }
}
# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
# netstat -ltn  #查看端口的监听情况

3、 安装 ffmpeg

# ./configure --prefix=/usr/local/ffmpeg
# make
# make install

至于 ffmpeg 是啥?详细介绍可以参考:《【经验分享】音频、视频利器——FFmpeg

模拟推流

  • 先来看一个简单的直播推流流程图 :

img

  • 用 flv 视频文件模拟 RTMP 视频流:
 # ffmpeg -re -i test.flv -vcodec copy -acodec copy -f flv rtmp://ip:1935/myapp/mystream

注:RTMP(Real Time Messaging Protocol),实时消息传输协议,用于视频直播协议,和 HLS 一样都可以应用于视频直播;

  • 用 mp4 视频文件模拟 HLS 视频流:
ffmpeg -re -i test.mp4 -c copy -f flv rtmp://ip:1935/hls/mystream

注:HLS(HTTP Live Streaming), Apple 的动态码率自适应技术,主要用于 PC 和 Apple 终端的音视频服务;

  • HLS 的请求流程:

img

H5 如何在页面上播放视频

<video autoplay webkit-playsinline>      
        <source src="http://ip/hls/mystream.m3u8" type="application/vnd.apple.mpegurl" />      
        <p class="warning">Your browser does not support HTML5 video.</p>   
    </video> 

总结

根据以上的流程,简单的实现了一个视频直播的流服务器来推送直播流,并且可以在 H5 页面上播放视频流。有兴趣的小伙伴们也可以尝试一下~

此文已由腾讯云+社区在各渠道发布

获取更多新鲜技术干货,可以关注我们腾讯云技术社区-云加社区官方号及知乎机构号

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107002.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python 标识符与关键字[通俗易懂]

    Python 标识符与关键字[通俗易懂]Python标识符与关键字标识符是编程语言中允许作为名字的有效字符串集合。其中有一部分是关键字,构成语言的标识符。这种标识符是不能做它用的标识符的,否则会引起语法错误(SyntaxError异常)。标识符就是一个名字,作为变量、函数、类、模块以及其他对象的名称。1.Python标识符第一个字符必须是字母(A~Z和a~z)或下划线(_),剩下的字符可以是字母和数字或下划线,大小写敏感。标识符由字母、下划线和数字(0~9)组成,且不能以数字开头,Python中的标识符是区分大

    2025年10月16日
    4
  • Ubuntu 18.04+RTX2080Ti+CUDA10.1+CUDNN7.6.5+Pytorch1.3环境部署(详细教程)

    Ubuntu 18.04+RTX2080Ti+CUDA10.1+CUDNN7.6.5+Pytorch1.3环境部署(详细教程)

    2020年11月8日
    169
  • javaweb学习-jstl-<c:forEach>中 varStatus的属性简介

    javaweb学习-jstl-中 varStatus的属性简介

    2022年2月24日
    55
  • python协程系列_python asyncio

    python协程系列_python asyncio协程的定义协程(Coroutine),又称微线程,纤程。(协程是一种用户态的轻量级线程)作用:在执行A函数的时候,可以随时中断,去执行B函数,然后中断B函数,继续执行A函数(可以自动

    2022年7月29日
    9
  • 常见逻辑漏洞[通俗易懂]

    常见逻辑漏洞[通俗易懂] 支付逻辑漏洞检测方法与案列支付漏洞一般分为三类,支付过程可直接修改数据包中的支付金额开发人员为了方便,导致支付的关键数据,能直接截包查看而重要的金额数据,在后端没有做校验,传递过程中也没有做签名,导致可以随意篡改金额.  没有对购买数量进行负数限制产生的原因是开发人员没有对购买的数量参数进行严格的限制,传输过程没有做签名,导致可随意修改,经典的修改方式就是…

    2022年5月4日
    43
  • WPF中的StackPanel、WrapPanel、DockPanel

    WPF中的StackPanel、WrapPanel、DockPanel一、StackPanelStackPanel是以堆叠的方式显示其中的控件1、可以使用Orientation属性更改堆叠的顺序Orientation=”Vertical”默认,由上到下显示各控件。控件在未定义的前提下,宽度为StackPanel的宽度,高度自动适应控件中内容的高度1:2:ButtonA3:ButtonB4:B

    2022年7月22日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号