• 【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,直接双击就能启动

     

     

     

     

  • 相关阅读:
    深入浅出 Linux 中的 ARM IOMMU SMMU I
    pandas字符串操作:大小写转换、连接、分割、包含等
    12.4泛型 map set
    EWSD交换机加电过程
    JVM区域划分
    POSTGRESQL 一个“大” SQL 的优化历险记
    C/S架构学习之UDP客户端
    星环科技重磅推出数据要素流通平台Transwarp Navier,助力企业实现隐私保护下的数据安全流通与协作
    聚苯乙烯-甲基丙烯酸-3-三甲氧基硅丙酯离子交换树脂微球/二氧化硅@聚苯乙烯@聚吡咯三层复合物微球性能
    Linux脚本:将.sh文件输出映射到日志文件并添加时间戳
  • 原文地址:https://blog.csdn.net/yinshipin007/article/details/127912621