美文网首页
关于书籍‘‘音视频开发进阶指南’’

关于书籍‘‘音视频开发进阶指南’’

作者: 浅吟且行的时光 | 来源:发表于2019-02-09 19:44 被阅读20次

    2018年年底,2019年初阅读此书,对于快速了解音视频编解码知识有很大帮助
    书中源码地址:http://www.music-video.cn/

    2019阅

    1.音视频文件采集大小计算

    • 计算一分钟采集的音频数据大小:48000 * 16 * 2 / 8 / 1024 /1024 * 60 = 10.986MB(48000是采样率,每秒采样的次数;16位是量化,每个采样用16位进行一个量化,2是双通道;其中kB = 1024kb)
    • 计算一秒30帧视频所占用的大小:1920 * 1080 * 4 * 30 = 237.30MB(针对RGBA通道,1920*1080是分辨率,4代表每个像素点有四个通道,每个通道用一个byte表示)

    2.AAC编码(可以在中低码率的限制下编码出高质量的音频流)

    • LC-AAC (最基础的编码规格)
    • HE-AAC v1(HE代表高效性,此种编码规格使用容器的方法实现了LC-AAC和SBR技术,SBR是频段复制,音乐的频谱主要集中在低频谱,高频谱决定了整个音乐的音质,SBR技术把低频部分单独编码以保留频谱的主要部分,高频单独编码以保留音质,这样能保证减小文件大小的情况下保存了音质)
    • HE-AAC v2(同样使用容器的方法包含HE-AAC v1 和PS技术,PS是参数立体声,一个立体声文件的大小是一个单声道文件的两倍,但是两个声道的声音存在相似性,PS技术存储了一个声道的全部信息,然后花很少的字节用参数描述另一个声道和它不同的地方,这样在音质损失很小的情况下进一步缩小文件的体积)

    3.音视频压缩

    • 音频压缩:主要压缩掉人耳听觉之外的冗余信息
    • 视频压缩:主要去掉空间上的冗余和时间上的冗余信息

    4.IPB帧

    • I帧:是帧内编码帧,去除空间上的冗余信息
    • P帧是前向预测帧,B帧是双向预测帧,两种都用来去除时间上的冗余信息
    • PTS和DTS(PTS是图像显示的时间戳,DTS是压缩包解压包的时间戳)

    5.关于FFMPEG

    • FFMPEG除了具有强大的封装解封装,编解码功能之外还有一个强大的滤镜组件avfilter,多用于进行多媒体的处理和编辑。例如:添加文字,时间显示,logo图片,将字幕与视频融合,截图,画中画,多宫格等,还可以进行音频流的滤镜和声道操作。
    • FFMPEG抽象出来的概念。AVFormatContext对容器或者媒体文件的一个抽象,该容器中包含了多路流,(音频流,视频流,字幕流等),对流的抽象就是AVStream;在每一路流中都会描述这路流的编码格式,对编码格式和编码器的抽象就是AVCodecContext与AVCodec;对于编码器或者解码器的输入输出部分,也就是压缩数据以及原始数据的抽象就是AVPacket与AVFrame.

    6.把第三方库编译进FFMPEG

    • 下载第三方库,执行shell脚本
    • 在FFMPEG源码下创建external-libs目录,再建立第三方库目录,每个目录都包含include目录和lib目录
    • 将第一步编译出来的头文件和静态库文件放入到上一步骤中创建的目录
    • 修改FFMPEG的脚本,添加对应第三方库的脚本以及对应平台的脚本,进行交叉编译即可

    7.关于Android APP

    • 查看一个APP的内存占用情况的可执行命令:adb shell dumpsys meminfo 包名;其中Native Heap 代表Native层堆的大小
    • 在Android中对单个进程占用内存的大小是500MB,但对于使用Native代码进行内存的占用和销毁是不进行约束的
    • adb shell top -t -m 5 top查看进程占用CPU情况,参数 -t 代表查看线程占用CPU的情况,-m 查看CPU占用最高的5个线程
    • Android系统对于每个Dalvik虚拟机分配了一定的内存,当APP占用的内存超过了这个上限时,就会产生OOM异常;
    • 内存泄漏是指有些对象是从虚拟机的根对象通过引用链是可达的,但这些对象在APP中不会被使用了,而这些对象永远不被使用,又永远不被回收掉

    8.NDK工具集的使用

    • 利用objdump命令将so包反编译为实际代码:./arm-linux-androideabi-objdump -dx libmemoryleak.so > stacktract.txt
    • 利用addr2line将so崩溃的调用地址转化为代码行数:./arm-linux-androideabi-addr2line -e libmemorgleak.so oxcfqc > file.line
    • 利用ndk-stack还原native崩溃的堆栈信息:```ndk-stack -sym libmemoryleak.so -dump tombstone > log.txt
      (其中so文件是带symbol file 的so库)
    • cppcheck工具用于Native代码的静态检测;leakTracer工具可用于动态内存泄漏检测;breakpad可用于收集线上Native Crash

    9.关于Ne10

    • Ne10 是由ARM主导开发的软件库,提供一系列通用的,基于ARM NEON架构并且经过深度优化的函数集合,能够充分利用ARM NEON SIMD指令的并行运算能力,主要包括:1.Math函数库2.dsp数字信号处理3.图像处理

    相关文章

      网友评论

          本文标题:关于书籍‘‘音视频开发进阶指南’’

          本文链接:https://www.haomeiwen.com/subject/ctinsqtx.html