• 【FFmpeg】ffmpeg+nginx-rtmp实现视频流转发


    1.应用场景

    目前的摄像头厂家能提供出来的视频流格式有限,且chrome已经禁止了对flash的支持,导致像硬盘录像机这种只能提供rtsp格式流地址的摄像头无法接入Web应用,所以不得不对视频的流地址进行分发,通过代码对流地址中的数据进行切割,非常影响服务的性能,所以采用ffmepg+nginx-rtmp这种无侵入,占用内存小的方式进行视频的分发。

    2.软件包

    ffmpeg-n4.4-80-gbf87bdd3f6-win64-gpl-4.4.zip

    nginx-rtmp-win32-dev.zip

    各位看官自行百度下载…

    3.使用ffmpeg进行视频流的转流

    1.解压zip目录进入文件的bin目录内,有如下几个文件

    这里要用到的就是ffmpeg.exe

    2.常用命令讲解

    命令含义
    -i设定输入视频的地址
    -f设定输出格式
    -hls_wrap设定分割的文件数量
    -c copy拷贝所有的流

     

    3.举一个例子

    ① 先在电脑上随便建立一个文件夹,我这里建的名称是test

    ② 进入ffmpeg的bin目录内,打开cmd命令行

    ③ 输入下列命令

    ffmpeg -i 视频流地址 -hls_wrap 10 -c copy -f hls 本地文件夹地址\test\204.m3u8

    当命令行出现以下内容时,表示转流成功

    ④打开本地建立的test文件夹,会发现有10个ts文件和一个m3u8文件,这里的ts文件,就是ffmpeg将流地址按照时间切片保存下来的视频文件,按照给定的参数进行循环保存覆盖的

    到这里,已经实现了对于视频流的转流及保存,这里可以解决的场景有:

    内网的摄像头映射到外网环境

    Web端显示摄像头画面

    接下来,只需要将这些切片文件一直提供给前端,就能持续的看到画面了。

    点击文末卡片领取音视频学习资料

    4.使用nginx-rtmp推送视频文件,让浏览器显示视频。

    解压nginx-rtmp-win32-dev.zip文件,进入conf文件夹,编辑nginx.conf文件

    1. worker_processes 1;
    2. error_log logs/error.log info;
    3. events {
    4. worker_connections 1024;
    5. }
    6. rtmp {
    7. server {
    8. listen 1935;
    9. application live {
    10. live on;
    11. }
    12. application hls {
    13. live on;
    14. hls on;
    15. hls_path temp/hls;
    16. hls_fragment 8s;
    17. }
    18. }
    19. }
    20. http {
    21. server {
    22. listen 8080;
    23. location / {
    24. # 这里配置视频文件所在的文件夹,这里就放在nginx-rtmp的html文件夹内,
    25. # 所以不需要更改。
    26. root html;
    27. }
    28. location /stat {
    29. rtmp_stat all;
    30. rtmp_stat_stylesheet stat.xsl;
    31. }
    32. location /stat.xsl {
    33. root html;
    34. }
    35. location /hls {
    36. #server hls fragments
    37. types{
    38. application/vnd.apple.mpegurl m3u8;
    39. video/mp2t ts;
    40. }
    41. alias temp/hls;
    42. expires -1;
    43. }
    44. }
    45. }

    启动nginx-rtmp:

    start nginx

    打开浏览器,看到以下内容,表示推送成功

    前端推荐使用Video.js进行视频的展示,这里不做赘述了,使用起来非常简单。

    如果有很多视频需要转发,推荐写bat文件进行后台启动

    1. //流地址转发.bat
    2. start cmd /k ffmpeg -i 流地址1 -hls_wrap 10 -c copy -f hls 本地文件夹\1.m3u8
    3. start cmd /k ffmpeg -i 流地址2 -hls_wrap 10 -c copy -f hls 本地文件夹\2.m3u8
    4. start cmd /k ffmpeg -i 流地址3 -hls_wrap 10 -c copy -f hls 本地文件夹\3.m3u8
    5. start cmd /k ffmpeg -i 流地址4 -hls_wrap 10 -c copy -f hls 本地文件夹\4.m3u8
    6. start cmd /k ffmpeg -i 流地址5 -hls_wrap 10 -c copy -f hls 本地文件夹\5.m3u8

    这样保存成bat,直接双击就能启动

     

     

     

     

  • 相关阅读:
    【JVM】G1垃圾回收器简述
    利用反射动态构造wrapper条件( 利用反射获取注解值以及实体类值)
    【面试经典150 | 哈希表】赎金信
    torch多机器多卡推理大模型
    SSM+网上书城系统 毕业设计-附源码180919
    记录一次用宝塔部署微信小程序Node.js后端接口代码的详细过程
    关于透明传输在通信中的应用浅谈
    【文件I/O】(二)文件IO
    力扣热题100——一刷day03
    开发者驱动的软件公司,如何赚取万亿美元?
  • 原文地址:https://blog.csdn.net/yinshipin007/article/details/127912621