FFMPEG音视频基础问题和被面试问到的东西

一、YUV的格式

  1.planner模式

  2.packet模式

  3.半planner模式

    

  https://www.jianshu.com/p/538ee63f4c1c  YUV格式详解

二、H264基础概念

  1.SPS

   a.profile

   b.视频长宽

  2.PPS

   a.I帧

   b.P帧

   c.B帧

  3.PTS和DTS

   PTS: 显示时间戳,表示解码后显示的时间

   DTS: 解码时间戳,表示送入解码器的顺序

  4.H264存储的两个形态

   a.Annex B : 

    StartCode :NALU单元,开头一般是0001或者001

    防竞争字节:为了区分 0 0 0 1,它采用0 0 0 0x3 1作为区分

    多用于网络流媒体中:rtmp、rtp格式

   b.AVCC :

    表示NALU长度的前缀,不定长       用4、2、1来存储这个NALU的长度

    防竞争字节

  多用于文件存储中  mp4的格式

1.音频播放过快,视频慢,如何选择丢帧

2.码率和分辨率都会影响视频的清晰度

3.生产者和消费者多多的关系

4.C++死锁的成因:

    A.忘记释放锁

    B.单线程重复申请锁,对同一个事物加两遍锁

    C.双线程多锁申请,都是指对一个事物加锁

    D.环形锁申请 A锁B、B锁A

5.sps和pps的区别

    SPS是序列参数集    0x67

    PPS是图像参数集    0x68

   在SPS序列参数集中可以解析出图像的宽,高和帧率等信息。而在h264文件中,最开始的两帧数据就是SPS和PPS,这个h264文件只存在一个SPS帧和一个PPS帧。

 

7.AAC和PCM的区别

   AAC在数据开始时候加了一些参数:采样率、声道、采样大小

 

FFMPEG:

图片如何合成视频

 

 

编码流程:

1.av_register_all

2.为AVFormatContext  分配内存

3.打开文件

4.创建输出码流AVSream

5.找到编码器

6.打开编码器

7.写文件头,没有的就不写入

8.循环编码视频像素数据->视频压缩数据

循环编码音频采样数据->音频压缩数据  ———>AVFrame转化为AVPacket

9.将编码后的视频码流写入文件  ——>AVPacket转化为AVFormat函数

10.关闭编码器

11.写文件尾

12.关闭资源文件

 

 

解码流程:

1.av_register_all

2.创建AVFormatContext的对象上下文

3.打开文件

4. avformat_find_stream_info

5.找到解码器

6.打开解码器

7.创建AVCodecContext上下文

8.av_read_frame :将avPacket数据转换为avFrame数据

 

glUniform1i() ——>这个可以设置对应纹理的第几层

glTexSubImage2D() 和glTexImage2D区别————>替换纹理的内容

 

几个不粗的网址

atomic_thread_fence    https://blog.csdn.net/wxj1992/article/details/103917093

https://www.cnblogs.com/yskn/p/9355556.html

https://blog.csdn.net/liumf2005/article/details/8489265 内存屏障

 

https://wiki.corp.kuaishou.com/pages/viewpage.action?pageId=230931344   音视频常见的文档

 

FFMPEG的教程文档:
http://ffmpeg.org/documentation.html 

 

https://blog.csdn.net/leixiaohua1020/article/details/50618190 音视频滤镜使用

 

https://www.cnblogs.com/fandx/p/12208107.html. FFMPEG分析一个流、包、帧的结构

 

https://www.cnblogs.com/leisure_chn/p/10584901.html     编辑代码的一些基础

 

 

FFMPEG面试大纲:
https://zhuanlan.zhihu.com/p/126693434

播放器的seek操作内部是如何实现的?

https://github.com/yhaolpz/FFmpegCmd ————>这个是一个demo,可以学学

 

https://www.cnblogs.com/leisure_chn/p/10429145.html —————>这个人写的音视频博客很强,关于FFMPEG的

 

 

https://www.cnblogs.com/inception6-lxc/p/8686156.html     C++的面试大全文档

 

 

 

未来要学习的FFMPEG代码

https://p.codekk.com/detail/c/xufuji456/FFmpegAndroid  

 

https://p.codekk.com/detail/Android/LanSoSdk/LanSoEditor_common

 

https://www.jianshu.com/u/35083fcb7747

 

FFmpeg - 打造一款万能的音乐播放器

https://www.jianshu.com/p/d8300535bbf0  

 

 

FFMPEG的学习库的文档

http://ffmpeg.org/doxygen/trunk/files.html    

 

 

即将下载

https://github.com/leixiaohua1020/simplest_ffmpeg_mobile

 

https://github.com/mabeijianxi/FFmpeg4Android

 

https://github.com/tanersener/mobile-ffmpeg

 

https://github.com/WangShuo1143368701/FFmpegAndroid

 

https://blog.csdn.net/leixiaohua1020/article/list/1   雷振华的网址

 

 

 

 

这两篇文章差不多,可以综合参考一下

音视频高手开发系列之FFMPEG结构体分析

https://blog.csdn.net/leixiaohua1020/article/details/14215821   

 

基本数据结构的解释

https://www.jianshu.com/p/9bc380f5225c?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

 

 

 

OpenGL的学习

https://github.com/wangchao0837/OpenGlCameraRender   

 

美图秀秀demo

https://github.com/wuhaoyu1990/MagicCamera  

 

疯狂学习openGL

https://search.bilibili.com/all?keyword=OpenGL%20%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E6%88%90%E9%AD%94       ———————————

 

https://www.jianshu.com/p/eea4d8582499 ———————这个OPENGL的博客可以仔细看看

https://blog.csdn.net/u010607947/article/details/76431474?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~first_rank_v2~rank_v28-1-76431474.nonecase&utm_term=dot%20opengl%20函数&spm=1000.2123.3001.4430  ——————————————OPENGL内置变量和函数

 

https://www.bilibili.com/video/BV1t7411E723?p=1   OPENGL的学习

 

https://ke.qq.com/course/2263825  FFMPEG的视频

https://ke.qq.com/course/143145   性能架构视频

https://ke.qq.com/course/441819

原文地址:https://www.cnblogs.com/liunx1109/p/14065589.html