暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ffmpeg之视频流质量对带宽与cpu的影响

左羊公社 2020-04-18
767

当你面对“为了什么而工作”感到迷茫时,你就干脆而果断地告诉自己“工作只是为了赚钱养活自己而已”。这就是人为何要工作的根本。by《人间值得》


最近左羊在使用ffmpeg这款框架来处理同一场地中的多个网络摄像头,将他们的媒体流从内网环境推到公网流媒体服务时遇到了如下问题,今天记录一下以备不时之需!

 

FFMpeg是什么能做什么:

FFMpeg(Fast Forward Mpeg)是一个多媒体框架,它能够解码、编码、转码、能够播放几乎任何格式的视频(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等),它在window、Linux、Mac都可使用。FFmpeg官网:http://ffmpeg.org/,FFmpeg可以当做一个命令行工具来使用,也可以使用它的库进行开发使用,FFmpeg都提供对应的下载地址,它如此强大而且是FFmpeg还是免费的,FFmpeg功能强大,用它可以视频信息采集、视频格式转换、视频截图、给视频加水印,从视频文件中提取音频组件,将视频转换为动画GIF,FFmpeg可以做到这一切,甚至更多。

 

ffmpeg处理直播流过程

ffmpeg直播命令

    ffmpeg -re -rtsp_transport tcp -i rtsp:内网摄像头通道 -c:a copy -c:v libx264 -preset:v fast -tune:v zerolatency -max_delay 100 -f flv -g 5 -b 1024k rtmp:流媒体服务器域名
    ffmpeg {1} {2} -i {3} {4} {5}
    1.全局参数
    2.输入文件参数
    3.输入文件
    4.输出文件参数
    5.输出文件
      -re \\全局参数
      -rtsp_transport tcp \\输入文件参数
      -i rtsp:/内网摄像头通道 \\输入文件
      -c:a copy -c:v libx264 -preset:v fast -tune:v zerolatency -max_delay 100 -f flv -g 5 -b 1024k \\输出文件参数
      rtmp://流媒体服务器域 \\输出文件
      #-re :就是根据文件真实的帧率来读取文件,生成实时刷新的直播流,而不是一下子按照电脑的最大性能把文件一下子读进去。*
      #-rtsp_transport tcp:从rtsp服务器拉取直播流*
      #-c:指定编码器
      #-c copy:直接复制,不经过重新编码(这样比较快)
      #-c:v:指定视频编码器*
      #-c:a:指定音频编码器*
      #-i:指定输入文件*
      #-an:去除音频流
      #-vn:去除视频流
      #-preset:指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow。*
      #-tune
      film:电影、真人类型;
      animation:动画;
      grain:需要保留大量的grain时用;
      stillimage:静态图像编码时使用;
      psnr:为提高psnr做了优化的参数;
      ssim:为提高ssim做了优化的参数;
      fastdecode:可以快速解码的参数;
      zerolatency:零延迟,用在需要非常低的延迟的情况下,比如电视电话会议的编码。*
      #-y:不经过确认,输出时直接覆盖同名文件。
      # libx264:最流行的开源 H.264 编码器*
      #-threads 0 處理器核心利用數量
      #-aspect 16:9 4:3 視頻比例
      #-pass N 1-3可选

      问题1:ffmpeg在不做任何处理时直接将源码流推向公网会出现将所在场地带宽直接打死(场地带宽过小的情况下)?

      解决方案:对源码流进行降帧和比特率控制
      问题2:源码流质量过高,ffmpeg在对媒体流进行处理时会占用大量算力导致CPU占用过高?

      解决方案:网络摄像头几乎都有两种形式的码流,主码流和子码流。
      主码流:用来传输摄像头拍摄的原始清晰度与流畅度,主要为了储存这些高清视频。
      子码流:主要为了网络传输,媒体流质量较低。
      问题3:子码流质量过高导致,ffmpeg在对媒体流进行处理时会占用大量算力导致CPU占用过高?

      解决方案1:与客户协商降低子码流质量
      解决方案2:降低同时访问摄像头数量(不现实)
      解决方案3:切换CPU算力为GPU算力
       
      左羊向大家请教下:
      切换GPU算力能否解决CPU占用过高问题?
      我猜测差不多!


      [

      END

      ]


      关注左羊公社


      文章转载自左羊公社,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论