FLV视频格式解码软件开发

简介:                          (  作者:孙德生           深大硕士研究生  ) FLV流媒体格式是一种新的视频格式,全称为Flash Video。
 
                       (  作者:孙德生           深大硕士研究生  )
FLV 流媒体格式是一种新的视频格式,全称为 Flash Video Flash MX 2004 对其提供了完美的支持,它的出现有效地解决了视频文件导入 Flash 后,使导出的 SWF 文件体积庞大,不能在网络上很好的使用等缺点。 FLV Macromedia  公司开发的属于自己流式视频格式。这种格式是在 sorenson  公司的压缩算法的基础上开发出来的 [20] FLV 压缩与转换非常方便 , 适合做短片。一般 FLV 包在 SWF PLAYER 的壳里 , 并且 FLV 可以很好的保护原始地址 , 不容易下载到起到保护版权的目的。
Macromedia 为了尽早用 FLV 格式来垄断 Web Video 应用,取代 RM 在线视频播放的霸主地位,在 FlashMX2004 中匆匆增加了一个 Video 类,短短两三年的时间, FLV 就成为了目前最主流的在线视频播放格式,随着被新一代的视频播客网站广泛采用,自从 youtube 火了以后, flv 格式也开始火暴,目前国内视频分享网站 , 比如六间房 5Show 56 、优酷等都使用 flv 了这个文件技术来实现的。目前 GOOGLE  YOUTUBE 采用 FLV SOUV.NET 集合全亚洲最多的 FLV ,以及 百度、新浪、腾讯、猫扑、 Maxthon 、雅虎等国际国内著名互联网公司的相继投入与看好,以及国际资本大量进入视频播客领域, FLV 格式被极大的推广,甚至新浪在自己的 BBS 也开通了 FLV 影片上传播放服务 [21]
5.5.1 FLVRMVB对比
我们都知道一般的视频文件,要不就是 asf 格式、 wmv 格式使用 mediaplayer 进行播放,要不就是 rm 格式用 RealPlayer 播放。这样的问题是,格式的不同就需要选择不同的播放器,这对于本地计算机没有安装相应播放器的用户来说,这些视频根本无法收看。并且,还由于这些文件的容量过大,下载慢,查看也不很流畅。所以,解决播放器和容量的问题,运用 Flash 有个方法:将各类视频文件转换成 Flash 视频文件。容量方面,从 FlashMX2004Pro 起就支持了转换为 Flash 视频的功能,经过相关设置后,可缩小原有视频的容量,最终转换的文件扩展名是 FLV
下面就把 RMVB FLV 这两种主流视频文件格式简单对比分析如表 5-5 。对于两种格式,谁更出色,而另一个主要方面就是哪种格式更适合便携式产品采用。
表5-5 RMVB和FLV两种视频文件比较分析
 
RMVB 格式
FLV 格式
分辨率
700-800 * 272-350 )之间
一般播课网影片分辨率为 320*240
帧速度
24 25FPS
20FPS 左右
文件体积
5M / 分钟,一个影片文件体积在 400-700M 之间
1.5M / 分钟,一个影片体积在 200M 左右
视频主要类型
电影 / 电视剧(动漫) / 综艺节目为主
电影、电视剧(动漫)、游戏、新闻、体育视频录象、综艺节目视频、网友自拍影片、视频等
下载行为
BT 网站论坛检索,获得影视下载信息,使得 P2P 模式 BT 软件下载
WEB2.0 播客获得,可使用多 FLV 下载软件
  我们可以看到目前 RMVB 影片的最大优势是分辨率更高,在电脑上实际播放效果更出色,视频影片多为长片,文件体积较大,需要通过 BT 或者电驴软件下载。 FLV 的最大优势是资源类型丰富与文件体积较小,由于分辨率低,在电脑上播放画面质量不如 RMVB 。但是在 PMP 上取决于 LCD 屏的分辨率,因为 PMP 产品的 LCD 屏不可能很大,所以在这方面 FLV 格式的优势还是有很大优势的。
由于网络播客网站越来越受消费者欢迎, FLV 视频已经已经无限量,比 RMVB 更丰富、种类更多的 FLV 视频资源可直接下载到 PMP 中播放。
5.5.2FLV解码软件开发
FLV 解码软件开发的开发,在本课题中是利用的 FFmpeg 为基础的。 FFmpeg 是一个集录制、转换、音 / 视频编码解码功能为一体的完整的开源解决方案 [23] FFmpeg 的开发是基于 Linux 操作系统,但是可以在大多数操作系统中编译和使用。 FFmpeg 支持 MPEG DivX MPEG4 AC3 DV FLV 40 多种编码, AVI MPEG OGG Matroska ASF 90 多种解码。 TCPMP, VLC, MPlayer 等开源播放器都用到了 FFmpeg [24] FFmpeg 主目录下主要有 libavcodec libavformat libavutil 等子目录。其中 libavcodec 用于存放各个 encode/decode 模块, libavformat 用于存放 muxer/demuxer 模块, libavutil 用于存放内存操作等常用模块。
flash movie flv 文件格式为例, muxer/demuxer flvenc.c flvdec.c 文件在 libavformat 目录下, encode/decode mpegvideo.c h263de.c libavcodec 目录下。
FLV 视频文件格式实际上并没有明确指出应该使用哪种编码来解析音频和视频数据;它们只是定义了音频流和视频流(或者,有可能是多个音频视频流)如何被绑定在一个文件里面。这就是为什么有时候,当你打开了一个 FLV 文件时,你只能听到声音,却不能看到图象--因为没有合适的视频解码器。所以, libavformat 用来处理解析视频文件并将包含在其中的流分离出来,而 libavcodec 则处理原始音频和视频流的解码。
解码处理流程:
1、   通过函数 flvdec_init(void) 注册初始化编码器,通过 REGISTER_MUXDEMUX(FLV, flv) 完成对 FLV 格式的注册,内含音频视频编解码的初始化 ;
2、   打开视频文件,通过 av_open_input_file(&pFormatCtx, filename, NULL, 0, NULL) 实现,
通过 av_find_stream_info(pFormatCtx) dump_format(pFormatCtx, 0, filename, false) 分析文件数据包编码格式,再把 pFormatCtx 的流域填满;
3 、通过 avcodec_find_decoder(pCodecCtx->codec_id) 找到相应的解码器,
 4
、打开解码器,通过函数 (avcodec_open(pCodecCtx, pCodec)
5 、视频数据解码通过 avcodec_decode_video(pCodecCtx, pFrame, &frameFinished, rawData, bytesRemaining) 解析视频数据包,得到视频帧, GetNextFrame(AVFormatContext *pFormatCtx, AVCodecContext *pCodecCtx, int videoStream, AVFrame *pFrame ) ;视频编码格式为 FLV1
6 、音频数据包通过 avcodec_decode_audio ()解码,得到的数据存入 buffer 中,根据时间戳来实现音视频的同步;音频编码格式有 PCM ADPCM MP3
7 、释放解码器,关闭解码器( codec ), avcodec_close(pCodecCtx); 关闭视频文件 av_close_input_file(pFormatCtx);
表5-6 FLV解码软件中部分重要处理函数接口
函数接口
作用
flv_probe()
探测文件是否为 FLV 文件
flv_read_packet ( )
读入数据包,分析数据包
flv_read_close( )
关闭读操作
flv_read_header ()
读入头数据
av_register_input_format()
初始化输入格式
5.5.3 FLV开发体会                                           
在开发中,是利用的基础的 FFMPEG 开源的开发包,在其中提取 FLV 相关代码进行开发实践,得到最后的解码软件,对于解码代码的编写都是利用开发包里面的,主要工作还是在于移植到本课题的开发平台。因为本课题用的硬件系统的局限性,以及 FFMPEG 开发包本来也是没有经过严格测试的,最后得到的解码软件在机子上播放,会有卡机现象,不是很流畅。
为了开发出质量更高,符合市场需求的 FLV 解码软件,除了通过购买编解码库,就只能通过一些开源的包再做深入的开发,得到需要的解码软件产品。
目录
相关文章
|
11月前
|
存储 人工智能 Serverless
智能理解 PPT 内容,快速生成讲解视频
本方案利用函数计算 FC 部署 Web 应用,调用百炼模型服务实现 PPT 到视频的自动转换。视觉模型智能理解 PPT 图文内容,快速生成相匹配的解说词;文本模型对解说词进行优化,提高其可读性和吸引力;语音模型则根据解说词生成生动流畅的旁白音频。整个过程高度集成,只需一键操作,系统即可自动整合图片、文本和音频素材,快速生成对应讲解视频。
1040 17
|
11月前
|
机器学习/深度学习 人工智能 编解码
《AI助力图形渲染:抗锯齿性能的飞跃之路》
在图形渲染领域,锯齿问题一直影响视觉效果。AI技术通过多种方法提升抗锯齿性能:1) 基于深度学习的超分辨率算法,如NVIDIA DLSS,提升图像分辨率和平滑边缘;2) 多帧分析与合成技术,融合多帧信息减少锯齿;3) AI材质与光照模拟,精准计算反射和折射;4) 场景理解与自适应采样,智能调整采样点;5) 强化学习优化渲染策略。这些创新方法将显著改善图形渲染质量,带来更逼真的视觉体验。
372 5
|
11月前
|
存储 JSON 区块链
【HarmonyOS NEXT开发——ArkTS语言】购物商城的实现【合集】
HarmonyOS应用开发使用@Component装饰器将Home结构体标记为一个组件,意味着它可以在界面构建中被当作一个独立的UI单元来使用,并且按照其内部定义的build方法来渲染具体的界面内容。txt:string定义了一个名为Data的接口,用于规范表示产品数据的结构。src:类型为,推测是用于引用资源(可能是图片资源等)的一种特定类型,用于指定产品对应的图片资源。txt:字符串类型,用于存放产品的文字描述,比如产品名称等相关信息。price:数值类型,用于表示产品的价格信息。
562 5
|
12月前
|
机器学习/深度学习 Rust 算法
Python环境管理的新选择:UV和Pixi,高性能Python环境管理方案
近期Python生态系统在包管理领域发生了重要变化,Anaconda调整商业许可证政策,促使社区寻找更开放的解决方案。本文介绍两款新一代Python包管理工具:UV和Pixi。UV用Rust编写,提供高性能依赖解析和项目级环境管理;Pixi基于Conda生态系统,支持conda-forge和PyPI包管理。两者分别适用于高性能需求和深度学习项目,为开发者提供了更多选择。
2659 2
|
机器学习/深度学习
python-随机森林后筛选最重要变量,模型准确率、随机森林混淆矩阵结果、基尼系数排序图
python-随机森林后筛选最重要变量,模型准确率、随机森林混淆矩阵结果、基尼系数排序图
|
编解码 监控 网络协议
如何使用FFmpeg实现RTSP推送H.264和H.265(HEVC)编码视频
本文详细介绍了如何使用FFmpeg实现RTSP推送H.264和H.265(HEVC)编码视频。内容涵盖环境搭建、编码配置、服务器端与客户端实现等方面,适合视频监控系统和直播平台等应用场景。通过具体命令和示例代码,帮助读者快速上手并实现目标。
3395 6
|
关系型数据库 数据库 PostgreSQL
在 Postgres 中使用约束
【8月更文挑战第11天】
320 0
|
安全 NoSQL Redis
服务器又被攻击了,我这样做...
近期遭遇阿里云服务器频繁报警,经分析发现是由于测试服务器所有端口对公网开放,导致自动化程序对其扫描。黑客可能利用类似Redis的未授权访问漏洞进行攻击。为避免此类问题,建议:1. 不开放不必要的端口;2. 避免以root权限运行服务;3. 设置服务器IP白名单;4. 定期更换密码。保持良好安全习惯可保障服务器安全。
4143 4
服务器又被攻击了,我这样做...
|
数据采集 算法 编译器
倚天710规模化应用 - 性能优化 -自动反馈优化分析与实践
编译器优化分成静态优化与动态优化,静态优化指传统编译器gcc/llvm时,增加的优化等级,如O1,O2,O3,Ofast,此时,编译器会依据编译优化等级增加一些优化算法,如函数inline、循环展开以及分支静态预测等等。一般情况下,优化等级越高,编译器做的优化越多,性能会更会好。在阿里生产环境中,单纯依赖于静态优化,并不能达到程序运行流畅目的,通过分析CPU硬件取指令、执行指令,往往会出现一些分支预测失败导致iCacheMiss率高的场景,限制了程序的性能进一步提升。基于此,业务引入了动态反馈优化工具,依据生产环境的实际运行数据,反哺指导编译器对程序代码进一步调整编译优化策略,提高分支预准确率