zhanghui_cuc
中国传媒大学\视频技术\硕士
展开
-
花式读取Android CPU使用率
本文包含以下内容: 1.介绍常见的获取android cpu使用率的方法 2.介绍这些常见方法背后的原理 3.介绍我自己写的一个脚本,这个脚本可以获取各个线程在cpu各个核上的占用率一、常见的获取Android CPU使用率方法及其原理首先说一下如何查看cpu的基本信息,相信很多人也知道,使用下面的命令即可 adb shell cat /proc/cpuinfo比如我从手边一台电视上获取到的信原创 2017-09-11 01:22:59 · 13765 阅读 · 1 评论 -
移动端跨平台开发(二)一个跨平台的helloworld
在上一篇文章移动端音视频跨平台开发技术概论中,我们分析了跨平台开发的总体架构。今天我们实际动手,写一个helloworld项目,这个项目很简单,就是做一个简单的日志库,最终我们希望能在Android和ios手机上打印出一行hello world日志。项目名字就叫simplest_crossplatfrom_helloworld,简称sch,对应下文代码中的变量、方法名称。编写打印日志的核心代码流程在Android平台上,我们利用jni的log.h进行日志的输出,在ios平台上,则直接利用printf函原创 2022-03-24 23:24:22 · 5747 阅读 · 0 评论 -
移动端音视频跨平台开发技术概论
严格来说,具体到移动端音视频这个细分领域,除非你不依赖任何平台硬件加速能力(比如硬件编解码),否则我们可以大胆的说:根本不存在彻底的跨平台。我们可以从更狭义的角度来说,移动端音视频领域的跨平台,其实是编译工具链和数据流程上的跨平台,基于这两个底座,接入依赖平台特性的功能模块,最终封装为多平台统一的native接口。这里所谓的数据流程,或者叫pipeline,我们可以说它还包含了线程管理、内存管理、数据统计、日志管理等附属模块。此外,如果要封装应用层面的API,则又要基于统一的native接口,依据各平原创 2022-03-06 20:14:54 · 4812 阅读 · 0 评论 -
流媒体播放的数学原理
这是本系列的第六篇文章前五篇文章的链接如下:自适应流媒体传输(一)——DASH媒体内容的生成自适应流媒体传输(二)——为什么要使用fragmented MP4自适应流媒体传输(三)——和TS格式说再见自适应流媒体传输(四)——深入理解MPD自适应流媒体传输(五)——正确认识码率切换当我们抛开繁杂的业务代码,从纯数学的角度去理解流媒体传输\播放的过程,会有全新的体会。首先,无论是传统的渐进式下载(progressive download)还是现在流行的自适应传输(adaptive stream原创 2021-12-18 19:21:44 · 872 阅读 · 0 评论 -
深入理解Android MediaCodec(一)初始化流程
最近在学习Android多媒体技术,分享一下学习过程中的记录。 这篇文章中将介绍一下如何获取系统支持的编解码器,以及如何获取支持某一MediaFormat的编解码器,简单来说,就是MediaCodecList的内容。原创 2021-11-17 22:54:45 · 1435 阅读 · 0 评论 -
再探HEVC——理解不同类型的I帧
软编的265码流和Android MediaCodec硬编的265码流,I帧的nalu type有所不同翻看265标准文档,可以发现I帧的nalu type分以下几种NAL_UNIT_CODED_SLICE_BLA, // 16 // Current name in the spec: BLA_W_LP NAL_UNIT_CODED_SLICE_BLANT, // 17 // Current name in the spec: BLA_W_DLP NAL_UNIT.原创 2021-11-14 22:26:17 · 2592 阅读 · 0 评论 -
浅谈OpenGOP与ClosedGOP
错误地设置OpenGOP与ClosedGOP,将导致某些Android手机上的解码错误作为GOP的两种结构,ClosedGOP是指帧间的预测都是在GOP中进行的,而对于OpenGOP来说,一个GOP里面的某一帧在解码时要依赖于相邻GOP中的某一些帧。下图展示的就是一个OpenGOP的例子,在这个例子中, 末尾的两个B帧需要依赖下一个GOP中的I帧进行解码。而下图展示的是两个CloseGOP的例子。我们也可以得出一个结论,如果一段视频内的所有I帧都同时是IDR帧,那么这段视频的所有GOP都是Clo.原创 2021-10-24 12:49:08 · 1609 阅读 · 0 评论 -
深入理解Google Cast(三)探寻原理
如何开发一个receiver application先来简单说一下这个话题。Receiver本质就是一个网页,由html+CSS和jacascript开发,如果要自定义receiver application,需要在 Google Cast SDK Developer Console注册appID,这个appID将会包含在sender的SDK方法中,标识receiver app,注册收费5$.For more details, see below:https://developers.google.c原创 2021-08-15 22:42:29 · 2525 阅读 · 0 评论 -
深入理解Google Cast(二)开发一个支持Google Cast的sender APP
前言0.Activities需要继承自ActionBarActivity或FragmentAcitivy0. cast button需要在所有Actvity中存在,允许用户随时连接,随时断开.初始化CastContext首先实现OptionsProvider接口来获得CastOptions,再用CastOptions初始化CastContextreceiver application ID:用于过滤Cast Devices搜索结果并且在Cast会话开始时启动receiver application原创 2021-08-15 22:27:48 · 1628 阅读 · 0 评论 -
深入理解Google Cast(一)基本概念
什么是google castgoogle cast允许用户将手机上的内容投影到TV上,然后用户可以将手机作为遥控器来控制TV上的媒体播放。Google cast SDK用于扩展你的app,使其支持google cast功能。一个Cast App由两个部分组成Sender Application:支持Android,IOS,Chrome,runs on mobile device or laptopReceiver Application:runs on Google Cast devices,处原创 2021-08-15 22:17:39 · 3723 阅读 · 0 评论 -
深入理解Android Tunnel Mode
什么是Tunnel mode?通俗的说就是video的offload playback mode,把视频解码\音画同步\渲染的工作从由AP(Application Processor)完成转变为都由DSP来完成,甚至全程不需要Android Framework的参与,性能更强、功耗更低,尤其适合在TV设备上播放UHD\HDR\高码率\高帧率内容。Audio的Tunnel mode在kitkat中就已经存在了,可以在音乐播放中起到节省电量的作用。Google为本地和在线播放的Tunnel mode提供原创 2021-08-15 21:59:51 · 5150 阅读 · 0 评论 -
Android常用调试命令记录
Android常用调试命令记录抓日志mount关闭selinuxdump native数据查看ffmpeg支持的codec和format列表新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入抓日志同时抓adb日志和kern原创 2021-08-15 14:44:06 · 430 阅读 · 0 评论 -
深入理解DRM(四)——直播流中的DRM
直播流中的DRM涉及到一个Key Rotation的概念,所谓key rotation就是加密内容的key可以随时间变化,一般用于直播流媒体,但是在点播中也是可能存在的(may be optional for VOD streams). 根据widevine文档,key rotation往往结合fragemented mp4格式使用,利用关键的moof和pssh(包含drm初始信息) box完成。具体来说,client不停的从流中读moof以及包含在moof中的pssh,当发现pssh发生变化的时候,就意原创 2021-08-17 22:54:37 · 3550 阅读 · 0 评论 -
深入理解DRM(三)——MediaDRM和MediaCrypto
文章目录How MediaDRM Works?根据UUID创建MeidaDRM实例Open SessionAdd keys创建MediaCrypto对象,注册到MediaCodec中开始解密Widevine DRM TestingHow MediaDRM Works?下面以ExoPlayer代码为例介绍Widevine Modular中所用的MediaDRM。总结下来有以下几步Step1.根据UUID创建MeidaDRM实例Step2.Open SessionStep3. add keys:原创 2021-08-15 14:38:11 · 4513 阅读 · 0 评论 -
深入理解DRM(二)——了解Widevine与OEMCrypto
文章目录基本术语定义KeyBox是什么Widevine的级别Widevine DRM FrameworkWidevine Classic与Widevine ModularOEMCrypto是什么1.OEMCrypto中的Session2. OEMCrypto API2.1 Crypto Device Control2.2 Crypto Key Ladder2.3 Decryption API2.4 Keybox Provisioning2.5 Keybox Access关键解密流程基本术语定义Dev原创 2021-08-15 14:36:12 · 8327 阅读 · 0 评论 -
浅谈音视频自动化测试
理清音视频/多媒体/播放器自动化测试的思路,可以从以下几个角度来思考。1.测项设计1.1.功能测试对各类传输协议、封装格式、编码格式的支持,在编码格式测试方面,又涉及到各类编码参数的组合,测项数量会疯狂膨胀起来各类基础播放控制,包括播放、暂停、倍速、seek等和自身产品强相关的feature测试,如无缝切换、音频输出通路、DRM等1.2.性能测试启播(首屏)时间,更细粒度的考量因素可能有启播各个环节细分的耗时seek耗时丢帧(卡顿)率,更细粒度的考量因素可能有连续丢帧数、每秒丢帧数等原创 2021-07-20 10:05:07 · 3111 阅读 · 4 评论 -
ffmpeg源码分析与应用示例(二)——代码抽取的意义
我最早是在课堂上听说的可以从ffmpeg中通过抽取代码的方式提取出一个完整的编码器或解码器,最近正好在看ffmepg的源码,就想尝试一下。但经过调查之后,发现了代码抽取的几个问题:1、如果只是抱着精简ffmpeg的目的进行代码抽取,则完全可以通过设置编译指令来实现,例如,希望编译出一个只有H264解码器功能的ffmpeg,可以使用如下的命令 ./configure --disabl...原创 2015-12-16 12:25:41 · 2181 阅读 · 0 评论 -
ffmpeg源码分析与应用示例(一)——H.264解码与QP提取
本文包含以下内容1、H.264解码流程详述与对应ffmpeg源码解析2、针对一个应用实例介绍通过修改ffmpeg源码解决问题的方案具有较强的综合性。先介绍一下在第二部分中将要解决的实际问题:自ffmpeg 1.2版本之后,用于描述解码后的视音频原始数据相关信息的AVFrame结构体被移出了avcodec库,转而加入了avutil库之中,这样的改变本来是合理的,但是也带来了一些问题。例如...原创 2015-12-13 21:21:09 · 7020 阅读 · 0 评论 -
ffmpeg综合应用示例(五)——多路视频合并
本文的示例将实现:把多个子视频根据配置参数在空间上合并成一个视频,并可以对每一路的视频和音频加入特效。示例包含了1、如何利用avfilter编程实现视频合并以及加入各类不同滤镜的功能具有较强的综合性。最终效果如下:对四路视频进行了合并实现了分屏效果,并且给第一路视频加了边缘检测效果,给最后一路视频加了反相效果。在ffmpeg超详细综合教程(二)——为直播流添加滤镜 一文中讲...原创 2017-09-09 20:06:10 · 21969 阅读 · 10 评论 -
ffmpeg综合应用示例(四)——摄像头直播的视音频同步
在ffmpeg超详细综合教程——摄像头直播文中完成了一个读取PC摄像头视频数据并以RTMP协议发送为直播流的示例,但是并没有实现对音频的支持,所以在这篇文章中对该示例做进一步的完善并且详细分析直播流的视音频同步问题,同样,也会给出代码示例。对于直播流来说,这里只考虑发送端的同步问题,而其中的原理其实很简单,概括起来分为如下几个步骤:1、解析视音频流,将视频流和音频流的时间戳用同样的时间基准...原创 2016-01-17 17:31:34 · 11756 阅读 · 20 评论 -
ffmpeg综合应用示例(三)——安卓手机摄像头编码
本文的示例将实现:读取安卓手机摄像头数据并使用H.264编码格式实时编码保存为flv文件。示例包含了1、编译适用于安卓平台的ffmpeg库2、在java中通过JNI使用ffmpeg3、读取安卓摄像头数据并在后台线程中使用ffmpeg进行编码的基本流程具有较强的综合性。编译适用于安卓平台的ffmpeg库平时我们编译ffmpeg类库都是在x86平台下,而安卓手机属于arm平台,...原创 2015-09-21 10:32:58 · 9688 阅读 · 44 评论 -
ffmpeg综合应用示例(二)——为直播流添加特效
在上一篇文章中,讲解了如何利用ffmpeg实现摄像头直播,本文将在此基础上,实现一个可以选择各种视频滤镜的摄像头直播示例。本文包含以下内容1、AVFilter的基本介绍2、如何利用ffmpeg命令行工具实现各种视频滤镜3、如何利用libavfilter编程实现在摄像头直播流中加入各类不同滤镜的功能具有较强的综合性。AVFilter的基本介绍AVFilter的功能十分强大,可...原创 2015-09-02 15:25:07 · 12579 阅读 · 7 评论 -
ffmpeg综合应用示例(一)——摄像头直播
本文的示例将实现:读取PC摄像头视频数据并以RTMP协议发送为直播流。示例包含了1、ffmpeg的libavdevice的使用2、视频解码、编码、推流的基本流程具有较强的综合性。要使用libavdevice的相关函数,首先需要注册相关组件 avdevice_register_all();接下来我们要列出电脑中可用的dshow设备 AVFormatCo...原创 2015-08-29 12:54:55 · 21544 阅读 · 24 评论 -
WebRTC VideoEngine综合应用示例(三)——集成X264编码和ffmpeg解码
本系列目前共三篇文章,后续还会更新WebRTC VideoEngine综合应用示例(一)——视频通话的基本流程WebRTC VideoEngine综合应用示例(二)——集成OPENH264编解码器WebRTC VideoEngine综合应用示例(三)——集成X264编码和ffmpeg解码关注下方公众号,回复“webrtc视频通话”,查看源码地址,是一个可以脱离webrtc那个大项目...原创 2015-08-27 10:55:09 · 8894 阅读 · 9 评论 -
WebRTC VideoEngine综合应用示例(二)——集成OPENH264编解码器
本系列目前共三篇文章,后续还会更新WebRTC VideoEngine综合应用示例(一)——视频通话的基本流程WebRTC VideoEngine综合应用示例(二)——集成OPENH264编解码器WebRTC VideoEngine综合应用示例(三)——集成X264编码和ffmpeg解码关注下方公众号,回复“webrtc视频通话”,查看源码地址,是一个可以脱离webrtc那个大项目...原创 2015-08-25 10:25:17 · 10061 阅读 · 7 评论 -
WebRTC VideoEngine综合应用示例(一)——视频通话的基本流程
本系列目前共三篇文章,后续还会更新WebRTC VideoEngine综合应用示例(一)——视频通话的基本流程WebRTC VideoEngine综合应用示例(二)——集成OPENH264编解码器WebRTC VideoEngine综合应用示例(三)——集成X264编码和ffmpeg解码关注下方公众号,回复“webrtc视频通话”,查看源码地址,是一个可以脱离webrtc那个大项目...原创 2015-08-09 23:21:48 · 12214 阅读 · 15 评论 -
HEVC码率控制算法研究与HM相应代码分析(三)——算法及代码分析
在前两篇文章中,首先介绍了HEVC标准和编码流程,然后介绍了在HEVC中采用的全新的R-λ模型,本文将基于前面的内容和相应代码对码率控制算法进行详细的分析。下面基于JCTVC-K0103提案详细介绍一下HEVC中基于R-λ模型的码率控制方法。同时基于HM-10对码率控制部分的代码做一个简要分析,相比于JM,HM中更多的使用了面向对象技术,结构更加清楚明了,码率控制相关代码的基本调用层次如下,纵...原创 2015-08-08 13:46:43 · 5991 阅读 · 1 评论 -
HEVC码率控制算法研究与HM相应代码分析(二)——新的码率控制模型
下面简单回顾一下H.264中的码率控制算法,并说明为什么不能直接将之前的码率控制算法用于HEVC,同时介绍一下一种很有意思的新的R-λ模型。在H.264以及之前的码率控制算法中,R-Q模型得到了广泛的使用,这一模型认为Q是决定码率的主要因素。但研究发现,只有当所有除了Q以外其他的编码参数均固定的情况下,这一假设才是成立的。在实际应用中,如果其他的编码参数并不是十分灵活,这一假设还是基本成立的。但...原创 2015-08-08 13:16:49 · 5569 阅读 · 1 评论 -
HEVC码率控制算法研究与HM相应代码分析(一)——HEVC标准及编码流程介绍
本系列文章分为三个部分,首先对HEVC标准做一个介绍,然后回顾一下H.264中的码率控制方法,分析为什么不能直接沿用旧的方法,最后具体分析HEVC的码率控制方法和相应代码。HEVC标准介绍首先我们需要明白的是,其实每一代视频编码标准的更新都是为了实现两个大目标:更好的支持高分辨视频;以更高的压缩率达到同等的主观质量。除此之外,还有提高网络适配性(比如在H.264中定义的网络抽象层概念)、抗...原创 2015-08-08 11:43:58 · 10040 阅读 · 4 评论 -
H.264码率控制算法研究及JM相应代码分析(三)
在前一篇文章的基础上继续往下讲。基本单元层码率控制如果不是选择一帧作为一个基本单元,还得添加上额外的基本单元层码率控制。 同帧层码率控制一样,I帧以单一的QP值编码,且这个QP值和帧层码率控制中的QP值求法一样。B帧也是以单一的QP值编码,以几乎和帧层中一样的方法求出,只是QP1和QP2由相应帧中所有基本单元的QP的平均值替换。 main encode_sequence...原创 2015-07-07 15:12:09 · 2103 阅读 · 0 评论 -
H.264码率控制算法研究及JM相应代码分析(二)
在前一篇文章的基础上,现在先看一下MPEG4 编码标准中应用的码率控制算法,总结起来,各大算法都是在解决两个问题:RD 率失真的优化以及避免缓冲区的上溢下溢。MPEG-4 VM8 码率控制算法在这里要先介绍一个非常著名的二项式率失真模型,其实说来也简单,在前面我们提到拉普拉斯分布信源的概率密度函数为:代码分析下面结合JM代码来看一下H.264的码率控制算法。首先需要...原创 2015-07-07 14:44:54 · 3075 阅读 · 0 评论 -
H.264码率控制算法研究及JM相应代码分析(一)
这是之前我们学校的课程作业,要求个人整理分析H.264码率控制算法及JM相应代码,个人感觉自己做的还不错,所以发出来给大家分享一下。鉴于公式什么的太多了,我这里就直接从文档里截图了。文末包含了pdf文件的下载链接。要明白码率控制算法,首先要理解率失真理论,定义如下而要实现这一目标的基本方法有两个:拉格朗日乘子法和动态规划方法所以最后无论哪种方法,综合考虑起来都只能得到局部最...原创 2015-07-07 14:30:10 · 6006 阅读 · 0 评论 -
Linux下Intel Media SDK的安装
Linux下Intel Media Server Studio的安装1、首先需要注意的是,所有操作均需在真机上进行,不能在虚拟机中进行,因为虚拟机的显卡也是虚拟的。2、下载安装包下载页面https://software.intel.com/en-us/intel-media-server-studio其中Community版本为免费版,但不含有HEVC编解码器插件,若需支持HEVC编解码,...原创 2015-06-06 21:48:28 · 8941 阅读 · 1 评论 -
硬件编码工具简介
Intel Media SDKIntel Media SDK可以利用Intel平台的一系列处理器为视频编解码和预处理应用提供硬件加速。除支持硬件编码外,Intel Media SDK在无法实现硬件加速的平台上也提供仅利用CPU的软编功能。项目网址:https://software.intel.com/en-us/media-client-solutions支持的硬件:配有Int...原创 2015-06-01 12:25:24 · 5505 阅读 · 0 评论 -
多媒体性能优化(一)-减少丢帧
本文将以一个视频播放的丢帧问题为例,介绍在解决这一性能问题时的思路、所使用的工具、尝试的优化方案和一些测试的结果,具有较强的综合性。当然,我本人在性能优化方面也只是新手,欢迎大家一起讨论交流。问题ExoPlayer 是google推出的一款开源java播放器,包括youtube在内的很多视频服务商都在使用它,但是我们发现,在一些性能比较低的硬件平台上,使用exoplayer播放4k HLS视频时会出原创 2017-06-24 14:02:47 · 5808 阅读 · 3 评论 -
10bit YUV数据在内存中的存储格式
我们知道为了获得更好的动态范围,除了常见的8bit yuv外,还有10bit,16bit这样的yuv数据。8bit的yuv数据还好理解,每一个像素8bit,在内存中自然也就是一个字节一个字节的存储咯,16bit的也类似,每一个像素对应两个字节,在内存中存起来也非常方便,那么10bit呢?在不做任何调查的情况下,我们可以凭直觉猜想有两种存储方式: 1.每个像素依然占用16bit两个字节,但是其中6个原创 2017-03-20 22:14:57 · 19987 阅读 · 5 评论 -
Android NuPlayer要点详解
本文将基于Android N源码对NuPlayer做一个详解。NuPlayer是Android中本地和流媒体播放所用的播放器。1、AHandler机制首先介绍NuPlayer中无处不在的AHandler机制 frameworks/av/include/media/stagefright/foundation/ frameworks/av/media/libstagefright/foundati原创 2017-02-24 23:21:57 · 12237 阅读 · 1 评论 -
分享几个Linux下的码流分析工具
windows下的码流分析工具非常多,比如elecard streameye,当然还有众多开源贡献者制作的小工具,但是很多时候我们都需要在Linux下做开发,也可能需要做一些简单的码流分析工作,这里就分享几个常用的工具给大家.这些工具使用起来都很简单,不用输特别长的命令,也都有对应的windows版本.如果有朋友还了解其他工具,可以在评论中补充~0\Mediainfo这个就不用介绍了吧,大...原创 2016-08-06 00:01:07 · 11330 阅读 · 0 评论 -
分享一些在ICME2016会议上获得的多媒体领域学术与科技动态
上周参加了ICME2016国际会议,做了presentation,也了解到了很多多媒体领域的学术动态和前沿科技,在这里整理分享给大家,希望大家有机会也多多参加这些优秀的会议,在开会的城市游玩之余也是能有很多收获的。会议简介ICME,全称International Conference on Multimedia and Expo,即国际多媒体与博览会议,又IEEE 计算机学会、电路与系统学...原创 2016-07-22 23:21:32 · 8729 阅读 · 0 评论 -
x264源码分析与应用示例(三)——浅谈码率控制的优化问题
打算写几篇文章记录一下学习x264源码的成果,主要包含两个方面的内容,一是基本的x264视频编码流程,二是x264中的码率控制,之前分析过JM和HM的码率控制,但是x264的码率控制一直没看,这回也算是补上了。然后再以两个实际问题为例介绍通过研究源码后给出的解决方案,一个是如何修改编码参数获得更好的视频质量的问题,一个是修改源码改进x264码率控制算法的问题。本文包含以下内容,由于这部分内容比较...原创 2016-02-27 04:38:41 · 3021 阅读 · 0 评论