多媒体
文章平均质量分 69
微岩
这个作者很懒,什么都没留下…
展开
-
FFprobe查看&统计视频信息
1. 查看音视频信息1.1 查看基本信息ffprobe 1280x720_h264_8mbps_30fps.mp4Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '1280x720_h264_8mbps_30fps.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 encoder原创 2021-10-09 16:28:39 · 7186 阅读 · 0 评论 -
FFmpeg 命令常见操作
1. 转码ffmpeg -i source.mp4 -ss 20 -t 10 -c copy my.mp4ffmpeg -ss 10 -t 15 -accurate_seek -i test.mp4 -c:a copy -c:v copy tt.mp4-i : source-ss:start time-t :duration-c :video,audio codec可以设置输出视频的编码格式-vcodec xxx-acodec xxx-loglevel 562. 视频–> 图片原创 2021-10-09 15:54:27 · 562 阅读 · 0 评论 -
数字媒体技术揭秘
一、史话如果算上模拟时代的话,多媒体传输并非多么新鲜的事情。早在上世纪三十年代,人们便可以在家观赏奥运赛事:来自柏林现场的活动画面连同声音通过电缆或者无线电波被传送到世界各地1), 虽然是黑白图像,但就质量来说并不见得就比YouTube上NBC的北京2008差。从某种意义上讲,数字技术的突飞猛进对多媒体通信的推动并非它能够在 多大程度上提高媒体内容的质量——这方面某些斯基们所起的所用可能会更大——而转载 2015-08-10 17:53:26 · 2638 阅读 · 0 评论 -
Android实现视频硬编码
0. 前言Android视频录制一直是个大问题,之前做一款短视频应用,视频录制采用ffmpeg,虽然做了很多优化,但是画面质量和帧率难以达到要求,至少达不到IOS的水准。所以痛下决心研究Android平台的硬编码方案。硬编码所谓的硬编码就是采用DSP对视频帧进行编码,相对于软编码来说,硬编码的编码效率天差地别。更高的编码效率就意味着在相同帧率下能够获得更高的分辨率,更佳的画面质量。1. Androi原创 2017-02-27 20:19:29 · 12790 阅读 · 1 评论 -
介绍一个非常好用的跨平台C++开源框架:openFrameworks
openframeworks(http://www.openframeworks.cc/ )是C++为基准的简洁开发框架,擅长开发图像和动画。能在多个平台上运行(PC, Mac, Linux, iPhone)。主要有以下特征:◇ 通过编码来制作图像和动画。 ◇ 免费使用◇ 以C++为基准的语法,但即使没有高深的 C++ 知识也能写出有难度的代码。◇ 包含 openGL (图形), rtAudio (声音), freeType (字体), freeImage (图像), quicktime (动画转载 2017-01-23 15:20:38 · 7666 阅读 · 0 评论 -
比特率,帧率,分辨率对视频画质的影响
0.前言前几天和别人讨论视频编码参数对视频清晰度影响,今日查查文献在此记录总结下。对最终用户而言,其只关心视频的文件大小和画面质量。 其中画面质量包括:分辨率,清晰度和流畅度。 (1)帧率(FPS)决定视频流产度,对视频大小存在影响(2)仅仅增加分辨率,会降低视频质量的主观感受;只有在保证清晰度的条件下,才能提高视频质量的主观感受(3)比特率与视频质量正相关,且存在边际效应递减现象(4)比特率和视频大小线性原创 2017-02-21 18:25:09 · 56474 阅读 · 1 评论 -
Android 编译FFmpeg x264
1. Android FFmpeg开发基本流程(1)X264/FFmpeg + NDK编译 (2)ffmpeg.so + 编解码C代码 (3)Android.mk 编译 (4)JNI (5)JAVA代码调用基本流程如下图所示: 本文涉及FFmpeg,x264编译。2. NDK配置首先需要配置NDK开发环境,略 (1)设置$NDK环境变量# Detect NDKif [[ -z "$N原创 2017-02-22 17:56:58 · 2923 阅读 · 0 评论 -
Android Java调用ffmpeg命令
0. 前言ffmpeg命令很强大,但是在Android工程中无法执行可执行文件ffmpeg,即无法使用ffmpeg。 本文介绍把ffmpeg改造成库文件,然后通过JNI调用它,即可实现在Java中使用ffmpeg命令。PS: 本工程依赖于前文Android 编译FFmpeg x264。1. ffmpeg1.1 main to run(1)ffmpeg.h 进入ffmpeg源代码,修改ffmpe原创 2017-02-23 17:45:19 · 4633 阅读 · 0 评论 -
OpenAL 使用基本流程
介绍如何使用OpenAL播放一个音频介绍了如何使用OpenAL缓冲区原创 2016-12-16 19:20:14 · 8207 阅读 · 0 评论 -
音频节奏检测(Onset Detection)
1. 前言最近市场上出现一些多个视频拼接而成MV,其原理是根据音频的节拍变换切换视频。 我在这里讲述下如何进行音频节拍检测。2. 音频检测一般流程3.3.1 原始音频频谱以1024为窗口(即每次读取1024个采样点)进行量化 WaveDecoder decoder = new WaveDecoder( new FileInputStream( "samples/sample.wav"原创 2016-12-17 17:12:29 · 30191 阅读 · 12 评论 -
通过OpenAL对音频添加音效并存储
1. 前言前面的文章讲了如何使用OpenAL对音频添加音效,并播放,参见: OpenAL 使用基本流程 使用OpenAL混音,添加音频特效本文谈谈如何对音频进行渲染,然后存储下来。2. 初始化初始化过程与之前的文章(OpenAL 使用基本流程)提到了基本一致,下面做了略微修改: bool CHXALRender::init(int channels, int sampleRate)原创 2016-12-17 11:24:36 · 2647 阅读 · 2 评论 -
使用OpenAL混音,添加音频特效
本文讲述了如何使用OpenAL对音频进行后处理,添加音效。1. OpenAL 支持的混音类型2. 初始化音频特效3. 应用特效原创 2016-12-16 19:52:16 · 3448 阅读 · 1 评论 -
Android OpenAL编译
1. OpenALOpenAL是一个开源的音频后处理工具包,可以添加各种音效,修改声源空间位置等等。在前面的文章【OpenAL简介】中也有介绍。 IOS上已经集成了OpenAL,android平台暂未集成。但是OpenAL全部用C实现,而且不大,集成起来比较方便。 PS:android平台也有专门的音频后处理模块,但是使用起来感觉不是很好,貌似还不太稳定。2. 下载源代码https://gith原创 2016-11-24 14:20:24 · 5155 阅读 · 1 评论 -
OpenAL简介
OpenAL简介OpenAL(Open Audio Library)是专门负责3D定位音效方面的API,可用来开放地、跨平台地访问声音硬件。与那些今日在游戏中得到普遍应用的较大的面向对象的库相比,OpenAL是一个简单明了的替代方案。OpenAL一直在不断的创新,几乎没有一个API能达到她的全部潜能。一个很大的原因是因为hardware加速建立在特殊的版卡上。然而,Creative Labs是Ope转载 2016-06-21 14:52:53 · 13932 阅读 · 0 评论 -
Mac FFmpeg x265, aac, ffplay编译安装
1. 通过HomeBrew安装最简单,最方便的方法是通过HomeBrew安装, HomeBrew也是通过下载源代码,进行编译安装的,所以不想麻烦通过HomeBrew是明智的选择。1.1安装HomeBrew如果HomeBrew没有安装,可以通过下面命令安装:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebre原创 2016-12-08 15:34:57 · 7807 阅读 · 1 评论 -
Mac XCode FFmpeg 开发环境配置
1. 安装FFmpeg这个可以参考我前一篇文章Mac FFmpeg x265, aac, ffplay编译安装2. 创建XCode工程我创建了一个FFTest的工程, 3. 导入FFmpeg到重点,其实要说的就是这个3.1 Set Library Search Paths找到Build Settings –> Search Paths –>Library Search Paths 在右边输入FF原创 2016-12-08 15:59:19 · 5779 阅读 · 2 评论 -
FFmpeg日志输出到adb logcat
0. 前言在Android中编写的FFmpeg程序,没有经过设置的话是无法在adb logcat中看到ffmpeg的日志,对于NDK程序而言其本身就缺乏适当的调试方法(AndroidStudio可以支持调试,但是很麻烦),如果再不能查看日志,那就算是废了。 本文在此提供一种把ffmpeg日志输出到adb logcat的方法。1. av_log_set_callbackffmpeg中av_log_s原创 2017-02-25 14:48:08 · 3713 阅读 · 0 评论 -
Google你能把Android的多媒体搞得再烂一些吗
搞了几年Android多媒体了,最感受就是Android的多媒体真的非常烂! @Google,你做的再烂一点吗?最近在搞Android视频编码,真是快被折腾疯了,最早用FFmpeg x264编码,虽然做了很多优化,但是效率还是一个问题;最后采用硬编码去搞,在解决了一系列的问题后算是跑通了,但是最后发现画面质量low的让我怀疑是不是我眼瞎!!! 同样的比特率,在Android编出来的和IOS没法比原创 2017-03-09 13:54:03 · 821 阅读 · 1 评论 -
三种主流流媒体协议比较
一、介绍在流媒体协议中,常用的流媒体协议主要有 HTTP协议,RTSP协议和RTMP协议。 在国内视频网站多采用HTTP+MP4或者HTTP+FLV协议传输视频,而国外使用RTMP,RTSP等专门的流媒体格式。二、协议介绍1、HTTP协议:HTTP的视频协议,主要是在互联网普及之后。在互联网上看视频的需求下形成的。 最初的HTTP视频协议,没有任何特别之处,就是通用的HTTP文件渐进式下载转载 2017-03-06 12:22:03 · 18715 阅读 · 0 评论 -
Android Camera 高级特性——闪光灯、抗闪烁、场景
Camera除了对焦和测光之外还有还有很多其它特性,如闪光灯、抗闪烁、场景等,这些功能的设置比较简单,只需要在Camera.Parameters中配置一下就可以了,本文就简单介绍下各个Feature中的定义。原创 2018-09-28 21:11:52 · 6051 阅读 · 1 评论 -
Android Camera高级特性——手动对焦
对焦可以说是Camera最重要的基本的功能,也是最常用的基本功能。本文介绍Android Camera的几种对焦方式,并介绍手动对焦如何实现的。原创 2018-09-27 18:16:21 · 7166 阅读 · 2 评论 -
Android Camera API使用指南
虽然前文说道Android在5.0之后就推出了Camera2 API,但是各个厂家的基本未适配,导致目前市场上大部分机型使用的仍然是Camera1 API。PS:Android 9.0 Google强制要求各个平台厂商(高通/MTK/华为等)支持Camera2,不再兼容Camera1。本文简单介绍了Camera是如何使用的。原创 2018-09-27 18:03:54 · 2514 阅读 · 0 评论 -
B帧对视频清晰度/码率的影响
0. 前言在H264 Extended Profile中就引入了B帧编码,一直以来同行都对B帧的意义存在争议:正方:B帧能够大幅减少视频码率,并提高运动场景下的清晰度;反方:B帧对码率和清晰度没多大帮助笔者针对这个争议找了一个视频,用x264和Android MediaCodec测试验证B帧到底有没有优化效果。1. 什么是B帧1.1 什么是B帧?B帧法(B fra...原创 2018-09-16 18:18:51 · 16356 阅读 · 10 评论 -
Android MediaCodec H264编码设置Main Profile & High Profile
1. 为什么要用Main Profile & High Profile在Android上硬编码视频码率远远高于软编码,原因是Android只支持H264 Baseline。MP(Main Profile )& HP(High Profile)可以大幅减少视频的码率。关于H264 Profile参见:H264 Profile。2. Android平台对MP & HP的...原创 2018-09-16 16:30:01 · 12760 阅读 · 0 评论 -
Android MediaCodec参数笔记
1. Supported media formatsSupported Codecs从上表上看编码方面:H264仅支持到Main Profile,H265暂时不支持。 但是平台商的部分高端芯片已经支持H264 HP,H265编码。2. MediaCodecInfo提供MediaCodec在设备上的支持信息。 获取MediaCodecInfo: private...原创 2018-07-05 16:59:46 · 9937 阅读 · 0 评论 -
搭建Android Camera项目工程
0. 前言这块内容非常简单,需要注意的有两个:需要申请相机权限需要一个Surface用来预览1. 申请相机权限1.1 申请Camera权限<uses-permission android:name="android.permission.CAMERA" />1.2 声明对应的特性某个特性首先需要在manifest中申请对应特性<uses-...原创 2018-06-05 20:21:24 · 1334 阅读 · 1 评论 -
Android Camera开发指南
0. 前言蓦然回首,笔者从事Android多媒体开发工作已经好多年了,这一年来工作特别忙碌(当然产品上也获得了巨大的成就)文章写的很少了。最近会写一系列的文章,总结下自己在Android多媒体,图像图像,Camera等方面的积累。 因为之前关于Camera方面的文章略少,并且最近也在做Camera2相关的工作,所以笔者将首先从Camera开始完成一个Camera系列的专题。1. 主要...原创 2018-06-05 19:55:53 · 571 阅读 · 0 评论 -
ffmpeg视频精准剪切
1. 导言ffmepg剪切视频,很方便,但是也有很大缺陷: (1)剪切时间点不精确 (2)有时剪切的视频开头有黑屏造成这些问题的原因是ffmpeg无法seek到非关键帧上。 一下本文通过一些参数配置尽可能地减轻以上问题2. 基本剪切方法ffmpeg -i test.mp4 -ss 10 -t 15 -codec copy cut.mp4参数分析: -i : source -ss:st原创 2016-11-14 11:33:26 · 65785 阅读 · 10 评论 -
视频花屏分析
1. 前言视频花屏是多媒体工程师最常见的问题之一,也是最棘手的问题之一,笔者此前也数次遇到这样的问题,今天在此总结分享下经验。本文分析的重点是视频录制过程中引起的花屏问题,粗浅涉及视频播放。但是其中都不会涉及到编码器或者解码器本身所引起的花屏问题。本文所用到的测试资源如下图: 2. 视频花屏问题定位当遇到视频花屏时,首先要定位是最先出现的花屏的是哪个阶段产生的花屏。以视频录制为例,其具体流程如下:原创 2017-05-12 19:45:27 · 22562 阅读 · 5 评论 -
H264 Profile对比分析
0. 前言本文首先会谈谈profile和level是干什么的,然后聊聊用ffmpeg和x264命令行怎么指定对应参数,最后聊聊在代码中怎么使用设置profile和level。1. H264 Profile简单理解就是H264有多个版本,版本越高编码效率和压缩率就越高,对应的版本是Profile。 从低到高分别为:Baseline、Main、High 在相同配置情况下,High profile(H原创 2017-05-26 11:05:38 · 23295 阅读 · 0 评论 -
数字媒体技术揭秘(续)——压缩编码
前文: 数字媒体技术揭秘四、压缩技术4.1 理论基础廿世纪中叶,为了从理论上证明对信息系统进行优化的可行性,Shannon引入了熵的概念,用来表示信息的不确定性,熵越大,信息的不确定性就越大[4],而信息的不确定性越大,其对应的传输和存储成本就越高。换句话说,如果某种信息的熵不是那么大,则人们应该有信心使用有限的资源去承载它。举一个简单的例子,假设气象台负责预报明天是否天晴,而地震局负责预报明天是转载 2017-03-06 14:20:21 · 2889 阅读 · 0 评论 -
FFmpeg 时间单位与转换
1. 前言FFmpeg存在很多个时间单位,比如pts, dts, ffmpeg内部基准时间,常规时间 本文谈谈他们之间的转换2. ffmpeg内部基准时间与常规时间2.1 基准时间ffmpeg 内部的时间基为AV_TIME_BASE, 其大小如下:#define AV_TIME_BASE 1000000即,ffmpeg内部时间单位为微秒 (μs)AVStream duration : A原创 2016-11-14 15:34:36 · 7564 阅读 · 0 评论 -
android ffmpeg neno优化
1. 前言最近搞的视频监控项目,需要在android移动端做视频显示。用的是android ndk的开发方式, 利用ffmpeg作为解码库。640*480 分辨率下, 10帧每秒尚可正常播放, 但是15fps就比较吃力了,20fps就几乎不能看了。通过打日志的方式发现: 每显示一帧需要133毫秒,解码的时间占据了64毫秒,很显然, 解码已经成为了最大的瓶颈。 我们在网上搜了一圈之后,发现用转载 2016-11-14 14:37:08 · 1345 阅读 · 0 评论 -
音频采样率,时间戳分析
1. FFmpeg一个音频帧信息:2. pkt durationpkt_duration = nb_samples / sample_rate sample_rate = 48000 nb_samples = 1024 pkt_duration = 1024 / 48000 = 0.0213333. 显示时间与ptspresentation_time = pts / sample_原创 2016-11-14 14:27:33 · 2908 阅读 · 0 评论 -
Android Media Format 支持的格式
1. 网络协议2.翻译 2014-10-21 14:14:50 · 5190 阅读 · 0 评论 -
Android MediaPlayer
1. MediaPlayer播放流程下面是在Java中调用MediaPlayer实现播放的简单流程mMediaPlayer.setDataSource(filePath);mMediaPlayer.prepare();mDuration.setText(String.valueOf(mMediaPlayer.getDuration()));mVideoWidht = mMediaPl原创 2014-09-30 11:04:51 · 2422 阅读 · 0 评论 -
android媒体--stagefright概述【一】
最近杂七杂八的忙碌着,前几天看了下这部分主要是stagefright模块的,所以更改下名字 做了挺长时间的android平台的媒体开发,对之前的分析进行一个阶段性的总结。 一、android结构图(上下文关系) 二、android目录结构 自从android4.2版本之后,媒体的相关代码都放到framework/a转载 2014-09-16 20:24:24 · 2176 阅读 · 0 评论 -
StageFright框架流程解读
1、 StageFright介绍 Android froyo版本多媒体引擎做了变动,新添加了stagefright框架,并且默认情况android选择stagefright,并没有完全抛弃opencore,主要是做了一个OMX层,仅仅是对 opencore的omx-component部分做了引用。stagefright是在MediaPlayerService这一层加入的,和op转载 2014-09-22 17:04:51 · 1451 阅读 · 0 评论 -
H.264结构
1. H.264H.264亦称为A2. 结构原创 2014-09-22 17:56:19 · 1723 阅读 · 0 评论 -
Android OpenMax 调用顺序
1 OMX 核心初始化 _OMX_MasterInit1)调用OMX_Init函数->OsclInit::Init(error, &select); //init all Oscl layers except Oscl scheduler.->_Try_OMX_Create(error, data); //create the OMX singleton->OsclSingleto转载 2014-09-22 16:19:33 · 1681 阅读 · 0 评论