Android FFmpeg多媒体
文章平均质量分 64
Android FFmpeg 多媒体收集总结
微岩
这个作者很懒,什么都没留下…
展开
-
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 · 3717 阅读 · 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 · 4640 阅读 · 0 评论 -
比特率,帧率,分辨率对视频画质的影响
0.前言前几天和别人讨论视频编码参数对视频清晰度影响,今日查查文献在此记录总结下。对最终用户而言,其只关心视频的文件大小和画面质量。 其中画面质量包括:分辨率,清晰度和流畅度。 (1)帧率(FPS)决定视频流产度,对视频大小存在影响(2)仅仅增加分辨率,会降低视频质量的主观感受;只有在保证清晰度的条件下,才能提高视频质量的主观感受(3)比特率与视频质量正相关,且存在边际效应递减现象(4)比特率和视频大小线性原创 2017-02-21 18:25:09 · 56524 阅读 · 1 评论 -
音频节奏检测(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 · 30204 阅读 · 12 评论 -
通过OpenAL对音频添加音效并存储
1. 前言前面的文章讲了如何使用OpenAL对音频添加音效,并播放,参见: OpenAL 使用基本流程 使用OpenAL混音,添加音频特效本文谈谈如何对音频进行渲染,然后存储下来。2. 初始化初始化过程与之前的文章(OpenAL 使用基本流程)提到了基本一致,下面做了略微修改: bool CHXALRender::init(int channels, int sampleRate)原创 2016-12-17 11:24:36 · 2649 阅读 · 2 评论 -
使用OpenAL混音,添加音频特效
本文讲述了如何使用OpenAL对音频进行后处理,添加音效。1. OpenAL 支持的混音类型2. 初始化音频特效3. 应用特效原创 2016-12-16 19:52:16 · 3451 阅读 · 1 评论 -
OpenAL 使用基本流程
介绍如何使用OpenAL播放一个音频介绍了如何使用OpenAL缓冲区原创 2016-12-16 19:20:14 · 8215 阅读 · 0 评论 -
Android OpenAL编译
1. OpenALOpenAL是一个开源的音频后处理工具包,可以添加各种音效,修改声源空间位置等等。在前面的文章【OpenAL简介】中也有介绍。 IOS上已经集成了OpenAL,android平台暂未集成。但是OpenAL全部用C实现,而且不大,集成起来比较方便。 PS:android平台也有专门的音频后处理模块,但是使用起来感觉不是很好,貌似还不太稳定。2. 下载源代码https://gith原创 2016-11-24 14:20:24 · 5159 阅读 · 1 评论 -
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 · 7568 阅读 · 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 · 2913 阅读 · 0 评论 -
AudioChannelManipulation
Manipulating audio channels with ffmpegContentsstereo → mono streamstereo → 2 × mono filesstereo → 2 × mono streamsmono → stereo2 × mono → stereo6 × mono → 5.15.1 → 6 × mono5.1 → stereo2转载 2016-11-14 14:06:09 · 1547 阅读 · 1 评论 -
ffmpeg 调整音视频播放速度
1. 调整视频速率1.1 原理调整视频速率的原理为:修改视频的pts,dts 此过程由于不用进行解码编码,所以费时很少1.2 setpts修改视频速率ffmpeg -i input.mkv -an -filter:v "setpts=0.5*PTS" output.mkv注意:调整速度倍率范围[0.25, 4]如果只调整视频的话最好把音频禁掉对视频进行加速时,如果不想丢帧,可以用-r 参数指原创 2016-11-14 14:01:58 · 29821 阅读 · 5 评论 -
ffmpeg混音以及音视频混合
Duration = MAX(input a, v)1. Audio merge1.1 amerge-ac 2 speed upffmpeg -i test.mp4 -i test.mp3 -filter_complex "[0:a] [1:a]amerge=inputs=2[aout]" -map "[aout]" -ac 2 mix_amerge.aacPS: Without ac spee原创 2016-11-14 13:38:58 · 17294 阅读 · 3 评论 -
ffmpeg 视频拼接
1. 视频拼接ffmpeg视频拼接需要用concat参数。 此外ffmpeg拼接的视频和原视频的封装格式有关2. ffmpeg视频拼接的几种方法2.1 利用文件列表# this is a commentfile '/path/to/file1'file '/path/to/file2'file '/path/to/file3'ffmpeg -f concat -i mylist.txt -c原创 2016-11-14 13:35:11 · 12391 阅读 · 0 评论 -
ffmpeg 查看YUV图片/视频
采用ffplay 查看YUV数据包括视频或者图片 ffplay [-f rawvideo] -video_size 640x480 test.yuv 注: (1)-f rawvideo : 经笔者测试这个选项可加可不加。 (2)yuv文件不包涵宽高数据所以必须用-video_size指定宽和高,格式为:widthxheight (3)test.yuv可以是一帧(图片)或者多帧(视频)数据原创 2015-10-28 16:39:55 · 13654 阅读 · 0 评论 -
ffmpeg视频剪切、转码
1. 命令实例ffmpeg -i source.mp4 -ss 20 -t 10 -c copy des.mp4 功能:将source.mp4截取[20s,30s]之间的数据,仅仅裁剪不转码,然后输出为des.mp42. 参数解析i : 输入视频 -ss:start time -t :duration -c :video,audio codec -vcodec xxx -acodec x原创 2015-10-28 16:32:37 · 3033 阅读 · 0 评论 -
深入浅出FFMPEG
1. 认识FFMPEGFFMPEG堪称自由软件中最完备的一套多媒体支持库,它几乎实现了所有当下常见的数据封装格式、多媒体传输协议以及音视频编解码器。因此,对于从事多媒 体技术开发的工程师来说,深入研究FFMPEG成为一门必不可少的工作,可以这样说,FFMPEG之于多媒体开发工程师的重要性正如kernel之于嵌入 式系统工程师一般。几个小知识:FFMPEG项目是由法国人Fabrice Bellard发转载 2015-08-10 14:43:57 · 2531 阅读 · 1 评论 -
FFMPEG write 函数
FFMPEG write 函数:ffmpeg write:int avformat_alloc_output_context2(AVFormatContext **ctx, AVOutputFormat *oformat, const char *format_name, const char *filename);//add streamAVCodec *avcodec_find_原创 2013-04-16 16:01:14 · 2133 阅读 · 0 评论 -
ffmpeg在eclipse中的开发配置
我看过网上的许多文章,都是把ffmpeg的源文件采用Makefile的方式导入Eclispe中,然后在eclipse中编译,这样很麻烦,还出现很多问题。 本文的配置不同于其它文章的方法,首先在系统里编译安装ffmpeg, 然后在eclipse-cdt中建立C/C++程序,在编译链接的时候添加需要的库就行了,能够开发、编译、调试。1. ffmpeg的安装见Linux下ffmpe原创 2013-03-21 17:47:45 · 2069 阅读 · 0 评论 -
android ffmpeg neno优化
1. 前言最近搞的视频监控项目,需要在android移动端做视频显示。用的是android ndk的开发方式, 利用ffmpeg作为解码库。640*480 分辨率下, 10帧每秒尚可正常播放, 但是15fps就比较吃力了,20fps就几乎不能看了。通过打日志的方式发现: 每显示一帧需要133毫秒,解码的时间占据了64毫秒,很显然, 解码已经成为了最大的瓶颈。 我们在网上搜了一圈之后,发现用转载 2016-11-14 14:37:08 · 1347 阅读 · 0 评论 -
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 · 2926 阅读 · 0 评论 -
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 · 5780 阅读 · 2 评论 -
linux 编译ffmpeg 支持x264, x265
1. 前言本教程涉及的ffmpeg, x264, x2652. 环境依赖2.1 删除系统中安装的ffmpeg等库sudo apt-get --purge remove ffmpeg mplayer x264 x2652.2 安装依赖库sudo apt-get updatesudo apt-get -y --force-yes install autocon原创 2015-06-02 19:49:42 · 6272 阅读 · 0 评论 -
Android MediaExtractor setDataSource
setDataSource时序图 1. MediaExtractor(java)file: frameworks/base/media/java/android/mediaf/MediaExtractor.java 目前Android 5.0仅支持本地视频 public final void setDataSource(FileDescriptor fd) throws IOExceptio原创 2015-09-01 20:04:04 · 6886 阅读 · 1 评论 -
Android MediaExtractor Construction & Destruction
通过源代码分析MediaExtractor的初始化和销毁过程。1. native_init2. native_setup3. native_finalize原创 2015-09-01 15:59:02 · 200 阅读 · 0 评论 -
Android MediaScanner总结
1. 简介自此Android MediaScanner的源代码分析已经全部写完,前后断断续续写了大半个月的时间,至今刚刚完成。现在对MediaScanner做一下总结。(其实也没啥好总结的,MediaScanner整体架构还是参考Android MediaScanner 总纲 )2. 纲领性文章Android MediaScanner 总纲 此文对MediaScanner架构做了详细描述,包括M原创 2015-07-20 15:18:00 · 1486 阅读 · 0 评论 -
Android StageFrightMediaScanner源代码解析
本文从Android源代码分析MediaScanner扫描文件的最终节点StageFrightMediaScanner。StageFrightMediaScanner中函数比较少,真正处理媒体文件的processFileInternal函数,在此函数中通过调用MediaMetadataRetriever类处理媒体文件,然后把获取到的信息向上传递,最后写入数据库。原创 2015-07-20 14:48:32 · 1826 阅读 · 0 评论 -
Android MediaScanner.cpp 源代码解析
1. 简介实现对文件夹的递归扫描 libmedia – libmedia.so frameworks\av\media\libmedia\MediaScanner.cpp 2. 对文件的扫描由JNI调用processDirectory,然后由doProcessDirectory和doProcessDirectoryEntry实现对文件夹的递归扫描。2.1 doProcessDirectory原创 2015-07-17 20:25:00 · 1899 阅读 · 0 评论 -
Android MediaScannerJNI源码详解
1.简介MediaScannerJNI的在MediaScanner中的地位可参考 Android MediaScanner 总纲 MediaScanner JNI文件名: android_media_MediaScanner.cpp 位置: frameworks\base\media\jni\android_media_MediaScanner.cpp android原创 2015-07-17 20:05:04 · 1775 阅读 · 0 评论 -
Android MediaScanner源代码解析
1. 简介MediaScanner向上和MediaProvider.MediaScannerService交互, 响应其请求; 向下和JNI交互. MediaScanner主要工作内容: (1)接收MediaScannerService的scanDirectories和scanSingleFile请求 (2)获取各个ContentProvider 环境(Audio,Video,Image,原创 2015-07-14 20:25:34 · 1780 阅读 · 0 评论 -
Android MediaScannerService源码分析
1. 简介MediaScannerService简称MSS, 是一个运行于后台的Service, 实现了Runnable接口. MediaScannerReceiver接收广播, 然后由MSS具体完成工作. MSS中主要工作在ServiceHandler实现2. 初始化2.1 onCreate()完成2项工作 (1)启动线程 // Start up the thread runni原创 2015-07-03 15:26:56 · 3263 阅读 · 0 评论 -
Android MediaScanner 总纲
1. MediaScanner HEAD2. 应用层 MediaProviderpackages\providers\MediaProvider (1) MediaProvider packages\providers\MediaProvider\MediaProvider.java MediaProvider继承于ContentProvider,主要用于创建媒体库的数据库表. 详细内容请查原创 2015-07-02 19:11:16 · 1664 阅读 · 0 评论 -
Android Media Framework 总纲
1. Media Framework 层次(1) 应用层Music, VideoPlayer(2) JAVA层MediaPlayer : frameworks/base/media/java/android/media/MediaPlayer.java(3) JNIJNI_MediaPlayer -- libmedia_jni.soframeworks/base/m原创 2015-04-06 17:24:06 · 3809 阅读 · 0 评论 -
stagefright框架(五)-Video Rendering
AwesomePlayer::onVideoEvent除了透過OMXCodec::read取得解碼後的資料外,還必須將這些資料(mVideoBuffer)傳給video renderer,以便畫到螢幕上去。(1) 要將mVideoBuffer中的資料畫出來之前,必須先建立mVideoRenderervoid AwesomePlayer::onVideoEvent() { ...转载 2015-04-06 18:07:04 · 1332 阅读 · 0 评论 -
stagefright框架(四)-Video Buffer傳輸流程
這篇文章將介紹Stagefright中是如何和OMX video decoder傳遞buffer。(1) OMXCodec會在一開始的時候透過read函式來傳送未解碼的data給decoder,並且要求decoder將解碼後的data傳回來status_t OMXCodec::read(...) { if (mInitialBufferSubmit) { mIn转载 2015-04-06 17:46:10 · 1329 阅读 · 0 评论 -
stagefright框架(三)-選擇Video Decoder
在《Stagefright (1) – Video Playback的流程》中,我們並沒有詳述Stagefright是如何根據影片檔的類型來選擇適合的video decoder,現在,就讓我們來看一看。(1) Video decoder是在onPrepareAsyncEvent中的initVideoDecoder被決定的OMXCodec::Create()會回傳video decode转载 2015-04-06 17:44:22 · 1280 阅读 · 0 评论 -
stagefright框架(二)- 和OpenMAX的運作
Stagefright的編解碼功能是利用OpenMAX框架,而且用的還是OpenCORE之OMX的實作,我們來看一下Stagefright和OMX是如何運作的。(1) OMX_InitOMXClient mClient;AwesomePlayer::AwesomePlayer(){ mClient.connect();}status_t转载 2015-04-06 17:41:38 · 1359 阅读 · 0 评论 -
Android Media Format 支持的格式
1. 网络协议2.翻译 2014-10-21 14:14:50 · 5190 阅读 · 0 评论 -
Android MediaPlayer Error/Info Code
1. 常见错误error(-38, 0)我认为-38表示在当前的MediaPlayer状态下,不能执行你的操作。具体如何做请参考:Android MediaPlayer另外我在其他资料中,发现有人认为-38定义在:pvmf_return_codes.h文件中:-38: DRM clock is not available or cannot be read0: Retu原创 2014-10-21 14:02:40 · 4123 阅读 · 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 · 2426 阅读 · 0 评论