当前位置: 首页 > news >正文

网站的营销与推广建站是什么东西

网站的营销与推广,建站是什么东西,禅城区电话黄页,如何找专业的网站建设公司音视频面试题集锦第 26 期: 1、FFmpeg 中 avformat_open_input() 经历了什么步骤?2、FFmpeg 编码的流程是什么?3、PCM 数据操作的最小单元是多少字节?4、iOS 音频帧 CMSampleBufferRef 中的 kCMFormatDescriptionExtension_Verba…

音视频面试题集锦第 26 期:

  • 1、FFmpeg 中 avformat_open_input() 经历了什么步骤?
  • 2、FFmpeg 编码的流程是什么?
  • 3、PCM 数据操作的最小单元是多少字节?
  • 4、iOS 音频帧 CMSampleBufferRef 中的 kCMFormatDescriptionExtension_VerbatimISOSampleEntry 保存哪些信息,是否可以去掉?

图文完整版请阅读:https://gjzkeyframe.github.io/posts/av-interview-qa-26/


想要学习和提升音视频技术的朋友,快来加入我们的【音视频技术社群】,加入后你就能:

  • 1)下载 30+ 个开箱即用的「音视频及渲染 Demo 源代码」
  • 2)下载包含 500+ 知识条目的完整版「音视频知识图谱」
  • 3)下载包含 200+ 题目的完整版「音视频面试题集锦」
  • 4)技术和职业发展咨询 100% 得到回答
  • 5)获得简历优化建议和大厂内推

现在加入,送你一张 20 元优惠券:点击领取优惠券


1、FFmpeg 中 avformat_open_input() 经历了什么步骤?

avformat_open_input() 用于打开输入媒体流与读取头部信息,包括本地文件、网络流、自定义缓冲区。关键流程:打开avio、探测输入流的封装格式。对应的释放方法为 avformat_close_input()avformat_open_input() 的流程如下:

  • 打开输入媒体流avformat_open_input 方法位于 libavformat/utils.c,打开输入媒体流的流程包括:分配 AVFormatContext、设置 options、初始化输入流、拷贝白名单与黑名单协议、读取 ID3V2 参数。
  • 初始化输入媒体流:核心方法是 init_input(),用于打开输入媒体流、探测封装格式。
  • 探测输入格式,根据当前参数进行打分,最终根据分数最高的那个配置作为最终格式:分为三步:read_probeav_match_extav_match_name;每一步匹配结果有个 score 得分,取最高分数的作为 format;每步匹配有不同的分数,最高分数为 100,retry 为 25,extension 为 50,mimetype 为 75。
  • 打开 avioavio_open2 方法会打开 ffurl_open_whitelist()fifo_fdopen()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
avformat_open_input 流程

图文完整版请阅读:https://gjzkeyframe.github.io/posts/av-interview-qa-26/

2、FFmpeg 编码的流程是什么?

FFmpeg 编码的流程如图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
FFmpeg 编码的流程

图文完整版请阅读:https://gjzkeyframe.github.io/posts/av-interview-qa-26/

  • av_register_all():注册 FFmpeg 所有编解码器。
  • avformat_alloc_context():初始化输出码流的 AVFormatContext。
  • avio_open():打开输出文件。
  • av_new_stream():创建输出码流的 AVStream。
  • avcodec_find_encoder():查找编码器。
  • avcodec_open2():打开编码器。
  • avformat_write_header():写文件头(对于某些没有文件头的封装格式,不需要此函数,比如 MPEG2TS)。
  • avcodec_send_frame():编码核心接口新接口,发送一帧视频给编码器。即是 AVFrame(存储YUV像素数据)。
  • avcodec_receive_packet():编码核心接口新接口,接收编码器编码后的一帧视频,AVPacket(存储 H.264 等格式的码流数据)。
  • av_write_frame():将编码后的视频码流写入文件。
  • flush_encoder():输入的像素数据读取完成后调用此函数。用于输出编码器中剩余的 AVPacket。
  • av_write_trailer():写文件尾(对于某些没有文件头的封装格式,不需要此函数,比如 MPEG2TS)。

3、PCM 数据操作的最小单元是多少字节?

音频 PCM 数据,如果要进行编辑,那么其最小操作单元是:声道数 * 位数 / 8 * 1 个采样点

比如:如果 PCM 是双声道、32 位,那么其最小操作单元是:2 * 32 / 8 * 1 = 8 个字节,如果不是按照 8 字节进行操作,一般就会是编辑后的 PCM 数据变成了白噪音。

4、iOS 音频帧 CMSampleBufferRef 中的 kCMFormatDescriptionExtension_VerbatimISOSampleEntry 保存哪些信息,是否可以去掉?

根据 Apple 官方文档:

@abstract	Preserves the original ISOSampleEntry data.
@discussion This extension is used to ensure that roundtrips from ISO Sample Entry (ie. AudioSampleEntry or VisualSampleEntry)
to CMFormatDescriptions back to ISO Sample Entry preserve the exact original sample descriptions.
IMPORTANT: If you make a modified clone of a CMFormatDescription, you must delete this extension from the clone, or your modifications could be lost.

其主要用于对应 AudioSampleEntry,这个是封装协议中的名字,MP4 协议中有此定义:avcC、mp4a Box。具体定义如下:

// BaseBox.h
// ...
// 其他 Box 的定义class AvcBox : public BaseBox {
public:
unsigned char reserver[6] = {0}; // 2 保留位默认 0x00
unsigned short data_reference_ID = 0; // 2 引用参考 Dref Box
unsigned short code_stream_version = 0; // 2 一般都是默认值 0
unsigned char reserver2 [14] = {0};
unsigned short width = 0;
unsigned short heigth = 0;
unsigned int horizontal_resolution = 0; // 4 默认值一般都是 72dpi(前两个字节整数部分,后面两个字节小数部分)
unsigned int vertical_resolution = 0; // 4 默认值一般都是 72dpi(前两个字节整数部分,后面两个字节小数部分)
unsigned int reserver3 = 0;
unsigned short frame_count = 0; // 默认值一般是 0x00 01 每采样点图像的帧数,一般为 1,有些情况下,每个采样点有多帧
Byte compressorname[32] = {0};
unsigned short depth = 0; // 两个字节默认值是 0x00 0x18 即 24
unsigned short reserver4 = 0;AvcBox(BoxHeader h);
AvcBox(BoxHeader h, Timebyte * d): BaseBox(h, d){};
void PrintDataInfo() override;
size_t GetDataOffset() const override {// Data属性大小return 78;
}void AnalyzeBoxHeader(BoxHeader header, size_t offset) override;
};class MP4aBox : public BaseBox {
public:
unsigned char reserver[6] = {0}; // 2 保留位默认 0x00
unsigned short data_reference_ID = 0; // 2 引用参考 Dref Box
unsigned char reserver2 [8] = {0};
unsigned short channelcount = 0;
unsigned short samplesize = 0;
unsigned char reserver3 [4] = {0};
unsigned int samplerate = 0;TimeMP4a(BoxHeader h);
TimeMP4a(BoxHeader h, Timebyte * d): BaseBox(h, d){};
void PrintDataInfo() override;
size_t GetDataOffset() const override {// Data属性大小return 28;
}
void AnalyzeBoxHeader(BoxHeader header, size_t offset) override;
};

可见这里存放的信息是很重要的,是不能随意丢弃的,尤其是在自己实现 ATB 编码,然后 AVAssetWriter 进行 muxer 时,这个信息是必不可少,必要时需要自己去手动创建。

http://www.dtcms.com/a/444750.html

相关文章:

  • 求个网站你懂我的意思2021网站建设制作周期
  • wordpress 音乐网站19楼网站模板
  • 佛山新网站建设怎么样合肥网站制作联系方式
  • 西咸新区规划建设局网站网络推广营销服务
  • 企业怎么在网站上做宣传搭建网站的网站
  • js验证网站广告联盟下载app
  • 成都建设银行网站视觉设计工作室
  • 金华建设监理协会网站网站结构 扁平结构 树状结构
  • 国外建站网址wordpress链接mysql
  • 青岛做个网站多少钱标准网站建设哪家便宜
  • 做中小型网站最好的架构苏州园区房价
  • wordpress 网站维护棋牌软件开发
  • 专利协会网站建设方案涪陵网站设计
  • 英文注册查询网站中国空间雷达卫星
  • 乐山住房和规划建设局门户网站网站开发前端课程
  • 网站开发可退税网站怎么看被百度收录
  • 江苏省住房和城乡建设厅网站首页计算机培训班
  • 移动 开发 网站建设网站建设服务费
  • 资阳建设机械网站wordpress 谷歌分析
  • 本地邵阳网站建设网站托管免费
  • 中国农村建设网站首页自己怎样做广告链接
  • 株洲网站建设优化企业建设网站都需要哪些内容
  • 网站建设主机端口wordpress 给文章添加幻灯
  • 网站做排名2015年网站系统设计
  • 随州网络优化网站建设公司暴雪战网官网
  • 做学校网站需要备案么怎么在网上做广告
  • 洛阳网站建设汉狮怎么样康定网站建设工作室
  • 网站开发公司网站模板建设部设计院网站
  • 贺州住房和城乡建设部网站wordpress 模板 安装
  • 网站开发网站设计案例黄页网站营销