区块链技术博客
www.b2bchain.cn

WWDC20 10011 – Author fragmented MPEG-4 content with AVAssetWriter求职学习资料

本文介绍了WWDC20 10011 – Author fragmented MPEG-4 content with AVAssetWriter求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

session 概述

Author fragmented MPEG-4 content with AVAssetWriter

将音频和视频内容转换为 fragmented MPEG-4 文件,可以获得更快,更流畅的 HLS 流媒体体验。该 session 讲述了如何使用 fragmented MPEG-4 格式,如何从音视频中获取分段式内容以及如何设置 AVAssetWriter,从而创建用于 HLS 输出的片段。

MPEG-4文件结构

MPEG-4 (简称 MP4 )文件封装格式,对应的标准为 ISO/IEC 14496-12,即 Information technology Coding of audio-visual objects Part 12: ISO base media file format。ISO/IEC 组织指定的标准一般用数字表示,ISO/IEC 14496 即 MPEG-4 标准,被广泛用于封装 h.264 视频和 AAC 音频。

基本单元-Box

MP4 文件中的所有数据都装在 box 中,也就是说 MP4 文件由若干个 box 组成,每个 box 有类型和长度,可以将 box 理解为 MP4 文件的基本单元。box 中可以包含另一个 box,这种 box 称为 container box。box 由 header 和 body 组成,其中 header 统一指明 box 的大小和类型,body 根据类型有不同的意义和格式。下图为常见的 MP4 box 结构图,里面包含了常用的 box:
WWDC20 10011 - Author fragmented MPEG-4 content with AVAssetWriter

  • ftyp: File Type Box,该 box 有且只有1个,被放在文件的最开始,作为 MPEG-4 格式的标志。
  • moov: Movie Box,该 box 有且只有1个,一般位于 File Type Box 后面,包含了音视频的 metadata 信息,例如音视频的时间戳、长度、编解码信息、在文件中的位置等
  • mdat:Media Data Box,包含音视频数据

三种常用MP4文件结构差异

下图为 MP4,fragmented movie,fragmentd MPEG-4(简称 fMP4 )的文件结构,用来阐述他们之间的差异。
WWDC20 10011 - Author fragmented MPEG-4 content with AVAssetWriter

常规MP4

Movie Box 存储所有的音视频 metadata 信息,Media Data Box 存储所有的音视频数据。

fragmented movie

该格式有 Movie Fragment Box,只存储对应 Media Data Box 的medata 信息。

AVAssetWriter 的 movieFragmentInterval 属性用来指定音视频片段写入文件的频率,最后得到的文件就是 fragmented movie 格式文件。这种格式结构对于直播很有用,因为即使由于崩溃或其他原因意外中断了写入,仍然可以访问和播放部分写入的数据。如果写入完成,则 AVAssetWriter 会在最后一步对 fragmented movie 文件进行整理,最终将得到一个常规的 MP4 文件。

fMP4

自2016年以来,Apple HTS 就支持该格式,是一个流式的封装格式。文件 box 应按以下顺序排列:

  1. File Type Box 放在头部
  2. 接着是 Movie Box,只存储文件级别的媒体信息
  3. 接着是一对对的 Movie Fragment Box 和 Media Data Box,存储音视频 metadata 信息与数据

使用AVAssetWriter

HLS 基本流程

该 session 是关于 AVFoundation 的一项新功能的,该功能用于为 HLS 写入 fragmented MPEG-4 文件,下图是 HLS 的典型工作流程。
WWDC20 10011 - Author fragmented MPEG-4 content with AVAssetWriter

  • Source Material: 音视频源,可以是音视频文件,也可以是音视频流
  • MediaEncoder: 音视频编码器,用于对音视频进行编码;例如把视频数据编码为HEVC格式,把音频数据编码为AAC格式
  • Segmenter: 分片器,它以特定格式对媒体数据进行分片,并且创建一个播放列表,同时列出这些片段。
  • Web Server: 托管内容的Web服务器

AVFoundation 提供的新功能,主要对 Segmenter 的工作有帮助。 AVFoundation 新增了 AVAssetWriter 类,允许 app 将音视频数据写入指定容器类型文件。利用这个特性,可以为 HLS 输入 fragmented MPEG-4 格式的音视频数据。Apple HLS 也支持其他格式,例如 MPEG-2传输流,ADTS 和 MPEG 音频,但是此新功能仅支持 fragmented MPEG-4。下面是利用AVAssetReader 的两个例子。
WWDC20 10011 - Author fragmented MPEG-4 content with AVAssetWriter

点播

  • AVAssetReader: 读取音视频文件的数据,将音视频数据传输给 AVAssetWriter
  • AVAssetWriter: 将音视频数据写入到 fragmented MPEG-4 格式文件中

直播

  • AVCaptureVideoDataOutput:获取视频流
  • AVCaptureAudioDataOutput: 获取音频流
  • AVAssetWriter: 将音视频数据写入到fragmented MPEG-4 格式文件中

创建 AVAssetWriter

以下为使用 AVAssetWriter 主要代码,详细过程请查看 Working with Media in AV Foundation 和 示例代码 fmp4Writer

// Instantiate asset writer // fMP4 遵循MP4标准,contentType 应指定为 AVFileType.mp4 let assetWriter = AVAssetWriter(contentType: UTType(AVFileType.mp4.rawValue)!)  // Add inputs // outputSettings 为字典,提供编码信息;outputSettings不为 nil 时,处于Encoding Mode // outputSettings 也可以为 nil, 此时为 Passthrough mode, AVAssetWriter 对音视频不作处理 let videoInput = AVAssetWriterInput(mediaType: .video, outputSettings: compressionSettings) assetWriter.add(videoInput)  // Configure AVAssetWriter assetWriter.outputFileTypeProfile = .mpeg4AppleHLS // AVAssetWriter 输出音视频的时间间隔 // preferredOutputSegmentInterval 可以为浮点数等高精度类型,但对于 HLS,必须为整型 assetWriter.preferredOutputSegmentInterval = CMTime(seconds: 6.0, preferredTimescale: 1)  assetWriter.initialSegmentStartTime = myInitialSegmentStartTime  assetWriter.delegate = myDelegateObject

delegate 中获取 segmentData

// segmentData: fMP4 segment data optional func assetWriter(_ writer: AVAssetWriter, didOutputSegmentData segmentData: Data, segmentType: AVAssetSegmentType)  // AVAssetSegmentReport: 包含与 segmentData 有关的信息,可用来创建 PlayList optional func assetWriter(_ writer: AVAssetWriter, didOutputSegmentData segmentData: Data, segmentType: AVAssetSegmentType, segmentReport: AVAssetSegmentReport?)

AVAssetSegmentType

“`swift
public enum AVAssetSegmentType : Int {

session 概述

Author fragmented MPEG-4 content with AVAssetWriter

将音频和视频内容转换为 fragmented MPEG-4 文件,可以获得更快,更流畅的 HLS 流媒体体验。该 session 讲述了如何使用 fragmented MPEG-4 格式,如何从音视频中获取分段式内容以及如何设置 AVAssetWriter,从而创建用于 HLS 输出的片段。

MPEG-4文件结构

MPEG-4 (简称 MP4 )文件封装格式,对应的标准为 ISO/IEC 14496-12,即 Information technology Coding of audio-visual objects Part 12: ISO base media file format。ISO/IEC 组织指定的标准一般用数字表示,ISO/IEC 14496 即 MPEG-4 标准,被广泛用于封装 h.264 视频和 AAC 音频。

基本单元-Box

MP4 文件中的所有数据都装在 box 中,也就是说 MP4 文件由若干个 box 组成,每个 box 有类型和长度,可以将 box 理解为 MP4 文件的基本单元。box 中可以包含另一个 box,这种 box 称为 container box。box 由 header 和 body 组成,其中 header 统一指明 box 的大小和类型,body 根据类型有不同的意义和格式。下图为常见的 MP4 box 结构图,里面包含了常用的 box:
WWDC20 10011 - Author fragmented MPEG-4 content with AVAssetWriter

  • ftyp: File Type Box,该 box 有且只有1个,被放在文件的最开始,作为 MPEG-4 格式的标志。
  • moov: Movie Box,该 box 有且只有1个,一般位于 File Type Box 后面,包含了音视频的 metadata 信息,例如音视频的时间戳、长度、编解码信息、在文件中的位置等
  • mdat:Media Data Box,包含音视频数据

三种常用MP4文件结构差异

下图为 MP4,fragmented movie,fragmentd MPEG-4(简称 fMP4 )的文件结构,用来阐述他们之间的差异。
WWDC20 10011 - Author fragmented MPEG-4 content with AVAssetWriter

常规MP4

Movie Box 存储所有的音视频 metadata 信息,Media Data Box 存储所有的音视频数据。

fragmented movie

该格式有 Movie Fragment Box,只存储对应 Media Data Box 的medata 信息。

AVAssetWriter 的 movieFragmentInterval 属性用来指定音视频片段写入文件的频率,最后得到的文件就是 fragmented movie 格式文件。这种格式结构对于直播很有用,因为即使由于崩溃或其他原因意外中断了写入,仍然可以访问和播放部分写入的数据。如果写入完成,则 AVAssetWriter 会在最后一步对 fragmented movie 文件进行整理,最终将得到一个常规的 MP4 文件。

fMP4

自2016年以来,Apple HTS 就支持该格式,是一个流式的封装格式。文件 box 应按以下顺序排列:

  1. File Type Box 放在头部
  2. 接着是 Movie Box,只存储文件级别的媒体信息
  3. 接着是一对对的 Movie Fragment Box 和 Media Data Box,存储音视频 metadata 信息与数据

使用AVAssetWriter

HLS 基本流程

该 session 是关于 AVFoundation 的一项新功能的,该功能用于为 HLS 写入 fragmented MPEG-4 文件,下图是 HLS 的典型工作流程。
WWDC20 10011 - Author fragmented MPEG-4 content with AVAssetWriter

  • Source Material: 音视频源,可以是音视频文件,也可以是音视频流
  • MediaEncoder: 音视频编码器,用于对音视频进行编码;例如把视频数据编码为HEVC格式,把音频数据编码为AAC格式
  • Segmenter: 分片器,它以特定格式对媒体数据进行分片,并且创建一个播放列表,同时列出这些片段。
  • Web Server: 托管内容的Web服务器

AVFoundation 提供的新功能,主要对 Segmenter 的工作有帮助。 AVFoundation 新增了 AVAssetWriter 类,允许 app 将音视频数据写入指定容器类型文件。利用这个特性,可以为 HLS 输入 fragmented MPEG-4 格式的音视频数据。Apple HLS 也支持其他格式,例如 MPEG-2传输流,ADTS 和 MPEG 音频,但是此新功能仅支持 fragmented MPEG-4。下面是利用AVAssetReader 的两个例子。
WWDC20 10011 - Author fragmented MPEG-4 content with AVAssetWriter

点播

  • AVAssetReader: 读取音视频文件的数据,将音视频数据传输给 AVAssetWriter
  • AVAssetWriter: 将音视频数据写入到 fragmented MPEG-4 格式文件中

直播

  • AVCaptureVideoDataOutput:获取视频流
  • AVCaptureAudioDataOutput: 获取音频流
  • AVAssetWriter: 将音视频数据写入到fragmented MPEG-4 格式文件中

创建 AVAssetWriter

以下为使用 AVAssetWriter 主要代码,详细过程请查看 Working with Media in AV Foundation 和 示例代码 fmp4Writer

// Instantiate asset writer // fMP4 遵循MP4标准,contentType 应指定为 AVFileType.mp4 let assetWriter = AVAssetWriter(contentType: UTType(AVFileType.mp4.rawValue)!)  // Add inputs // outputSettings 为字典,提供编码信息;outputSettings不为 nil 时,处于Encoding Mode // outputSettings 也可以为 nil, 此时为 Passthrough mode, AVAssetWriter 对音视频不作处理 let videoInput = AVAssetWriterInput(mediaType: .video, outputSettings: compressionSettings) assetWriter.add(videoInput)  // Configure AVAssetWriter assetWriter.outputFileTypeProfile = .mpeg4AppleHLS // AVAssetWriter 输出音视频的时间间隔 // preferredOutputSegmentInterval 可以为浮点数等高精度类型,但对于 HLS,必须为整型 assetWriter.preferredOutputSegmentInterval = CMTime(seconds: 6.0, preferredTimescale: 1)  assetWriter.initialSegmentStartTime = myInitialSegmentStartTime  assetWriter.delegate = myDelegateObject

delegate 中获取 segmentData

// segmentData: fMP4 segment data optional func assetWriter(_ writer: AVAssetWriter, didOutputSegmentData segmentData: Data, segmentType: AVAssetSegmentType)  // AVAssetSegmentReport: 包含与 segmentData 有关的信息,可用来创建 PlayList optional func assetWriter(_ writer: AVAssetWriter, didOutputSegmentData segmentData: Data, segmentType: AVAssetSegmentType, segmentReport: AVAssetSegmentReport?)

AVAssetSegmentType

“`swift
public enum AVAssetSegmentType : Int {

session 概述

Author fragmented MPEG-4 content with AVAssetWriter

将音频和视频内容转换为 fragmented MPEG-4 文件,可以获得更快,更流畅的 HLS 流媒体体验。该 session 讲述了如何使用 fragmented MPEG-4 格式,如何从音视频中获取分段式内容以及如何设置 AVAssetWriter,从而创建用于 HLS 输出的片段。

MPEG-4文件结构

MPEG-4 (简称 MP4 )文件封装格式,对应的标准为 ISO/IEC 14496-12,即 Information technology Coding of audio-visual objects Part 12: ISO base media file format。ISO/IEC 组织指定的标准一般用数字表示,ISO/IEC 14496 即 MPEG-4 标准,被广泛用于封装 h.264 视频和 AAC 音频。

基本单元-Box

MP4 文件中的所有数据都装在 box 中,也就是说 MP4 文件由若干个 box 组成,每个 box 有类型和长度,可以将 box 理解为 MP4 文件的基本单元。box 中可以包含另一个 box,这种 box 称为 container box。box 由 header 和 body 组成,其中 header 统一指明 box 的大小和类型,body 根据类型有不同的意义和格式。下图为常见的 MP4 box 结构图,里面包含了常用的 box:
WWDC20 10011 - Author fragmented MPEG-4 content with AVAssetWriter

  • ftyp: File Type Box,该 box 有且只有1个,被放在文件的最开始,作为 MPEG-4 格式的标志。
  • moov: Movie Box,该 box 有且只有1个,一般位于 File Type Box 后面,包含了音视频的 metadata 信息,例如音视频的时间戳、长度、编解码信息、在文件中的位置等
  • mdat:Media Data Box,包含音视频数据

三种常用MP4文件结构差异

下图为 MP4,fragmented movie,fragmentd MPEG-4(简称 fMP4 )的文件结构,用来阐述他们之间的差异。
WWDC20 10011 - Author fragmented MPEG-4 content with AVAssetWriter

常规MP4

Movie Box 存储所有的音视频 metadata 信息,Media Data Box 存储所有的音视频数据。

fragmented movie

该格式有 Movie Fragment Box,只存储对应 Media Data Box 的medata 信息。

AVAssetWriter 的 movieFragmentInterval 属性用来指定音视频片段写入文件的频率,最后得到的文件就是 fragmented movie 格式文件。这种格式结构对于直播很有用,因为即使由于崩溃或其他原因意外中断了写入,仍然可以访问和播放部分写入的数据。如果写入完成,则 AVAssetWriter 会在最后一步对 fragmented movie 文件进行整理,最终将得到一个常规的 MP4 文件。

fMP4

自2016年以来,Apple HTS 就支持该格式,是一个流式的封装格式。文件 box 应按以下顺序排列:

  1. File Type Box 放在头部
  2. 接着是 Movie Box,只存储文件级别的媒体信息
  3. 接着是一对对的 Movie Fragment Box 和 Media Data Box,存储音视频 metadata 信息与数据

使用AVAssetWriter

HLS 基本流程

该 session 是关于 AVFoundation 的一项新功能的,该功能用于为 HLS 写入 fragmented MPEG-4 文件,下图是 HLS 的典型工作流程。
WWDC20 10011 - Author fragmented MPEG-4 content with AVAssetWriter

  • Source Material: 音视频源,可以是音视频文件,也可以是音视频流
  • MediaEncoder: 音视频编码器,用于对音视频进行编码;例如把视频数据编码为HEVC格式,把音频数据编码为AAC格式
  • Segmenter: 分片器,它以特定格式对媒体数据进行分片,并且创建一个播放列表,同时列出这些片段。
  • Web Server: 托管内容的Web服务器

AVFoundation 提供的新功能,主要对 Segmenter 的工作有帮助。 AVFoundation 新增了 AVAssetWriter 类,允许 app 将音视频数据写入指定容器类型文件。利用这个特性,可以为 HLS 输入 fragmented MPEG-4 格式的音视频数据。Apple HLS 也支持其他格式,例如 MPEG-2传输流,ADTS 和 MPEG 音频,但是此新功能仅支持 fragmented MPEG-4。下面是利用AVAssetReader 的两个例子。
WWDC20 10011 - Author fragmented MPEG-4 content with AVAssetWriter

点播

  • AVAssetReader: 读取音视频文件的数据,将音视频数据传输给 AVAssetWriter
  • AVAssetWriter: 将音视频数据写入到 fragmented MPEG-4 格式文件中

直播

  • AVCaptureVideoDataOutput:获取视频流
  • AVCaptureAudioDataOutput: 获取音频流
  • AVAssetWriter: 将音视频数据写入到fragmented MPEG-4 格式文件中

创建 AVAssetWriter

以下为使用 AVAssetWriter 主要代码,详细过程请查看 Working with Media in AV Foundation 和 示例代码 fmp4Writer

// Instantiate asset writer // fMP4 遵循MP4标准,contentType 应指定为 AVFileType.mp4 let assetWriter = AVAssetWriter(contentType: UTType(AVFileType.mp4.rawValue)!)  // Add inputs // outputSettings 为字典,提供编码信息;outputSettings不为 nil 时,处于Encoding Mode // outputSettings 也可以为 nil, 此时为 Passthrough mode, AVAssetWriter 对音视频不作处理 let videoInput = AVAssetWriterInput(mediaType: .video, outputSettings: compressionSettings) assetWriter.add(videoInput)  // Configure AVAssetWriter assetWriter.outputFileTypeProfile = .mpeg4AppleHLS // AVAssetWriter 输出音视频的时间间隔 // preferredOutputSegmentInterval 可以为浮点数等高精度类型,但对于 HLS,必须为整型 assetWriter.preferredOutputSegmentInterval = CMTime(seconds: 6.0, preferredTimescale: 1)  assetWriter.initialSegmentStartTime = myInitialSegmentStartTime  assetWriter.delegate = myDelegateObject

delegate 中获取 segmentData

// segmentData: fMP4 segment data optional func assetWriter(_ writer: AVAssetWriter, didOutputSegmentData segmentData: Data, segmentType: AVAssetSegmentType)  // AVAssetSegmentReport: 包含与 segmentData 有关的信息,可用来创建 PlayList optional func assetWriter(_ writer: AVAssetWriter, didOutputSegmentData segmentData: Data, segmentType: AVAssetSegmentType, segmentReport: AVAssetSegmentReport?)

AVAssetSegmentType

“`swift
public enum AVAssetSegmentType : Int {

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » WWDC20 10011 – Author fragmented MPEG-4 content with AVAssetWriter求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们