热门标签 | 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。

推荐阅读
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • 本文探讨了在C++中如何有效地清空输入缓冲区,确保程序只处理最近的输入并丢弃多余的输入。我们将介绍一种不阻塞的方法,并提供一个具体的实现方案。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文详细探讨了HTML表单中GET和POST请求的区别,包括它们的工作原理、数据传输方式、安全性及适用场景。同时,通过实例展示了如何在Servlet中处理这两种请求。 ... [详细]
  • 并发编程 12—— 任务取消与关闭 之 shutdownNow 的局限性
    Java并发编程实践目录并发编程01——ThreadLocal并发编程02——ConcurrentHashMap并发编程03——阻塞队列和生产者-消费者模式并发编程04——闭锁Co ... [详细]
  • 深入解析 Android IPC 中的 Messenger 机制
    本文详细介绍了 Android 中基于消息传递的进程间通信(IPC)机制——Messenger。通过实例和源码分析,帮助开发者更好地理解和使用这一高效的通信工具。 ... [详细]
  • 优化Flask应用的并发处理:解决Mysql连接过多问题
    本文探讨了在Flask应用中通过优化后端架构来应对高并发请求,特别是针对Mysql 'too many connections' 错误的解决方案。我们将介绍如何利用Redis缓存、Gunicorn多进程和Celery异步任务队列来提升系统的性能和稳定性。 ... [详细]
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社区 版权所有