努力努力再努力~~
这个作者很懒,什么都没留下…
展开
-
【流媒体开发】21、H264 NALU分析
视频编码在流媒体和⽹络领域占有重要地位;流媒体编解码流程⼤致如下图所示:1、H264简介H.264从1999年开始,到2003年形成草案,最后在2007年定稿有待核实。在ITU的标准称为H.264,在MPEG的标准⾥是MPEG-4的一个组成部分–MPEG-4 Part 10,叫Advanced Video Codec,因此常常称为MPEG-4 AVC或直接叫AVC。2、H264 编解码解析参考链接: H264 编解码协议详解;深⼊浅出理解视频编码H264结构;详细⽂档;H264编解码框图;3、H原创 2021-10-10 21:41:19 · 706 阅读 · 1 评论 -
【流媒体开发】【数据与封装格式】20、AAC码流格式与解析
本文主要是对AAC音频编码数据格式的解析,以从AAC码流中分析得到它的基本单元ADTS frame,并且可以简单解析ADTS frame首部的字段。可以代码以下问题阅读:1、ADTS和AAC分别是什么?他们之间有什么联系2、编码号的AAC数据为什么无法直接播放?3、怎么解析一个AAC数据,获得它的采样率、通道、数据大小,怎么区分开一个个的ADTS帧?一、ADTSADTS全称是(Audio Data Transport Stream),是AAC的一种十分常见的传输格式作用:在使用ffmpe原创 2021-07-24 08:35:40 · 862 阅读 · 0 评论 -
【流媒体开发】19、FFMpeg解封装流程分析
1、理解解封装流程和函数调用2、duration和time_base的理解一、前言本节描述使用ffmpeg解封装,解封装其实就是将flv、mp4等文件中的音频和视频数据剥离出来,MP4拆分成AAC和H264文件等。二、封装相关函数接口avformat_alloc_context(): 负责申请一个AVFormatContext结构的内存,并进行简单初始化avformat_free_context(): 释放该结构里的所有东西以及该结构本身avformat_close_input(): 关闭原创 2021-09-30 16:29:37 · 399 阅读 · 0 评论 -
【流媒体开发】18、FFmpeg内存模型
本文介绍了AVPacket和AVFrame两块buffer是怎么管理的,并梳理了所有相关的接口,介绍这些接口内部 具体实现了什么。一、引出问题:1、从av_read_frame读取到一个AVPacket后怎么放入队列?2、从avcodec_recevice_frame读取到一个AVFrame后又怎么放入队列?二、拷贝从现有的Packet拷贝一个新Packet的时候,有两种情况:浅拷贝:两个Packet的buf引用的是同一数据缓存空间,这时候要注意数据缓存空间的释放问题;深拷贝:两个Pa原创 2021-09-30 09:59:55 · 414 阅读 · 0 评论 -
【流媒体开发】17、FFmpeg基础入门、API、结构体
一、播放器框架二、常用音视频概念容器/文件(Conainer/File): 即特定格式的多媒体文件,比如mp4、flv、mkv等。媒体流(Stream): 表示时间轴上的一段连续数据,如一段声音数据、一段视频数据或一段字幕数据,可以是压缩的,也可以是非压缩的,压缩的数据需要关联特定的编解码器(有些码流音频他是纯PCM)。数据帧/数据包(Frame/Packet): 通常,一个媒体流是由大量的数据帧组成的,对于压缩数据,帧对应着编解码器的最小处理单元,分属于不同媒体流的数据帧交错存储于容器之中。原创 2021-09-26 20:52:20 · 455 阅读 · 0 评论 -
【流媒体开发】16、SDL-PCM播放
本节主要介绍使用SDL接口实现音频PCM数据的播放,具体实现可以在大致了解SDL接口的前提下,参考下面的程序解析和代码实现。SDL接口介绍打开音频设备int SDLCALL SDL_OpenAudio(SDL_AudioSpec * desired, SDL_AudioSpec * obtained); // desired:期望的参数。// obtained:实际音频设备的参数,一般情况下设置为NULL即可。在ffplay的实现中会使用第二个参数,到时再详细介绍入参结构体SDL_Aud原创 2021-09-24 21:21:00 · 226 阅读 · 0 评论 -
【流媒体开发】15、SDL-YUV播放
本节使用SDL实现YUV数据的显示输出,其实就是读取一个YUV文件,然后每过40ms读取一帧YUV送SDL显示,接口调用如下,都很简单,看下就懂。SDL视频显示的流程:运行结果程序解析:1、程序退出: 点击窗口右上角×,SDL会发送一个自带的SDL_QUIT事件,将s_thread_exit = 1,置为1之后,刷帧线程就会退出,然后再发送一个事件QUIT_EVENT,这个时候显示的主线程while才会退出。2、窗口拉伸: 窗口拉伸时会受到事件SDL_WINDOWEVENT,这个时候我们可以获原创 2021-09-24 20:41:02 · 155 阅读 · 0 评论 -
【流媒体开发】14、SDL线程
sdl线程的创建:这里描述这个的主要原因是因为ffplay是这样实现的,一个线程送解码,一个线程获取解码之后的数据,因为是多线程并且有队列等的管理,所以也使用了锁和信号量基本介绍线程:SDL线程创建:SDL_CreateThreadSDL线程等待:SDL_WaitThead锁SDL互斥锁:SDL_CreateMutex/SDL_DestroyMutexSDL锁定互斥:SDL_LockMutex/SDL_UnlockMutex信号量:SDL条件变量(信号量):SDL_Crea原创 2021-09-23 23:20:53 · 505 阅读 · 0 评论 -
【流媒体开发】13、SDL事件响应
SDL事件的响应,先给大家一个直观上的理解,通过事件响应我们可以获取到当前键盘敲击的键值,可以获取到鼠标在窗口的位置,可以获取到鼠标当前按下的是左键还是右键等;功能还是比较强大的,ffplay就是使用的SDL来实现一些播放快捷键的。基本介绍函数:SDL_WaitEvent():等待一个事件SDL_PushEvent():发送一个事件SDL_PumpEvents():将硬件设备产生的事件放入事件队列,用于读取事件,在调用该函数之前,必须调用SDL_PumpEvents搜集键盘等事件SDL_Pe原创 2021-09-23 22:23:14 · 844 阅读 · 0 评论 -
【流媒体开发】12、SDL基本介绍
一、SDL简介SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。目前SDL多用于开发游戏、模拟器、媒体播放器等多媒体应用领域。对于我们课程而言:SDL主要用来辅助学习FFmpeg,所以我们只会关注我们用到的知识点。官网:https://www.libsdl.org/文档原创 2021-09-23 20:40:47 · 607 阅读 · 0 评论 -
【流媒体开发】11、ffmpeg命令过滤器(裁剪、水印、画中画、多宫格)
一、裁剪裁剪: 是指从原图中抠出一个区域,那么需要裁剪一个区域需要哪些参数呢?左上角起始点的坐标需要裁剪的宽高ffmpeg命令语法:crop=ow[:oh[:x[:y[:keep_aspect]]]]举例说明:裁剪左边1/3ffmpeg -i input -vf crop=iw/3:ih:0:0 outputffplay -i input -vf crop=iw/3:ih:0:0裁剪中间1/3ffmpeg -i input -vf crop=iw/3:ih原创 2021-09-22 22:34:53 · 1832 阅读 · 0 评论 -
【流媒体开发】10、ffmpeg命令直播
本节主要是学习怎么将网络流保存到本地,并且怎么拉流和推流一、直播拉流一般都是先使用ffplay先测试rtmp链接是否可用ffplay rtmp://server/live/streamName ffmpeg -i rtmp://server/live/streamName -c copy dump.flv对于不是rtmp的协议 -c copy要谨慎使用,-c等价于-codec可用地址HKS:rtmp://live.hkstv.hk.lxdns.com/live/hks2大熊兔(点播)原创 2021-09-21 20:26:41 · 317 阅读 · 0 评论 -
【流媒体开发】9、ffmpeg实现视频录制
使用ffmpeg通过录制音视频,分为两种:1、一种是录制麦克风和电脑自带摄像头的音视频2、一种是录制电脑系统自带的音频和录屏本节说明一下怎么实现音视频的录制,并且进行一些参数的调节一、安装、设备查看1、dshow软件安装是桌面录制和系统音频录制的一个插件先安装dshow软件 Screen Capturer Recorder,项目地址: https://sourceforge.net/projects/screencapturer/files/2、查看当前可用于录制的设备然后查看可原创 2021-09-21 19:59:20 · 3645 阅读 · 0 评论 -
【流媒体开发】8、ffmpeg命令视频拼接、图片和视频转换
一、视频拼接1.1生成测试文件找三个不同的视频每个视频截取10秒内容ffmpeg -i 沙海02.mp4 -ss 00:05:00 -t 10 -codec copy 1.mp4ffmpeg -i 复仇者联盟3.mp4 -ss 00:05:00 -t 10 -codec copy 2.mp4ffmpeg -i 红海行动.mp4 -ss 00:05:00 -t 10 -codec copy 3.mp4如果音视频格式不统一则强制统一为 -vcodec libx264 -acodec aac原创 2021-09-21 16:18:27 · 1070 阅读 · 0 评论 -
【流媒体开发】7、ffmpeg基础命令
一、ffmpeg命令参数说明1.1主要参数:-i 设定输入流-f 设定输出格式(format)如果指定了输出格式,后面文件名即便是mp4,输出的也是-f指定的flv,如果不指定则以后缀为准ffmpeg -i Forrest_Gump_IMAX.mp4 -codec copy -ss 10 -t 10 -f flv out.mp4-ss 开始时间-t 时间长度1.2音频参数:-aframes 设置要输出的音频帧数-b:a 音频码率-ar 设定采样率-ac 设定声音的C原创 2021-09-19 21:03:33 · 169 阅读 · 0 评论 -
【流媒体开发】6、ffplay命令
一、ffplay播放控制下面的命令是在播放之后的界面下操作:原创 2021-09-17 22:13:21 · 1289 阅读 · 0 评论 -
【流媒体开发】5、ffmpeg命令帮助、分类查询、基础数据流
本章主要介绍ffmpeg的一些命令,对于ffmpeg的一些基础概念了解可以参考【FFMpeg SDK使用】1、FFMPEG简介与视频处理工具的使用一、FFMPEG如何查询命令帮助文档1.1ffmpeg/ffplay/ffprobe区别ffmpeg: Hyper fast Audio and Video encoder超快音视频编码器(类似爱剪辑)ffplay: Simple media player简单媒体播放器ffprobe: Simple multimedia streams analyz原创 2021-09-17 20:43:52 · 147 阅读 · 0 评论 -
【流媒体开发】4、环境搭建
0、前言ffmpeg开发环境的搭建分为:1、win10(1)FFmpeg命令行(2)安装vs2015(3)安装QT(4)自己编译FFmpeg2、ubuntu16.041、windows-ffmpeg命令行环境搭建**FFMPEG官网:**http://ffmpeg.org/下载:Shared:包含FFMPEG的dll库文件Static:包含了FFMPEG的官方文档Dev:包含FFMPEG的lib文件/头文件,以及example范例我们目前主要是使用32位的版本搭建:原创 2021-09-17 20:22:56 · 108 阅读 · 0 评论 -
【流媒体开发】3、封装格式+音视频同步
1、封装格式封装格式:(也叫容器)就是将已经编码压缩好的视频流、音频流及字幕按照一定的方案放到一个文件中,便于播放软件播放。一般来说,视频文件的后缀名就是它的封装格式封装的格式不一样,后缀名也就不一样。(比如.mp4(本地存储) .flv(网络传输比较流行)),不同使用场景封装为不同格式例子:这里的压缩算法:视频Video:使用了H264/AVC压缩算法音频Audio:使用了AAC压缩算法封装则使用MP4封装格式常见的视频封装格式H264+AAC封装为FLV或MP4是最为流行原创 2021-09-16 21:01:54 · 359 阅读 · 0 评论 -
【流媒体开发】2、音频基础
1、声音的物理本质声音是由物体的振动产生的,这种振动引起了周围空气压强的振荡,我们称这种振荡的函数表现形式为波形。(但实际上是有很多个波形组成的)振幅: 表示声音的大小,音量调节就是调节振幅的峰值频率: 周期的倒数,它表示的是声音在1秒钟内的周期数,单位是赫兹(Hz)。千赫(kHz),即1000Hz,表示每秒振动1000次。声音按频率可作如下划分:次声 0~20Hz人耳能听见的声音 20Hz~20KHz超声 20KHz~1GHz特超声 1原创 2021-09-16 20:33:28 · 448 阅读 · 0 评论 -
【流媒体开发】1、音视频基础
1、音视频录制原理音视频录制分为:视频:采集:视频通过摄像头AD芯片采集到数据,转化为YUV输出,根绝相机制式的不同输出的帧率也是不同的;图像处理:对采集到数据进行处理,修改亮度、色度、饱和度、锐度、降噪等;编码:图像处理之后的数据会放到待编码队列中,等待编码线程去获取,编码是对图像数据进行压缩存盘;音频采集:拾音器采集到音频之后,AD转换输出PCM数据到后级,根据采样率、位宽确定每帧的大小(音频实际是没有帧的概念的,只是我们把1s的数据分包,一包算定成1帧)音频处理:变音、原创 2021-09-15 21:30:11 · 283 阅读 · 0 评论