热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MultiMedia知识汇总

MediaCodec相关crop信息(x,y,m,n)左上坐标(x,y)右下坐标(m,n)&#x

  1. MediaCodec相关
    crop信息(x,y,m,n)左上坐标(x,y) 右下坐标(m,n),也就是解码宽高,宽=m-x+1,高=y-n+1
    mediacodec的状态:(思考一下如果你创建mediacodec要做那些事情)
    1.创建mediacodec后,处于uninitialized状态
    2.config后,configured状态
    3.start后,flushed状态,此时会清空所有buffer
    4.buffer队列拿到第一个buffer时,进入running状态
    5.stream带有eos标志时,进入eos状态
    6.调用stop后,uninitialized状态
    codec specific data 数据(h264/h265解码器要求的数据)
    1.mediacodec要求的,所有正常数据来之前,必须先有csd数据
    2.其中包含一些sps,pps信息,用于初始化、配置解码器参数等
    H264 csd-0放sps信息、csd-1放pps信息
    H265 只有csd-0,放sps、pps信息
    MediaFormat参数中,很多需要配置的信息,都是在编码的时候才需要的,如framerate key-frame等信息,解码时候配置的参数不多
    mediacodec常用操作
    1.dequeueInputBuffer 返回一个空buffer的index
    2.getInputBuffer(index) 返回对应index的buffer地址
    3.queueInputBuffer 填充好数据之后,将数据送到mediacodec
    4.dequeueOutputBuffer 获取解码器输出的buffer
    5.releaseOutputBuffer 把buffer还给mediacodec
    使用surface效率会高很多,dequeuOutputBuffer之后,直接releaseOutputBuffer,解码数据无需拷贝到java侧,直接在native侧送给surface,省去copy动作,效率提高
  2. MP4组成
    mp4由各种box组成,每种不同box的功能不一样
    首先由一个ftype box,包含文件的一些信息
    其次是moov box,里面包含了很多子box,meta-data信息等
    媒体数据包含在mdat信息中,也包含了很多子box
    ftyp file type 文件版本,协议等信息
    moov movie box 不包含具体数据,只包含对应信息
    mdat meta data box 存放解码播放的数据
  3. ffmpeg
    常见的视频格式:h264/h265/vp8/vp9/
    ffmpeg框架包含AVFormat、AVCodec、AVFilter、AVDevice、AVUtils等几个,重要的是前2个
    libavcodec:存放各编解码器模块
    libavformat:存放muxer/demuxer模块,各种音视频封装格式的生成和解析,包括获取解码所需的信息和生成
    解码上下文的结构和读取音视频帧的功能,音视频的格式解析协议
    libavutil:内存操作等模块,一些公共工具函数使用库,如内存等
    libswscale:视频缩放、色彩转换,视频格式转换等
    FFmpeg数据结构
    AVFormatContext 封装格式上下文结构体,也是统领全局的结构体,保存了视频文件封装格式相关信息。
    iformat:输入视频的AVInputFormat
    nb_streams :输入视频的AVStream 个数
    streams :输入视频的AVStream []数组
    duration :输入视频的时长(以微秒为单位)
    bit_rate :输入视频的码率
    AVInputFormat 每种封装格式(例如FLV, MKV, MP4, AVI)对应一个该结构体。
    name:封装格式名称
    long_name:封装格式的长名称
    extensions:封装格式的扩展名
    id:封装格式ID
    一些封装格式处理的接口函数
    AVStream 视频文件中每个视频(音频)流对应一个该结构体。
    id:序号
    codec:该流对应的AVCodecContext
    time_base:该流的时基
    r_frame_rate:该流的帧率
    AVCodecContext编码器上下文结构体,保存了视频(音频)编解码相关信息。
    codec:编解码器的AVCodec
    width, height:图像的宽高(只针对视频)
    pix_fmt:像素格式(只针对视频)
    sample_rate:采样率(只针对音频)
    channels:声道数(只针对音频)
    sample_fmt:采样格式(只针对音频)
    AVCodec 每种视频(音频)编解码器(例如H.264解码器)对应一个该结构体。
    name:编解码器名称
    long_name:编解码器长名称
    type:编解码器类型
    id:编解码器ID
    一些编解码的接口函数
    AVPacket 存储一帧压缩编码数据。
    pts:显示时间戳
    dts :解码时间戳
    data :压缩编码数据
    size :压缩编码数据大小
    stream_index :所属的AVStream
    AVFrame存储一帧解码后像素(采样)数据。
    data:解码后的图像像素数据(音频采样数据)。
    linesize:对视频来说是图像中一行像素的大小;对音频来说是音频帧的大小。
    width, height:图像的宽高(只针对视频)。
    key_frame:是否为关键帧(只针对视频) 。
    pict_type:帧类型(只针对视频) 。例如I,P,B。

推荐阅读
  • 本文介绍了如何利用 Delphi 中的 IdTCPServer 和 IdTCPClient 控件实现高效的文件传输。这些控件在默认情况下采用阻塞模式,并且服务器端已经集成了多线程处理,能够支持任意大小的文件传输,无需担心数据包大小的限制。与传统的 ClientSocket 相比,Indy 控件提供了更为简洁和可靠的解决方案,特别适用于开发高性能的网络文件传输应用程序。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 在探讨如何在Android的TextView中实现多彩文字与多样化字体效果时,本文提供了一种不依赖HTML技术的解决方案。通过使用SpannableString和相关的Span类,开发者可以轻松地为文本添加丰富的样式和颜色,从而提升用户体验。文章详细介绍了实现过程中的关键步骤和技术细节,帮助开发者快速掌握这一技巧。 ... [详细]
  • 深入解析Android 4.4中的Fence机制及其应用
    在Android 4.4中,Fence机制是处理缓冲区交换和同步问题的关键技术。该机制广泛应用于生产者-消费者模式中,确保了不同组件之间高效、安全的数据传输。通过深入解析Fence机制的工作原理和应用场景,本文探讨了其在系统性能优化和资源管理中的重要作用。 ... [详细]
  • 在Android平台中,播放音频的采样率通常固定为44.1kHz,而录音的采样率则固定为8kHz。为了确保音频设备的正常工作,底层驱动必须预先设定这些固定的采样率。当上层应用提供的采样率与这些预设值不匹配时,需要通过重采样(resample)技术来调整采样率,以保证音频数据的正确处理和传输。本文将详细探讨FFMpeg在音频处理中的基础理论及重采样技术的应用。 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • 使用Maven JAR插件将单个或多个文件及其依赖项合并为一个可引用的JAR包
    本文介绍了如何利用Maven中的maven-assembly-plugin插件将单个或多个Java文件及其依赖项打包成一个可引用的JAR文件。首先,需要创建一个新的Maven项目,并将待打包的Java文件复制到该项目中。通过配置maven-assembly-plugin,可以实现将所有文件及其依赖项合并为一个独立的JAR包,方便在其他项目中引用和使用。此外,该方法还支持自定义装配描述符,以满足不同场景下的需求。 ... [详细]
  • 在Java项目中,当两个文件进行互相调用时出现了函数错误。具体问题出现在 `MainFrame.java` 文件中,该文件位于 `cn.javass.bookmgr` 包下,并且导入了 `java.awt.BorderLayout` 和 `java.awt.Event` 等相关类。为了确保项目的正常运行,请求提供专业的解决方案,以解决函数调用中的错误。建议从类路径、依赖关系和方法签名等方面入手,进行全面排查和调试。 ... [详细]
  • 本文介绍了如何利用ObjectMapper实现JSON与JavaBean之间的高效转换。ObjectMapper是Jackson库的核心组件,能够便捷地将Java对象序列化为JSON格式,并支持从JSON、XML以及文件等多种数据源反序列化为Java对象。此外,还探讨了在实际应用中如何优化转换性能,以提升系统整体效率。 ... [详细]
  • CTF竞赛中文件上传技巧与安全绕过方法深入解析
    CTF竞赛中文件上传技巧与安全绕过方法深入解析 ... [详细]
  • 在本文中,我们将为 HelloWorld 项目添加视图组件,以确保控制器返回的视图路径能够正确映射到指定页面。这一步骤将为后续的测试和开发奠定基础。首先,我们将介绍如何配置视图解析器,以便 SpringMVC 能够识别并渲染相应的视图文件。 ... [详细]
  • JavaScript XML操作实用工具类:XmlUtilsJS技巧与应用 ... [详细]
  • 在当前的软件开发领域,Lua 作为一种轻量级脚本语言,在 .NET 生态系统中的应用逐渐受到关注。本文探讨了 Lua 在 .NET 环境下的集成方法及其面临的挑战,包括性能优化、互操作性和生态支持等方面。尽管存在一定的技术障碍,但通过不断的学习和实践,开发者能够克服这些困难,拓展 Lua 在 .NET 中的应用场景。 ... [详细]
  • 如何撰写PHP电商项目的实战经验? ... [详细]
author-avatar
mobiledu2502929697
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有