多媒体文件解复用(Demuxing)过程
多媒体文件的解复用(Demuxing)过程指的是从一个多媒体容器文件(如 MP4、MKV、AVI 等)中提取不同类型的多媒体数据流(例如视频流、音频流、字幕流等)的过程。
容器文件本身并不包含实际的视频或音频数据,而是将这些数据流封装在一起,允许同时存储和传输。
解复用的目的是将这些封装在容器中的数据流分离,供解码器进行解码和播放。
解复用过程的基本步骤
-
读取容器文件头部(Header)
容器文件通常会包含一个头部,描述了该文件的基本结构和格式信息。头部通常包括:- 文件类型(例如 MP4、MKV)。
- 各数据流的编码格式、时长、比特率等信息。
- 数据流的位置索引(例如,在文件中的偏移量)。
-
分析媒体流(Stream Parsing)
在读取容器的头部信息后,解复用器会解析文件中的所有数据流。这些数据流通常包括:- 视频流:可能使用 H.264、H.265 等编码格式。
- 音频流:可能使用 AAC、MP3、Opus 等编码格式。
- 字幕流:如 SRT、ASS 或内嵌式字幕。
- 其他流:例如元数据、章节信息、图片等。
每个流都有独立的编码方式和时序,解复用器需要依据头部信息或索引来正确地将这些流提取出来。
-
提取音视频数据
- 音频流:解复用器将提取音频帧,通常这些音频帧是压缩过的(例如 AAC 或 MP3),解复用后可以送到音频解码器(如 AAC 解码器)进行解码。
- 视频流:解复用器提取压缩的视频帧,通常是 H.264 或 H.265 格式。视频流会被提取成一帧一帧的压缩数据块,然后可以送到视频解码器(如 H.264 解码器)进行解码。
-
同步与时间戳(Time Stamping)
每个数据流中的帧通常会附带时间戳(PTS:Presentation Time Stamp 或 DTS:Decoding Time Stamp),用于确保不同数据流(如音频和视频)的同步。视频和音频的时间戳可以确保两者按照正确的顺序和时间点播放。
在解复用时,解复用器会根据这些时间戳信息提取并输出相应的数据流,以确保音视频同步。
-
输出解复用后的数据流
解复用后的数据流可以是原始的音频、视频或字幕数据。每种数据流在解复用后可以交给相应的解码器进行进一步解码、渲染或播放。
解复用的工具和库
常见的用于解复用和解码多媒体文件的工具和库包括:
-
FFmpeg
FFmpeg 是一个开源的跨平台多媒体框架,可以解复用、解码、编码、转码、复用(Muxing) 等。
使用 FFmpeg 进行解复用的基本命令:
ffmpeg -i input.mp4这些显示视频流、音频流以及其他流的详细信息,FFmpeg 会自动识别并解复用其中的音视频数据流。
-
Libav
Libav 是与 FFmpeg 相似的多媒体处理库,提供了用于解复用和编码/解码的 API。虽然现在 FFmpeg 比较常用,但 Libav 仍然是一个有效的解复用工具。
-
GStreamer
Gstreamer 是一个开源的多媒体框架,它支持流媒体、音频、视频的解复用和处理,广泛应用于 Linux 上的多媒体应用程序中。
-
VLC 媒体播放器
VLC 不仅是一个媒体播放器,它还内置了解复用器,可以读取多种格式的容器文件并提取其中的音视频数据流。
总结:
解复用过程就是从容器中提取出多个不同类型的媒体数据流(如视频流、音频流、字幕流等),然后通过适当的解码器进一步处理这些流。解复用是多媒体播放和处理的基础,它确保了多媒体数据能够正确地被分离并交给对应的解码器进行播放。
相关文章:
多媒体文件解复用(Demuxing)过程
多媒体文件的解复用(Demuxing)过程指的是从一个多媒体容器文件(如 MP4、MKV、AVI 等)中提取不同类型的多媒体数据流(例如视频流、音频流、字幕流等)的过程。 容器文件本身并不包含实际的视频或音频数据&…...
从 Zuul 迁移到 Spring Cloud Gateway:一步步实现服务网关的升级
从 Zuul 迁移到 Spring Cloud Gateway:一步步实现服务网关的升级 迁移前的准备工作迁移步骤详解第一步:查看源码第二步:启动类迁移第三步:引入 Gateway 依赖第四步 编写bootstrap.yaml第五步:替换路由配置第六步&#…...
qt之插件编译
QtXlsxWriter sudo apt install qtbase5-private-dev git clone https://github.com/dbzhang800/QtXlsxWriter.git cd QtXlsxWriter/ qmake make -j6 sudo make install #将生成的lib 及 include copy至项目路径的lib 及include里项目配置: QT xlsxbluetoo…...
pandas一行拆成多行
import pandas as pd df pd.DataFrame({Country:[China,US,Japan,EU,UK/Australia, UK/Netherland],Number:[100, 150, 120, 90, 30, 2],Value: [1, 2, 3, 4, 5, 6],label: list(abcdef)})# 法一 推荐 df2df.drop(Country, axis1).join(df[Country].str.split(/, expandTrue).…...
今天调了个转速的小BUG
同事说转速表有个bug,转速停止后,继电器没有恢复到初始状态。若停止之前是报警,继电器吸合,则停止后继电器还是吸合。我心想不会啊,这软件都弄了好几年了,一直也没出现过状况。 经过与调试同事的沟通&#…...
第三节、电机定速转动【51单片机-TB6600驱动器-步进电机教程】
摘要:本节介绍用定时器定时的方式,精准控制脉冲时间,从而控制步进电机速度 一、计算过程 1.1 电机每一步的角速度等于走这一步所花费的时间,走一步角度等于步距角,走一步的时间等于一个脉冲的时间 w s t e p t … ……...
从一个Bug谈前端响应拦截器的应用
一、问题场景 今天在开发商品管理系统时,遇到了一个有趣的问题:当添加重复的商品编号时,页面同时弹出了两条 "商品编号已存在" 错误提示: 这个问题暴露了前端错误处理机制的混乱,让我们从这个问题出发&…...
JS进阶DAY4|节点操作
嘿👋 今天我们要一起深入探索JavaScript中的DOM操作,这是前端开发中不可或缺的技能。🌟 准备好了吗?让我们一起跳进DOM的海洋,看看怎么用代码操控网页的结构吧! 目录 1. 增加节点 1.1 使用 appendChild 方…...
【Web】2023安洵杯第六届网络安全挑战赛 WP
目录 Whats my name easy_unserialize signal Swagger docs 赛题链接:GitHub - D0g3-Lab/i-SOON_CTF_2023: 2023 第六届安洵杯 题目环境/源码 Whats my name 第一段正则用于匹配以 include 结尾的字符串,并且在 include 之前,可以有任…...
go 语言中协程和GMP模型
为什么需要协程? 协程用来更加精细地利用线程,支撑超高的并发的。协程,从 runtime 的角度看,协程就是一个被调度的 g 结构体。 G 就是协程,M 是线程,P 是为了优化多线程并发时,会抢夺协程队列的…...
coco数据集转换SAM2格式
coco是一个大json汇总了所有train的标签 SAM2训练一张图对应一个json标签 import json import os from pycocotools import mask as mask_utils import numpy as np import cv2def poly2mask(points, width, height):points_array np.array(points, dtypenp.int32).reshape(-…...
【CMD、PowerShell和Bash设置代理】
【CMD、PowerShell和Bash设置代理】 1. CMD(命令提示符)临时设置代理(只对当前会话有效):查看当前代理设置:清除临时代理设置:永久设置代理(对所有新的 CMD 会话有效)&am…...
22智能 代码作业集合
3-2 #include <stdio.h>int main() {int a 21;int b 10;int c ;c a b;printf("Line 1 - c 的值是 %d\n", c );c a - b;printf("Line 2 - c 的值是 %d\n", c );c a * b;printf("Line 3 - c 的值是 %d\n", c );c a / b;printf("…...
实现一个简单的后台架子(侧边栏菜单渲染,折叠,黑白主题,组件主题色,全屏,路由快捷栏)
目录 侧边栏菜单渲染 侧边栏折叠 黑白主题 全屏切换 切换组件主题色 tab快捷栏 代码 侧边栏菜单渲染 结合ElementPlus组件库进行实现 新建的Vue3项目,引入了格式化样式normalize.css和ElementPlus,并进行了全局引入 并进行了全局引入 设置高度为100% 粘贴ElementPlus的…...
vue3-canvas实现在图片上框选标记(放大,缩小,移动,删除)
双图版本(模板对比) 业务描述:模板与图片对比,只操作模板框选的位置进行色差对比,传框选坐标位置给后端,返回对比结果显示 draw.js文件: 新增了 createUuid,和求取两个数组差集的方…...
unity3d—demo(2d人物左右移动发射子弹)
目录 人物代码示例: 子弹代码示例: 总结上面代码: 注意点: 人物代码示例: using System.Collections; using System.Collections.Generic; using UnityEngine;public class PlayerTiao : MonoBehaviour {public f…...
【ETCD】【源码阅读】 深入解析 raftNode.start`函数:Raft 核心启动逻辑剖析
raftNode.start方法 是 etcd 中 Raft 模块的核心启动点,其职责是管理 Raft 状态机的状态变迁、日志处理及集群通信等逻辑。通过对源码的逐行分析,我们将全面揭示其运行机制,探讨其设计背后的分布式系统理念。 函数核心结构 raftNode.start 方…...
Robust Depth Enhancement via Polarization Prompt Fusion Tuning
paper:论文地址 code:github项目地址 今天给大家分享一篇2024CVPR上的文章,文章是用偏振做提示学习,做深度估计的。模型架构图如下 这篇博客不是讲这篇论文的内容,感兴趣的自己去看paper,主要是分享环境&…...
NEFTune,SFT训练阶段给Embedding加噪音
仿照CV里,数据增强的思路(给图像做旋转、反转、改变亮度等);NLP里,SFT训练数据较少时,也可往embedding上加噪音,来增加训练数据的丰富程度。进而提升最终训练效果。 前提假设:Embed…...
uniapp -- 实现页面滚动触底加载数据
效果 首选,是在pages.json配置开启下拉刷新 {"path": "pages/my/document/officialDocument","style": {"navigationStyle":</...
3个技巧彻底改变你的泰坦之旅装备管理体验
3个技巧彻底改变你的泰坦之旅装备管理体验 【免费下载链接】TQVaultAE Extra bank space for Titan Quest Anniversary Edition 项目地址: https://gitcode.com/gh_mirrors/tq/TQVaultAE 你是否曾在泰坦之旅的冒险中,面对满仓库的传奇装备却找不到需要的那一…...
CANN/ge算子句柄创建API
aclopCreateHandle 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、TensorF…...
Oracle诉Google案:API版权与合理使用对软件互操作性的深远影响
1. 一场定义软件未来的世纪诉讼:Oracle诉Google案深度解析2012年5月,科技界和法律界都将目光聚焦在了美国加州北区联邦地方法院。一场被业界称为“世纪诉讼”的官司——Oracle America Inc. 诉 Google Inc. 案——进入了关键的第一阶段庭审。表面上看&am…...
以太网技术演进:从局域网到万物互联的生态系统
1. 以太网的“身份危机”:它到底是什么?在技术圈里混了十几年,我经常遇到一个有趣的现象:大家天天都在用“以太网”,但真要问一句“以太网到底是什么?”,会议室里能瞬间安静下来。这感觉就像你天…...
不开刀、少痛苦!拱墅区这家公立肿瘤专科,中西医结合守护生命希望
面对肿瘤,你是否还在恐惧开刀创伤、担忧放化疗副作用?杭州市拱墅区人民中西医结合医院肿瘤一科,作为公立二级甲等医院重点专科,以 “微创消瘤、中西扶正” 为核心,走出一条低损伤、高疗效的抗癌新路,为无数…...
基于 base-admin 人事管理系统开源项目学习与功能扩展实战笔记
最近跟着课程实战拆解了base-admin 人事管理系统开源项目,这是一款基于 SpringBoot 搭建的企业级后台管理平台,遵循 Apache 2.0 开源协议,非常适合 Java 后端和软件工程入门练手。项目整体采用经典三层架构,Controller、Service、…...
深入STM32以太网驱动层:DP83848 PHY芯片初始化、中断处理与lwip数据收发的HAL库实现详解
STM32与DP83848以太网驱动开发实战:从PHY初始化到lwIP协议栈深度整合 在嵌入式系统开发中,以太网通信已成为工业控制、物联网网关等场景的标配功能。本文将深入探讨基于STM32F1系列微控制器与DP83848物理层芯片的以太网驱动开发全流程,重点剖…...
AI编程工具全景指南:从CLI到智能体,构建高效开发工作流
1. 项目概述:一份为“氛围编码”时代量身定制的开发者地图如果你是一名开发者,最近几个月一定被“氛围编码”这个词刷屏了。从Cursor、Claude Code到各种AI原生IDE和代理工具,我们仿佛一夜之间进入了一个新的编程范式。但问题也随之而来&…...
可配置处理器技术:嵌入式SOC设计的灵活加速方案
1. 可配置处理器技术概述在嵌入式系统芯片(SOC)设计领域,算法实现方式的选择一直是个关键决策点。传统上,开发者面临两种主要选择:要么将算法编译成通用处理器(如RISC或DSP)可执行的软件,要么将其直接实现为专用硬件电路(ASIC)。前…...
2025届必备的降AI率助手实测分析
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 要降低那 AI 生成文本所呈现出的机械痕迹,就得从事先规划好的词汇、句法以及逻辑…...
