ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第一章:音视频环境基础

2021-05-14 16:32:07  阅读:204  来源: 互联网

标签:视频 播放 ffmpeg 环境 第一章 ffplay Linux 音视频


目录


概览:

基础知识:
1、Linux 基础知识
2、C语言基础回顾
3、swift 语言(mac)
4、重点:ffmpeg 编译

音频:
1、音频基础知识
2、音频编码原理
3、音频数据的采集
4、AAC/OPUS 编码

视频:
1、RGB/YUV (原始数据和播放器播放的数据都是 YUV,显示器显示的是 RGB,关键怎么转化
2、H264 编码原理(怎么压缩、压缩比例是多少)
3、视频数据采集
4、H264/H265 编码
5、H264 参数调优

流媒体服务器:
1、nginx
2、SRS (比较成熟的商业方案)
3、CDN 网络
4、RTMP 传输


一、音视频环境基础

1、音视频的应用

  • 互动直播系统
  • 娱乐直播系统 (我们以这个为背景来介绍)
  • 音视频特效
  • 音视频剪辑
  • 监控系统

最简单的一套直播系统

常用工具:
ffmpeg:包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。(没有图形界面)
ffplay:依赖于 ffmpeg ,目前最强的一个播放器。
vlc:依赖于 ffmpeg ,有一个图形界面。

直播系统的演示:
一个客户端:将自己的视频流,推送到流媒体服务器上
另外客户端:将流媒体服务器上的视频流,拉取到自己本地

  • ffmpeg将一个 视频数据 推送到流媒体服务器上:
    在这里插入图片描述

两种不同的播放方式

  • ffplay 从流媒体服务器上拉去音视频流 (ffplay 播放流媒体服务器上的视频
    在这里插入图片描述

  • ffplay 直接播放本地的视频
    在这里插入图片描述

结果对比
1、ffplay 播放流媒体服务器上的视频:会有一定的卡顿,并且有可能播放失败。
2、ffplay 直接播放本地的视频 : 非常流畅在这里插入图片描述
问题:为什么播放流媒体服务器上的视频会发生卡顿、清晰度不高呢?
我们在后面进行解析。

总结:架构模型
在这里插入图片描述

2、推流中断与画质不清晰的解决办法

问题1:推流失败

  • 时长不对,没有正确的文件大小。
  • 时间戳出现了问题
  • ffmpeg 内部将音频和视频分开按照最快的优先级来进行播放
  • 本来音频和视频是同步播放的,但是ffmpeg 内部的机制导致不同步
    在这里插入图片描述

解决:给 ffmpeg 加一个参数 (-re)

  • re参数:使
    在这里插入图片描述
    效果:可以完整的进行播放了,但是清晰度还是很低。

问题2:清晰度很低

  • 我们在进行播放的时候, ffmpeg 的参数 -f flv ,会将视频重新进行编码,导致视频有所损失

在这里插入图片描述
解决办法:加一个参数 -c:v copy (含义是不进行重新编码
在这里插入图片描述

总结:这两个问题,虽然看起来加两个参数就可以解决掉,但是我们要深入了解它背后的原理,理解为什么会这样。 这也是这门课的目的。


3、Linux 的基础知识

在这里插入图片描述
在这里插入图片描述

Vim 教程:详情请看

在这里插入图片描述


(1) Linux 当中的环境变量

环境变量的含义:一般是指在操作系统中用来指定操作系统运行环境的一些参数

PATH环境变量: path可理解为是计算机寻找某文件时的路径。(当我们在 bash 当中写下一个命令的时候,他就会到 path 指定的目录下面去寻找)

PKG_CONFIG_PATH:与 pkg_config 命令息息相关。(后面详细介绍)

在这里插入图片描述

增加 PATH 值的方式

  • 直接另外写一行,以冒号进行分割
  • 后面添加 $PATH
    在这里插入图片描述

PKG_CONFIG_PATH 环境变量的作用:

我们执行 pkg-config 命令的时候, 这个指令会到 PKG_CONFIG_PATH 环境变量 指定的目录下面去寻找对应的文件。
在这里插入图片描述


4、Linux 安装ffmpeg

通过源码的方式进行安装 ffmpeg 。

在这里插入图片描述

第一步:下载 ffmpeg 的源码 http://ffmpeg.org/download.html

1、通过 ftp 的方式来进行文件下载
2、通过在命令行下面,使用 Git 命令来进行源码下载。

在这里插入图片描述
git 下载比较慢的时候,我们使用 ftp 的方式进行下载。


第二步:编译 ffmpeg

./configure --prefix=/usr/local/ffmpeg --enable-debug=3 --disable-static --enable-shared  // 配置命令
make-j 4  // 多线程编程(4个核进行编译)
make install // 安装

注意:

-prefix=/usr/local/ffmpeg :指定安装目录
–disable-static --enable-shared :打开动态库,关闭静态库, 默认配置是生成静态库。

报错:nasm/yasm not found or too old. Use --disable-x86asm for a crippled build

分析:yasm是汇编编译器,ffmpeg为了提高效率使用了汇编指令,如MMX和SSE等。所以系统中未安装yasm时,就会报上面错误。

解决错误:安装yasm编译器。安装方法如下:

aptitude install yasm

第三步:添加 ffmpeg bin 文件的目录到 PATH 环境变量当中。
在这里插入图片描述

安装好之后:


bin文件里面的内容
在这里插入图片描述

ffmpeg :可以进行推流,音视频的处理
ffplay :可以进行拉流,可以播放本地的音视频文件
ffprobe :侦测本地的文件


include 里面的文件
作用:我们自己使用 ffmpeg 的库,进行二次开发的时候要包含的。
在这里插入图片描述

avcodec:进行编解码
avdevice:管理设备
avfilter:各种滤镜
avformat:多媒体文件格式处理
avutil:基本的工具
swresample:音频的重采样。
swscale:视频的缩放


lib 库的分析


问题:安装完 ffmpeg 工具之后,没有 ffplay 工具怎么解决呢?

留个坑


5、在 windows 下编译 ffmpeg

注意:在windows 下面编译 ffmpeg 有以下的三种方式

(1)cygwin 方式

cygwin :( Cygnus Windows) 是一个软件,安装在 Windows 当中,这个软件模拟了一个 Linux 的系统,然后我们在这个软件上面进行 ffmpeg 的编译。

工作原理:在 cygwin 这一个层次,做了一个Linux 的 API 到Windows API 的转换。 我们在跑程序的时候,调的Linux 的API,其实本质上都是调用的 windows 的API


进行配置
在这里插入图片描述


(2)MinGW + MSYS2 (最主用要这种)

MinGW:(Minimalist GNU for Wind ows) 完全模仿了 Linux 的编译工具链,将他们搬到 Windows 上面,只不过他所调用的接口还是windows 的接口


(3)VS + MSYS2

标签:视频,播放,ffmpeg,环境,第一章,ffplay,Linux,音视频
来源: https://blog.csdn.net/vincent3678/article/details/116721266

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有