自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

雷霄骅(leixiaohua1020)的专栏

一个广院工科生的视音频技术笔记

  • 博客(965)
  • 资源 (141)
  • 收藏
  • 关注

原创 FFmpeg源代码结构图 - 编码

上一篇文章深入分析了FFmpeg解码过程中核心API的内部源代码,本文继续分析FFmpeg编码过程中核心API的内部源代码。本文的编码流程可以参考程序《最简单的基于FFmpeg的视频编码器》。函数调用关系图首先呈现分析的结果,如图所示。

2015-03-13 14:42:15 54767 25

原创 FFmpeg源代码结构图 - 解码

近期研究了一下FFmpeg的内部的源代码。之前对于FFmpeg的研究主要在它的应用层面上,因此制作的很多示例程序都是调用的FFmpeg的API。但是一直感觉这样对FFmpeg的理解还是比较浅,所以打算剖析一下它的源代码,理一下它内部结构的“脉络”。但是有一个很难办的问题:FFmpeg自带的三个工程:ffplay, ffmpeg, ffprobe的代码量非常的大,其中包含了成百上千的API;而这些API背后又包含了大量的FFmpeg内部函数。如此一来,几乎是不可能理清他们之间的关系的。

2015-03-12 14:03:16 132382 38

原创 FFmpeg源代码简单分析:avcodec_close()

本文简单分析FFmpeg的avcodec_close()函数。该函数用于关闭编码器。

2015-03-12 00:06:14 19849 2

原创 FFmpeg源代码简单分析:avcodec_encode_video()

本文简单分析FFmpeg的avcodec_encode_video2()函数。该函数用于编码一帧视频数据。

2015-03-11 22:26:14 33525 4

原创 FFmpeg源代码简单分析:av_write_trailer()

打算写两篇文章简单分析FFmpeg的写文件用到的3个函数avformat_write_header(),av_write_frame()以及av_write_trailer()。这篇文章继续分析av_write_trailer()。av_write_trailer()用于输出文件尾,它的声明位于libavformat\avformat.h

2015-03-11 17:29:06 24573 7

原创 FFmpeg源代码简单分析:av_write_frame()

打算写两篇文章简单分析FFmpeg的写文件用到的3个函数avformat_write_header(),av_write_frame()以及av_write_trailer()。上篇文章已经分析了avformat_write_header(),这篇文章继续分析av_write_frame()。

2015-03-11 16:03:35 48109 8

原创 FFmpeg源代码简单分析:avformat_write_header()

打算写两篇文章简单分析FFmpeg的写文件用到的3个函数:avformat_write_header(),av_write_frame()以及av_write_trailer()。其中av_write_frame()用于写视频数据,avformat_write_header()用于写视频文件头,而av_write_trailer()用于写视频文件尾。本文首先分析avformat_write_hea

2015-03-08 18:45:57 52987 11

原创 FFmpeg源代码简单分析:avcodec_open2()

本文简单分析FFmpeg的avcodec_open2()函数。该函数用于初始化一个视音频编解码器的AVCodecContext。

2015-03-08 00:14:29 69321 16

原创 FFmpeg源代码简单分析:avformat_close_input()

本文简单分析FFmpeg的avformat_close_input()函数。该函数用于关闭一个AVFormatContext,一般情况下是和avformat_open_input()成对使用的。

2015-03-07 10:58:52 28074 3

原创 FFmpeg源代码简单分析:av_find_decoder()和av_find_encoder()

本文记录FFmpeg的两个API函数:avcodec_find_encoder()和avcodec_find_decoder()。avcodec_find_encoder()用于查找FFmpeg的编码器,avcodec_find_decoder()用于查找FFmpeg的解码器。

2015-03-06 12:40:06 31724 3

原创 FFmpeg源代码简单分析:avformat_find_stream_info()

本文简单分析FFmpeg中一个常用的函数:avformat_find_stream_info()。该函数可以读取一部分视音频数据并且获得一些相关的信息。

2015-03-06 11:15:37 68548 10

原创 FFmpeg源代码简单分析:avformat_open_input()

本文简单分析FFmpeg中一个常用的函数:avformat_open_input()。该函数用于打开多媒体数据并且获得一些相关的信息。

2015-03-05 00:13:10 75076 10

原创 FFmpeg源代码简单分析:avio_open2()

本文简单分析FFmpeg中一个常用的函数avio_open2()。该函数用于打开FFmpeg的输入输出文件。

2015-03-04 14:16:41 64196 32

原创 FFmpeg源代码简单分析:avformat_alloc_output_context2()

本文简单分析FFmpeg中常用的一个函数:avformat_alloc_output_context2()。在基于FFmpeg的视音频编码器程序中,该函数通常是第一个调用的函数(除了组件注册函数av_register_all())。avformat_alloc_output_context2()函数可以初始化一个用于输出的AVFormatContext结构体。它的声明位于libavformat\a

2015-03-03 22:13:57 51481 13

原创 FFmpeg源代码简单分析:常见结构体的初始化和销毁(AVFormatContext,AVFrame等)

本文简单分析FFmpeg常见结构体的初始化和销毁函数的源代码。常见的结构体在文章:《FFMPEG中最关键的结构体之间的关系》中已经有过叙述,包括:AVFormatContext:统领全局的基本结构体。主要用于处理封装格式(FLV/MKV/RMVB等)。AVIOContext:输入输出对应的结构体,用于输入输出(读写文件,RTMP协议等)。AVStream,AVCodecContext:视音频流对应

2015-03-03 16:25:13 75900 18

原创 FFmpeg源代码简单分析:内存的分配和释放(av_malloc()、av_free()等)

本文简单记录一下FFmpeg中内存操作的函数。内存操作的常见函数位于libavutil\mem.c中。

2015-03-03 15:24:48 54414 9

原创 最简单的基于Flash的流媒体示例:网页播放器(HTTP,RTMP,HLS)

本文继续上一篇文章,记录一些基于Flash的流媒体处理的例子。本文记录一些基于Flash技术的网页播放器。基于Flash的网页播放器相比于其他网页播放器来说最大的优势就是“免插件安装”了,这一点可以很大的提高用户的体验质量。早些时候网络视频(尤其是直播)一般都使用ActiveX控件作为视频播放器,而这些控件并不普及,所以终端用户必须下载相关的插件才能收看节目,因而对很多不熟悉电脑的用户造成了很大的

2015-02-25 14:04:39 217285 35

原创 最简单的基于Flash的流媒体示例:RTMP推送和接收(ActionScript)

本文记录一些基于Flash的流媒体处理的例子。Flash平台最常见的流媒体协议是RTMP。此前记录的一些基于C/C++的RTMP播放器/推流器,但是没有记录过基于Flash中的ActionScript的RTMP播放器/推流器。其实基于Flash的RTMP播放器/推流器才能算得上是RTMP技术中的“正规军”。RTMP本身设计出来就是用于Flash平台之间通信的,而且RTMP最大的优势——“无插件直播

2015-02-25 12:40:49 67717 33

原创 FFmpeg示例程序合集-批量编译脚本

此前做了一系列有关FFmpeg的示例程序,组成了《最简单的FFmpeg示例程序合集》,其中包含了如下项目:simplest ffmpeg player:                  最简单的基于FFmpeg的视频播放器simplest ffmpeg audio player:       最简单的基于FFmpeg的音频播放器simplest ffmpeg pic encoder:

2015-02-23 15:20:04 15369 3

原创 FFmpeg示例程序合集-Git批量获取脚本

此前做了一系列有关FFmpeg的示例程序,组成了《FFmpeg示例程序合集》,其中包含了如下项目: simplest ffmpeg player:                 最简单的基于FFmpeg的视频播放器simplest ffmpeg audio player:       最简单的基于FFmpeg的音频播放器simplest ffmpeg pic encoder:        最简单的基于FFmpeg的图

2015-02-23 13:51:58 11374 1

原创 最简单的视频网站(JavaEE+FFmpeg)

本文记录一个最简单的视频网站系统。此前做过一些基于JavaEE中的SSH (Strut2 + Spring + Hibernate)的网站系统,但是一直没有做过一个视频网站系统,所以就打算做一个“精简”的视频网站系统,以方便以后测试以及学习使用。本视频网站支持直播(通过RTMP实现)和点播(通过HTTP实现)。为了保持精简,这个视频网站系统仅制作了网络视频的管理功能(增删改查),以及相关的参数配置功能。

2015-02-23 00:39:24 80412 61

原创 DVB-C系统中QAM调制与解调仿真

本文简单记录一下自己学习《通信原理》的时候调试的一个仿真DVB-C(Cable,数字有线电视)系统中QAM调制和解调的程序。自己一直是研究“信源”方面的东西,所以对“信道”这方面的知识进行实践的机会一直不是很多,做这个小程序的过程中也熟悉了不少相关的知识。在这个程序中,每执行一步操作,都会画出时域信号图和频域信号图,同时会在控制台打印出有关变量的取值,对于理解QAM调制与解调有一定的帮助。

2015-02-21 21:48:59 17409 5

原创 DVB数字电视系统简介(DVB-C,DVB-S,DVB-T)

前一段时间在《通信原理》期末的时候研究了一下DVB数字电视系统。视音频编解码这些技术都是属于“信源”的技术,而《通信原理》研究的范围正好是它的补集,属于“信道”方面的技术。由于自己不是做这方面的,所以信道方面的技术此前接触的比较少,因此打算把搜集的资料简单整理一下记录下来以备查阅。本文就打算记录一下DVB方面的知识。1.简介数字视频广播(英语:Digital Video Broadcasting,缩写:D

2015-02-21 18:23:21 79486 1

原创 最简单的基于DirectShow的示例:获取Filter信息

本文记录一个获取DirectShow的Filter信息的程序。该程序可以遍历当前系统中的DirectShow Filter并且将它们的信息打印到控制台中。通过本程序可以搞清楚DirectShow中Filter,Pin,MediaType等几个关键结构之间的关系,以及它们的信息的获取方法。

2015-01-12 21:03:08 21401 5

原创 最简单的基于DirectShow的示例:视频播放器自定义版

本文记录一个简单的基于DirectShow的自定义的视频播放器。这里所说的“自定义播放器”,实际上指的是自己在Filter Graph中手动逐个添加Filter,并且连接这些Filter的后运行的播放器。这么做相对于使用RenderFile()这种“智能”创建Filter Graph的方法来说要复杂不少,但是可以让我们更加了解DirectShow的体系。流程图最简单的基于DirectShow的自定

2015-01-11 18:05:19 13488 2

原创 最简单的基于DirectShow的示例:视频播放器图形界面版

本文记录一个最简单的基于DirectShow的图形界面的视频播放器。基于DirectShow的图形界面的播放器的例子还是比较多的,但是大部分都是“层层封装”的例子。“层层封装”的例子相对来说更加稳定,但是却不是很容易理解。因为DirectShow本身的接口函数的数量就比较多,如果再加上封装DirectShow的函数,合起来的函数数量是非常大的,很容易让人搞不清哪些才是真正的DirectShow接口

2015-01-11 11:22:30 10370 1

原创 最简单的基于DirectShow的示例:视频播放器

本文记录一个最简单的基于DirectShow的视频播放器。DirectShow是一个庞大的框架,可以在Windows下实现多种多样的视频处理需求。但是它的“庞大”也使得新手不太容易学习它的使用。本文的例子正是为解决这一问题而做的,它只包含了使用DirectShow播放一个视频文件所需要的最重要的函数。流程图最简单的使用DirectShow播放视频文件的流程如下图所示。流程图中涉及到几个接口如下所示

2015-01-10 18:29:47 23443 18

原创 最简单的基于libVLC的例子:最简单的基于libVLC的推流器

本文记录基于libVLC的最简单的推流器。该推流器可以将本地的视频文件转码后推送至目标流媒体服务器(也可以是一个组播地址)。最简单的基于libVLC的推流器本文记录一个使用libVLC开发的一个推流器,可以将本地的媒体文件推送至流媒体服务器。该推流器的代码十分简单,只用到了几个函数:libvlc_new():创建libvlc_instance_t。libvlc_vlm_add_broadcast(

2015-01-09 14:36:46 29797 38

原创 最简单的基于libVLC的例子:最简单的基于libVLC的视频播放器(图形界面版)

本文记录使用libVLC开发的一个简单的图形界面的视频播放器。由于是示例程序,只包含了最简单的媒体播放方面的功能。其中有一些功能还不完善,有时间以后再做修改。 最简单的基于libVLC的视频播放器(图形界面版)这是使用libVLC基于MFC开发的一个示例播放器。实现了一个播放器的基本功能:播放,暂停/继续,停止,播放时间轴的显示,以及从任一点开始播放媒体。并且支持将媒体文件拖拽至播放器进行播放。播

2015-01-09 12:51:15 39524 31

原创 最简单的基于libVLC的例子:最简单的基于libVLC的视频播放器

本文记录使用libVLC的开发的最简单的视频播放器示例。VLC Media Player是一款优秀的播放器,但是由于它的源代码编译的难度比较大,一直没有深入研究过它的开发方面的技术。此前触到了一些VLC开发方面的东西,因此总结了一下libVLC的开发示例程序。

2015-01-08 22:33:00 97959 45

原创 最简单的基于FFmpeg的解码器-纯净版(不包含libavformat)

本文记录一个更加“纯净”的基于FFmpeg的视频解码器。此前记录过基于FFmpeg的视频播放器实际上就是一个解码器:《最简单的基于FFMPEG+SDL的视频播放器 ver2 (采用SDL2.0)》这个播放器调用了FFmpeg中的libavformat和libavcodec两个库完成了视频解码工作。但是这不是一个“纯净”的解码器。该解码器中libavformat完成封装格式的解析,而libavcod

2015-01-03 14:31:33 67263 79

原创 最简单的基于FFmpeg的编码器-纯净版(不包含libavformat)

本文记录一个更加“纯净”的基于FFmpeg的视频编码器。此前记录过两个基于FFmpeg的视频编码器:这个视频编码器调用了FFmpeg中的libavformat和libavcodec两个库完成了视频编码工作。但是这不是一个“纯净”的编码器。上述两个库中libavformat完成封装格式处理,而libavcodec完成编码工作。一个“纯净”的编码器,理论上说只需要使用libavcodec就足够了,并不

2015-01-03 12:10:48 28456 38

原创 最简单的基于FFmpeg的libswscale的示例附件:测试图片生成工具

本文记录一个自己写的简单的测试图片生成工具:simplest_pic_gen。该工具可以生成视频测试时候常用的RGB/YUV格式的测试图片。包括灰阶测试图,彩条图,彩色条纹图,RGB渐变彩条图,YUV渐变彩条图,颜色视频等。下面简单介绍一下这些测试图片的生成函数。这里有一点需要注意:查看生成的图片需要使用RGB/YUV播放器。 灰阶测试图亮度取值为16-235的灰阶测试图下面这张图是一张灰阶测试图的示例。这张图的分辨率是1280x720,像素格式是YUV420P,亮度的取值范围是

2014-12-29 12:07:56 13082 6

原创 最简单的基于FFmpeg的libswscale的示例(YUV转RGB)

本文记录一个基于FFmpeg的libswscale的示例。Libswscale里面实现了各种图像像素格式的转换,例如YUV与RGB之间的转换;以及图像大小缩放(例如640x360拉伸为1280x720)功能。而且libswscale还做了相应指令集的优化,因此它的转换效率比自己写的C语言的转换效率高很多。

2014-12-28 00:46:53 63776 27

原创 最简单的基于librtmp的示例:发布H.264(H.264通过RTMP发布)

本文记录一个基于libRTMP的发布H.264码流的程序。该程序可以将H.264数据发布到RTMP流媒体服务器。目前这个例子还不是很稳定,下一步还有待修改。本程序使用回调函数作为输入,通过自定义的回调函数,可以发送本地的文件或者内存中的数据。函数调用结构图本程序的函数调用结构图如下所示。 整个程序包含3个接口函数:RTMP264_Connect():建立RTMP连接。RTMP264_Send():

2014-12-27 00:26:20 57332 84

原创 最简单的基于librtmp的示例:发布(FLV通过RTMP发布)

本文记录一个基于libRTMP的发布流媒体的程序:Simplest libRTMP Send FLV。该程序可以将本地FLV文件发布到RTMP流媒体服务器。是最简单的基于libRTMP的流媒体发布示例。

2014-12-26 00:09:33 45873 21

原创 最简单的基于librtmp的示例:接收(RTMP保存为FLV)

本文记录一个基于libRTMP的接收流媒体的程序:Simplest libRTMP Receive。该程序可以将RTMP流保存成本地FLV文件。实际上本文记录的程序就是一个“精简”过的RTMPDump。RTMPDump功能比较多,因而其代码比较复杂导致很多初学者不知从何下手。而本文记录的这个程序只保留了RTMPDump中最核心的函数,更加方便新手入门学习libRTMP。 流程图使用librtmp接

2014-12-25 00:50:26 37085 25

原创 最简单的视频编码器:基于libvpx(编码YUV为VP8)

本文记录一个最简单的基于libvpx的VP8视频编码器。这个例子是从官方的示例代码中精简出来的例子。我发现与H.264不同,VP8的裸流(即不包含封装格式的纯视频数据流)是不能播放的。换言之,VP8的裸流必须存放在容器中才可以播放。官方示例代码中存储VP8视频流的封装格式是IVF。IVF这种封装格式不是很常见,相关的资料可以查询有关的文档。此外,这个工程中的libvpx也可以编码VP9格式的视频。

2014-12-24 00:24:22 23836 7

原创 最简单的视频编码器:基于libx265(编码YUV为H.265)

本文记录一个最简单的基于libx265的H.265(HEVC)视频编码器。此前记录的编码器是通过FFmpeg调用libx265完成编码的,例如:《最简单的基于FFmpeg的视频编码器-更新版(YUV编码为HEVC(H.265))》相比与上文中的编码器,本文记录的编码器属于“轻量级”的编码器。因为它不再包含FFmpeg的代码,直接调用libx265完成编码。因此项目的体积非常小巧。该编码器可以将输入

2014-12-23 17:36:43 25470 13

原创 最简单的视频编码器:基于libx264(编码YUV为H.264)

本文记录一个最简单的基于libx264的H.264视频编码器。此前记录的H.264编码器都是基于FFmpeg调用libx264完成编码的,例如: 《最简单的基于FFMPEG的视频编码器(YUV编码为H.264)》相比与上文中的编码器,本文记录的编码器属于“轻量级”的编码器。因为它不再包含FFmpeg的代码,直接调用libx264完成编码。因此项目的体积非常小巧。该编码器可以将输入的YUV数据编码为

2014-12-23 00:18:18 48212 57

最简单的基于FFmpeg的内存读写的例子 1.1

本程序实现了FFmpeg对内存中的视频数据的读写。包含两个工程: simplest_ffmpeg_mem_player:播放内存中视频数据的播放器。 simplest_ffmpeg_mem_transcoder:转码内存中数据的转码器。 1.1版本增加了多平台下编译的支持:Windows,MacOS,以及Linux。

2015-02-13

最简单的基于FFMPEG的AVDevice的例子 1.2

FFMPEG工程浩大,可以参考的书籍又不是很多,因此很多刚学习FFMPEG的人常常感觉到无从下手。因此做了一个FFmpeg中的libavdevice类库的使用例子。 本工程包含两个基于FFmpeg的libavdevice的例子: simplest_ffmpeg_grabdesktop:屏幕录制。 simplest_ffmpeg_readcamera:读取摄像头。 1.2版本增加了多平台下编译的支持:Windows,MacOS,以及Linux。

2015-02-13

最简单的基于FFmpeg的libswscale的教程 1.1

本教程是最简单的基于FFmpeg的libswscale进行像素处理的教程。它包含了两个工程: simplest_ffmpeg_swscale: 最简单的libswscale的教程(YUV420P转RGB24)。 simplest_pic_gen: 生成各种测试图片的工具。 1.1版本增加了多平台下编译的支持:Windows,MacOS,以及Linux。

2015-02-13

最简单的基于FFmpeg的AVFilter例子(叠加水印) 1.1

本程序使用FFmpeg的AVfilter实现了视频的水印叠加功能。可以将一张PNG图片作为水印叠加到视频上。 是最简单的FFmpeg的AVFilter方面的教程。适合FFmpeg的初学者。 1.1版本增加了多平台下编译的支持:Windows,MacOS,以及Linux。

2015-02-13

最简单的基于FFmpeg的推流器(以推送RTMP为例) 1.1

本例子实现了推送本地视频至流媒体服务器(以RTMP为例)。是使用FFmpeg进行流媒体推送最简单的教程。 1.1版本增加了多平台下编译的支持:Windows,MacOS,以及Linux。

2015-02-13

最简单的基于FFmpeg的封装格式处理 1.2

该解决方案包含了使用FFmpeg进行封装格式处理的各种例子: simplest ffmpeg demuxer:视音频分离器 simplest ffmpeg demuxer simple:视音频分离器(简化版) simplest ffmpeg muxer:视音频复用器 simplest ffmpeg remuxer:封装格式转换器 1.2版本增加了多平台下编译的支持:Windows,MacOS,以及Linux。

2015-02-13

最简单的基于FFMPEG的音频编码器 1.1

该音频编码器实现了音频PCM采样数据编码为AAC码流。 尽管该音频编码器的代码十分简单,但是几乎包含了使用FFMPEG编码一个音频所有必备的API。十分适合FFmpeg的初学者。 1.1版本增加了多平台下编译的支持:Windows,MacOS,以及Linux。

2015-02-13

最简单的基于FFmpeg的编码器 1.2

本程序实现了YUV像素数据编码为视频码流(H.265,H264,MPEG2,VP8等等)。是最简单的FFmpeg视频编码方面的教程。它包含以下两个子项目: simplest_ffmpeg_video_encoder:最简单的基于FFmpeg的视频编码器。使用libavcodec和libavformat编码并且封装视频。 simplest_ffmpeg_video_encoder_pure:最简单的基于FFmpeg的视频编码器-纯净版。仅使用libavcodec编码视频,不使用libavformat。 1.2版本增加了多平台下编译的支持:Windows,MacOS,以及Linux。

2015-02-13

最简单的基于FFmpeg的图像编码器 1.1

该图像编码器实现了YUV420P的数据编码为JPEG图片。尽管该图像编码器的代码十分简单,但是几乎包含了使用FFMPEG编码一个图像所有必备的API。十分适合FFmpeg的初学者。 1.1版本增加了多平台下编译的支持:Windows,MacOS,以及Linux。

2015-02-13

最简单的基于FFMPEG+SDL的音频播放器 2.1

本程序实现了音频的解码和播放。是最简单的FFmpeg音频解码方面的教程。通过学习本例子可以了解FFmpeg的解码流程。该版本使用SDL 2.0替换了第一个版本中的SDL 1.0。 2.1版本增加了多平台下编译的支持:Windows,MacOS,以及Linux。

2015-02-13

最简单的基于DirectShow的示例

本程序包含了DirectShow开发的示例程序。适合DirectShow初学者进行学习。 它包含了以下几个子程序: simplest_directshow_player: 最简单的基于DirectShow的视频播放器。 simplest_directshow_player_custom: 最简单的基于DirectShow的视频播放器(Custom)。 playerGUI: 最简单的基于DirectShow的播放器-图形界面版。 simplest_directshow_info: 最简单的Directshow信息显示例子。 simplest_directshow_filter: 目前还未完成。

2015-01-10

最简单的基于FFMPEG的AVDevice的例子 1.1

本工程包含两个基于FFmpeg的libavdevice的例子: simplest_ffmpeg_grabdesktop:屏幕录制。 simplest_ffmpeg_readcamera:读取摄像头。 工程基于VC2010,配置都已经做好,可以直接运行查看结果。 1.1版更新: 弹出的窗口可以移动了。

2015-01-09

最简单的基于libVLC的例子

本工程是包含了一些基于libVLC的示例程序。一共包含了如下几个子程序。 playerGUI: 最简单的基于libVLC的播放器-图形界面版。 simplest_libvlc_example: 最简单的基于libVLC的播放器。 simplest_libvlc_streamer: 最简单的基于libVLC的推流器。

2015-01-08

最简单的基于FFMPEG+SDL的视频播放器 2.3

本程序实现了视频文件的解码和显示(支持HEVC,H.264,MPEG2等)。 是最简单的FFmpeg视频解码方面的教程。 通过学习本例子可以了解FFmpeg的解码流程。 项目包含3个工程: simplest_ffmpeg_player:标准版,FFmpeg学习的开始。 simplest_ffmpeg_player_su:SU(SDL Update)版,加入了简单的SDL的Event。 simplest_ffmpeg_decoder_pure:一个纯净的解码器。 2.3版加入simplest_ffmpeg_decoder_pure工程。

2015-01-03

最简单的基于FFmpeg的编码器 1.1

本程序实现了YUV像素数据编码为视频码流(H.265,H264,MPEG2,VP8等等)。 是最简单的FFmpeg视频编码方面的教程。 它包含以下两个子项目: simplest_ffmpeg_video_encoder:最简单的基于FFmpeg的视频编码器。使用libavcodec和libavformat编码并且封装视频。 simplest_ffmpeg_video_encoder_pure:最简单的基于FFmpeg的视频编码器-纯净版。仅使用libavcodec编码视频,不使用libavformat。

2015-01-03

最简单的基于FFmpeg的libswscale的教程

本教程是最简单的基于FFmpeg的libswscale进行像素处理的教程。它包含了两个工程: simplest_ffmpeg_swscale: 最简单的libswscale的教程。 simplest_pic_gen: 生成各种测试图片的工具。

2014-12-23

最简单的基于libRTMP的示例

本工程包含了LibRTMP的使用示例,包含如下子工程: simplest_librtmp_receive: 接收RTMP流媒体并在本地保存成FLV格式的文件。 simplest_librtmp_send_flv: 将FLV格式的视音频文件使用RTMP推送至RTMP流媒体服务器。 simplest_librtmp_send264: 将内存中的H.264数据推送至RTMP流媒体服务器。

2014-12-23

最简单的基于FFmpeg的封装格式处理的例子 1.1

该解决方案包含了使用FFmpeg进行封装格式处理的各种例子: simplest ffmpeg demuxer:视音频分离器 simplest ffmpeg demuxer simple:视音频分离器(简化版) simplest ffmpeg muxer:视音频复用器 simplest ffmpeg remuxer:封装格式转换器 1 1版修复了以下问题: 1 Release版本下的运行问题 2 simplest ffmpeg muxer分装H 264裸流的时候丢失声音的错误">该解决方案包含了使用FFmpeg进行封装格式处理的各种例子: simplest ffmpeg demuxer:视音频分离器 simplest ffmpeg demuxer simple:视音频分离器(简化版) simplest ffmpeg muxer:视音频复用器 simplest ffmpeg remuxer:封装格式转换器 1 1 [更多]

2014-12-21

最简单的视音频播放示例 1.1

本工程包含了使用各种API(Direct3D,OpenGL,GDI,DirectSound,SDL2)播放多媒体例子。 其中音频输入为PCM采样数据。输出至系统的声卡播放出来。 视频输入为YUV/RGB像素数据。输出至显示器上的一个窗口播放出来。 通过本工程的代码初学者可以快速学习使用这几个API播放视频和音频的技术。 一共包括了如下几个子工程: simplest_audio_play_directsound: 使用DirectSound播放PCM音频采样数据。 simplest_audio_play_sdl2: 使用SDL2播放PCM音频采样数据。 simplest_video_play_direct3d: 使用Direct3D的Surface播放RGB/YUV视频像素数据。 simplest_video_play_direct3d_texture:使用Direct3D的Texture播放RGB视频像素数据。 simplest_video_play_gdi: 使用GDI播放RGB/YUV视频像素数据。 simplest_video_play_opengl: 使用OpenGL播放RGB/YUV视频像素数据。 simplest_video_play_opengl_texture: 使用OpenGL的Texture播放YUV视频像素数据。 simplest_video_play_sdl2: 使用SDL2播放RGB/YUV视频像素数据。 1.1版修复了一些问题

2014-12-21

最简单的视频编码器示例

该解决方案包含了几个常见的编码器的使用示例: simplest_vpx_encoder:最简单的基于libvpx的视频编码器 simplest_x264_encoder:最简单的基于libx264的视频编码器 simplest_x265_encoder:最简单的基于libx265的视频编码器

2014-12-21

最简单的视音频播放示例

本工程包含了使用各种API(Direct3D,OpenGL,GDI,DirectSound,SDL2)播放多媒体例子。 其中音频输入为PCM采样数据。输出至系统的声卡播放出来。 视频输入为YUV/RGB像素数据。输出至显示器上的一个窗口播放出来。 通过本工程的代码初学者可以快速学习使用这几个API播放视频和音频的技术。 一共包括了如下几个子工程: simplest_audio_play_directsound: 使用DirectSound播放PCM音频采样数据。 simplest_audio_play_sdl2: 使用SDL2播放PCM音频采样数据。 simplest_video_play_direct3d: 使用Direct3D的Surface播放RGB/YUV视频像素数据。 simplest_video_play_direct3d_texture:使用Direct3D的Texture播放RGB视频像素数据。 simplest_video_play_gdi: 使用GDI播放RGB/YUV视频像素数据。 simplest_video_play_opengl: 使用OpenGL播放RGB/YUV视频像素数据。 simplest_video_play_opengl_texture: 使用OpenGL的Texture播放YUV视频像素数据。 simplest_video_play_sdl2: 使用SDL2播放RGB/YUV视频像素数据。

2014-10-18

最简单的基于FFmpeg的封装格式处理的例子

该解决方案包含了使用FFmpeg进行封装格式处理的各种例子: simplest_ffmpeg_demuxer:视音频分离器。 simplest_ffmpeg_demuxer_simple:视音频分离器(简化版)。 simplest_ffmpeg_muxer:视音频复用器。 simplest_ffmpeg_remuxer:封装格式转换器。

2014-10-06

最简单的基于FFmpeg的推流器(以推送RTMP为例)

本例子实现了推送本地视频至流媒体服务器(以RTMP为例)。 是使用FFmpeg进行流媒体推送最简单的教程。

2014-10-06

最简单的基于FFmpeg的内存读写的例子

本程序实现了FFmpeg对内存中的视频数据的读写。包含两个工程: simplest_ffmpeg_mem_player:播放内存中视频数据的播放器。 simplest_ffmpeg_mem_transcoder:转码内存中数据的转码器。

2014-10-05

最简单的基于FFMPEG+SDL的视频播放器 2.2

本程序实现了视频文件的解码和显示(支持HEVC,H.264,MPEG2等)。 是最简单的FFmpeg视频解码方面的教程。 通过学习本例子可以了解FFmpeg的解码流程。 项目包含两个工程: simplest_ffmpeg_player:标准版,FFmpeg学习的开始。 simplest_ffmpeg_player_su:SU(SDL Update)版,加入了简单的SDL的Event。 工程采用了VC2010,FFmpeg使用了较新的类库,SDL使用了2.0版本。 这是更新的2.2版本。增加了“flush_decoder”功能,用于在解码循环结束后,输出解码器中剩余的几帧数据。

2014-10-04

最简单的基于FFmpeg的AVFilter例子 1.2

本程序使用包含下面两个项目: simplest_ffmpeg_video_filter:可以将一张PNG图片作为水印叠加到视频上,结合使用了libavfilter,libavcodec等类库。 simplest_ffmpeg_video_filter_pure:可以给YUV像素数据加特效,只用了libavfilter库。

2016-02-01

视音频数据处理入门

本项目包含如下几种视音频数据解析示例: (1)像素数据处理程序。包含RGB和YUV像素格式处理的函数。 (2)音频采样数据处理程序。包含PCM音频采样格式处理的函数。 (3)H.264码流分析程序。可以分离并解析NALU。 (4)AAC码流分析程序。可以分离并解析ADTS帧。 (5)FLV封装格式分析程序。可以将FLV中的MP3音频码流分离出来。 (6)UDP-RTP协议分析程序。可以将分析UDP/RTP/MPEG-TS数据包。

2016-01-29

YUV Player

自己修改过的YUV播放器,支持RGB、YUV等格式的播放。

2016-01-06

传媒大学广播电视工程系小学期课程 - 基于FFmpeg+SDL的视频播放器的制作

传媒大学广播电视工程系小学期课程《基于FFmpeg+SDL 的视频播放器的制作》的资料。包括: PPT-PDF:课程的PPT 工具:视音频处理软件以及测试视频 代码:课程中的代码 其它文档:一些参考资料

2015-07-26

最简单的基于FFmpeg的移动端例子

本解决方案包含了使用FFmpeg在移动端处理多媒体的各种例子: [Android] simplest_android_player: 基于安卓接口的视频播放器 simplest_ffmpeg_android_helloworld: 安卓平台下基于FFmpeg的HelloWorld程序 simplest_ffmpeg_android_decoder: 安卓平台下最简单的基于FFmpeg的视频解码器 simplest_ffmpeg_android_decoder_onelib: 安卓平台下最简单的基于FFmpeg的视频解码器-单库版 simplest_ffmpeg_android_streamer: 安卓平台下最简单的基于FFmpeg的推流器 simplest_ffmpeg_android_transcoder: 安卓平台下移植的FFmpeg命令行工具 simplest_sdl_android_helloworld: 移植SDL到安卓平台的最简单程序 [IOS] simplest_ios_player: 基于IOS接口的视频播放器 simplest_ffmpeg_ios_helloworld: IOS平台下基于FFmpeg的HelloWorld程序 simplest_ffmpeg_ios_decoder: IOS平台下最简单的基于FFmpeg的视频解码器 simplest_ffmpeg_ios_streamer: IOS平台下最简单的基于FFmpeg的推流器 simplest_ffmpeg_ios_transcoder: IOS平台下移植的ffmpeg.c命令行工具 simplest_sdl_ios_helloworld: 移植SDL到IOS平台的最简单程序

2015-07-22

最简单的基于FFmpeg的推流器 1.2

本例子实现了推送本地视频至流媒体服务器(以RTMP为例)。 是使用FFmpeg进行流媒体推送最简单的教程。 解决方案包含2个项目: simplest_ffmpeg_streamer: 将本地视频文件推送至流媒体服务器。 simplest_ffmpeg_receiver: 将流媒体数据保存成本地文件。

2015-07-22

最简单的基于FFMPEG+SDL的音频播放器 2.2

本程序实现了音频的解码和播放。是最简单的FFmpeg音频解码方面的教程。 通过学习本例子可以了解FFmpeg的解码流程。 项目包含3个工程: simplest_ffmpeg_audio_player:基于FFmpeg+SDL的音频解码器 simplest_ffmpeg_audio_decoder:音频解码器。使用了libavcodec和libavformat。 simplest_audio_play_sdl2:使用SDL2播放PCM采样数据的例子。

2015-07-22

最简单的基于FFMPEG+SDL的视频播放器 2.5

本程序实现了视频文件的解码和显示(支持HEVC,H.264,MPEG2等)。 是最简单的FFmpeg视频解码方面的教程。 通过学习本例子可以了解FFmpeg的解码流程。 项目包含6个工程: simplest_ffmpeg_player:标准版,FFmpeg学习的开始。 simplest_ffmpeg_player_su:SU(SDL Update)版,加入了简单的SDL的Event。 simplest_ffmpeg_decoder:一个包含了封装格式处理功能的解码器。使用了libavcodec和libavformat。 simplest_ffmpeg_decoder_pure:一个纯净的解码器。只使用libavcodec(没有使用libavformat)。 simplest_video_play_sdl2:使用SDL2播放YUV的例子。 simplest_ffmpeg_helloworld:输出FFmpeg类库的信息。

2015-07-22

最简单的基于FFmpeg的AVUtil例子 (AVLog, AVOption等)

本程序是FFmpeg中的libavutil的示例,目前包含: AVLog AVOption (AVClass) AVDictionary ParseUtil

2015-07-22

TIandSI 3.0 windows

本工具用于计算视频的时间信息(TI,也称为时间复杂度),以及空间 信息(SI,也称为空间复杂度),以上两个指标取自于ITU-R BT.1788标准。 该项目包含了4个工程: TIandSI : 计算YUV数据的TI和SI-图形界面版。 TIandSIcmd : 计算YUV数据的TI和SI-命令行版。 TIandSIpro : 计算压缩码流数据的TI和SI-图形界面版。 TIandSIprocmd : 计算压缩码流数据的TI和SI-命令行版。

2015-05-30

TIandSI 3.0

本工具用于计算视频的时间信息(TI,也称为时间复杂度),以及空间 信息(SI,也称为空间复杂度),以上两个指标取自于ITU-R BT.1788标准。 该项目包含了4个工程: TIandSI : 计算YUV数据的TI和SI-图形界面版。 TIandSIcmd : 计算YUV数据的TI和SI-命令行版。 TIandSIpro : 计算压缩码流数据的TI和SI-图形界面版。 TIandSIprocmd : 计算压缩码流数据的TI和SI-命令行版。

2015-05-30

最简单的Flash流媒体例子

本工程包含如下基于Flash技术的流媒体的例子: simplest_as3_rtmp_player:最简单的RTMP播放器(基于ActionScript) simplest_as3_rtmp_streamer:最简单的RTMP推流器(基于ActionScript) rtmp_sample_player_adobe:从Adobe Flash Media Sever提取出来的测试播放器 rtmp_sample_player_wowza:从Wowza服务器中提取出来的测试播放器 rtmp_sample_player_flowplayer:基于FlowPlayer的RTMP/HTTP播放器(添加RTMP plugin) rtmp_sample_player_videojs:基于VideoJS的RTMP/HTTP播放器 rtmp_sample_player_jwplayer:基于JWplayer的RTMP/HTTP播放器 hls_sample_player_flowplayer:基于FlowPlayer的HLS播放器(添加HLS plugin) hls_video_player_html5:基于HTML5的HLS/HTTP播放器 activex_vlc_player:基于VLC的ActiveX控件的播放器 注意:某些播放器直接打开html页面是不能工作的,需要把播放器放到Web服务器上。 (例如Apache或者Nginx)

2015-02-25

QAM调制与解调仿真程序

一个仿真DVB-C(Cable,数字有线电视)系统中QAM调制和解调的程序。在这个程序中,每执行一步操作,都会画出时域信号图和频域信号图,同时会在控制台打印出有关变量的取值,对于理解QAM调制与解调有一定的帮助。

2015-02-21

最简单的基于FFMPEG+SDL的视频播放器 2.4

本程序实现了视频文件的解码和显示(支持HEVC,H.264,MPEG2等)。是最简单的FFmpeg视频解码方面的教程。通过学习本例子可以了解FFmpeg的解码流程。 项目包含3个工程: simplest_ffmpeg_player:标准版,FFmpeg学习的开始。 simplest_ffmpeg_player_su:SU(SDL Update)版,加入了简单的SDL的Event。 simplest_ffmpeg_decoder_pure:一个纯净的解码器。 2.4版本增加了多平台下编译的支持:Windows,MacOS,以及Linux

2015-02-13

最简单的基于FFMPEG+SDL的视频播放器-最终版

本程序实现了视频文件的解码和显示(支持HEVC,H.264,MPEG2等)。是最简单的FFmpeg视频解码方面的教程。通过学习本例子可以了解FFmpeg的解码流程。 项目包含两个工程: simplest_ffmpeg_player:标准版,FFmpeg学习的开始。 simplest_ffmpeg_player_su:SU(SDL Update)版,加入了简单的SDL的Event。 这显示该程序的最终版,除了支持VC2010之外,也支持如下几种编译方式: cl.exe命令行编译; mingw编译; gcc编译; gcc(MacOS)编译; 此外修复了个别操作系统(例如Ubuntu)中绿屏的问题。

2015-02-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除