一看就能学会的H5视频推流方案

news/2024/7/10 19:44:24 标签: 嵌入式, ffmpeg, 运维

本文由云+社区发表

作者:周超

导语

随着直播平台爆发式增长,直播平台从 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://www.cnblogs.com/qcloud1001/p/10397112.html


http://www.niftyadmin.cn/n/816262.html

相关文章

8-4交换排序-冒泡排序

一.基本思想和代码 以下按从小到大排序 基本思想&#xff1a;从后往前两两对比元素 &#xff08;一&#xff09;第一轮 1.对比最后两个元素。如果右边的小&#xff0c;二者交换。此处不动 2.对比5、6两个元素 不动 3.对比4、5两个元素 76>13&#xff0c;交换位置 代码角…

java内存的图解_java内存图解

MVC是一个经典的设计模式MVC的架构:具体是模型(Model).视图(View)和控制器(Controller). MVC模式的目的是实现一种动态的程式设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能 ...JdbcTemplae使用入门&amp&semi;&amp&semi;Spring三种连…

8-5交换排序-快速排序

partition [pɑːˈtɪʃn] 分割 pivot [ˈpɪvət] 枢轴 pivotpos(ition) 枢轴位置 一.基本思想 以某一元素作为枢轴&#xff0c;使得其左边的元素都比他小&#xff0c;右边的元素都比他大。然后再递归的对左右两个部分处理。 low和high分别指向首尾元素&#xff0c;初始值为…

对我影响最深的老师

第一位&#xff0c;他是我的中学老师&#xff0c;他很壮&#xff0c;所以爱打人&#xff0c;同学们都会很害怕他&#xff0c;但是他对我们的关心是无微不至&#xff0c;每次周末他都会跟我们开人生讲座&#xff0c;他会教我们怎样去对人&#xff0c;怎样去做事&#xff0c;会正…

java solr连接池_SpringBoot整合Redis、ApacheSolr和SpringSession

SpringBoot整合Redis、ApacheSolr和SpringSession一、简介SpringBoot自从问世以来&#xff0c;以其方便的配置受到了广大开发者的青睐。它提供了各种starter简化很多繁琐的配置。SpringBoot整合Druid、Mybatis已经司空见惯&#xff0c;在这里就不详细介绍了。今天我们要介绍的是…

8-6选择排序-简单选择排序

原理&#xff08;从小到大&#xff09;&#xff1a;每轮从待排序的序列中选择最小的元素放到前面 一.具体实现和效率分析 第一轮&#xff1a;默认0号位的49最小&#xff0c;从1号位开始遍历列表&#xff0c;找到最小的元素13&#xff0c;与0号位的49交换 注&#xff1a;若题目…

java final 垃圾回收_在Java中使用finalvariables可以改善垃圾回收吗?

这里有一个稍微不同的例子&#xff0c;其中一个是最终的引用types字段&#xff0c;而不是最终的值types局部variables&#xff1a;public class MyClass { public final MyOtherObject obj; }每次创buildMyClass的实例时&#xff0c;都将创build对MyOtherObject实例的传出引用&…

攻击原理解析与预防

XSS将输入的数据进行转义处理&#xff0c;比如说讲 < 转义成&lt&#xff1b;SQL注入在java中&#xff0c;我们可以使用预编译语句(PreparedStatement)&#xff0c;这样的话即使我们使用sql语句伪造成参数&#xff0c;到了服务端的时候&#xff0c;这个伪造sql语句的参数…