您的位置:首页 > 软件教程 > 教程 > 如何将H.264裸流封装为MP4文件并在网络上传输

如何将H.264裸流封装为MP4文件并在网络上传输

来源:好特整理 | 时间:2024-06-29 15:49:53 | 阅读:87 |  标签: T 2 K PEG 开发 网络   | 分享到:

?《FFmpeg开发实战:从零基础到短视频上线》一书的“3.4.3 把原始的H264文件封装为MP4格式”介绍了如何把H.264裸流封装为MP4文件。那么在网络上传输的H.264裸流是怎样被接收端获取视频格式的呢?前文指出H.264流必定以“SPS帧→PPS帧→IDR帧”开头,接下来就来验证是否确实

《FFmpeg开发实战:从零基础到短视频上线》一书中介绍了如何将H.264裸流封装为MP4文件。但在网络上传输的H.264裸流是如何被接收端获取视频格式的呢?本文将探讨这一问题。

雷霄骅雷神编写的H264分析器是本文使用的工具。该软件的初始界面如下图所示:

如何将H.264裸流封装为MP4文件并在网络上传输

单击文件路径栏右边的打开按钮,在弹出的文件对话框中选择某个H.264裸流文件,再单击界面右下角的开始按钮,分析器便开始分析H264文件的内容格式,分析后的结果界面如下图所示:

如何将H.264裸流封装为MP4文件并在网络上传输

从分析结果可见,H.264裸流的开头三帧果然是“SPS帧→PPS帧→IDR帧”。单击列表中的某个帧,界面右侧会显示该帧的详细字段信息。

然而,分析器只能读取H.264裸流文件。如果让分析器读取MP4文件,就无法正常读出各帧信息。那么流媒体服务器又是如何将MP4文件转化为H.264裸流的呢?

以ZLMediaKit为例,它在向推流序列插入I帧时做了特殊处理,一旦出现I帧,就自动插入SPS与PPS等配置帧。具体代码在ZLMediaKit框架的ext-codec/H264.cpp,查看该源码的H264Track::inputFrame_l函数,找到以下的代码片段,可见程序在判断关键帧之后调用了insertConfigFrame函数。

找到insertConfigFrame函数的定义代码如下,函数内容依次插入了SPS帧和PPS帧:

由此可见,ZLMediaKit在每个关键帧前面都额外插入了SPS帧和PPS帧,确保H.264裸流维持着形如“SPS帧→PPS帧→IDR帧”的队形。如果不添加SPS和PPS,客户端在拉流时会报错。

只有加上SPS与PPS,客户端才能正常拉流解析数据,才能正常渲染视频画面。

更多详细的FFmpeg开发知识参见《FFmpeg开发实战:从零基础到短视频上线》一书。

小编推荐阅读

好特网发布此文仅为传递信息,不代表好特网认同期限观点或证实其描述。

K
K
类型:角色扮演  运营状态:封测  语言:中文   

游戏攻略

游戏礼包

游戏视频

游戏下载

游戏活动

《K》是由乐次元开发的一款日系动漫RPG游戏,游戏根据同名动漫改编而来,高水准的漫画和音乐是这款游戏的

相关视频攻略

更多

扫二维码进入好特网手机版本!

扫二维码进入好特网微信公众号!

本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件[email protected]

湘ICP备2022002427号-10 湘公网安备:43070202000427号© 2013~2024 haote.com 好特网