- 博客(247)
- 资源 (23)
- 收藏
- 关注
原创 Android本地视频播放器开发--NDK编译FFmpeg
在Android本地视频播放器开发中的搜索本地视频章节中,我们能够搜索本地视频并且显示每个视频的图片、标题、时间长度,当然如果需要添加其他的例如视频的长度和宽度可以使用Video类中的方法,既然我们获取到视频后,那么接下来就是解码视频,解码视频我使用的是ffmpeg,所以这张就是使用NDK编译手机可以使用的FFmpeg库。首先到官网http://ffmpeg.org/download.html
2013-06-06 13:23:13 20439 17
原创 Android本地视频播放器开发--搜索本地视频(2)
在Android本地视频播放器开发--搜索本地视频(1)中我们获取了本地视频的数据,在这一章里面,我们将获取的数据通过LIstView来动态的实现出来。1、首先介绍布局代码,主布局代码只含有一个LIstView --jie_video.xml<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android
2013-06-05 09:36:05 24277 20
原创 Android本地视频播放器开发--搜索本地视频(1)
这一章的主要内容是搜索手机本地视频,添加到ListView列表里,每一个表项含有这个视频的缩略图,视频的播放时间,视频的标题,在搜索本地视频(1)中我们先制作搜索功能。Video.java--视频相关的属性类package com.zhangjie.graduation.videopalyer.videofile;import java.io.Serializable;import
2013-06-05 09:22:13 21734 16
原创 android 获取视频,图片缩略图
1、获取视频缩略图有两个方法(1)通过内容提供器来获取(2)人为创建缩略图(1)缺点就是必须更新媒体库才能看到最新的视频的缩略图/** * @param context * @param cr * @param Videopath * @return */ public static Bitmap getVideo
2013-05-15 10:55:16 10638 1
原创 百度地图定位基础
最近使用百度地图,查看了官方的说明,然后做了一个Demo,作为入门,如果看了我之前的代码,有一个习惯就是使用代码写布局,感觉这样比较快,习惯而已。源码如下:package com.zhangjie.local;import android.os.Bundle;import android.os.Vibrator;import android.app.Activity;impo
2013-05-14 10:30:23 2313
原创 cygwin编译ffmpeg问题
1、$ ./configure --enable-memalign-hack --enable-shared./configure: line 9: $'\r': command not found)/configure: line 11: warning: setlocale: LC_ALL: cannot change locale (C': not a valid identi
2013-05-12 20:33:11 2757
转载 媒体格式分析之flv -- 基于FFMPEG
本来是应该先写一个媒体文件格式的简单讲解的,还没来得及写,以后再写。今天就先根据ffmpeg的flv.c的flv_demux这个结构体来讲解一下当前比较流行的媒体格式flv.FLV 是FLASH VIDEO的简称,FLV流媒体格式是随着Flash MX的推出发展而来的视频格式。由于它形成的文件极小、加载速度极快,使得网络观看视频文件成为可能.当前主流的媒体网站像国内的优酷、国外youtube其
2013-05-12 15:10:30 1614
原创 anroid 利用方向传感器或者加速度传感器实现手机或者平板6个方向操作
最近项目里面要实现android设备6个方向操作远程设备移动,首先想到的是方向传感器,但是由于android设备的多样性,在测试过程中并不是所有的设备都有方向传感器,当没有方向传感器的话,就使用加速度传感器来实现,但是有一个缺点就是当水平移动的时候,就会有错误,其次就是项目中程序规定是横屏,然后手机和平板第一方向是不同的,手机默认竖屏正方向为0,现在横屏则方向为1,而平板默认就是横屏的,所以横屏正
2013-05-10 14:17:37 1962
转载 java中抽象类和接口区别
在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进 行抽象类定义时对于abstract class和interface的选择显得比较随意。其实,两者之间还
2013-05-09 10:10:49 1409 2
原创 Android 竖直的滑竿
最近项目里面要添加一个竖直的滑竿,最初是想重写SeekBar来实现的,虽然最终实现了,但是适应性不好,所以为了适应不同的设备,所以通过SurfaceView来实现绘图方式,下面就是具体的步骤:首先编一个实现滑竿功能的类,这里我命名为:AppVerticalSeekBar代码如下:package com.zhangjie.verseekbar;import android.conte
2013-05-03 16:37:53 2787
原创 Mp4v2实现h264+aac打包成Mp4视频文件
使用mp4v2实现录制mp4视频,需要准备如下信息:1、获取mp4v2源码并编译成库文件,对于mp4v2的编译可以看前面的文章android 编译mp4v2 2.0.0生成动态库;2、获取h264数据中的sps和pps数据,如果不会的话可以查看前面的文章 点击打开链接;3、获取音频解码信息,在调用MP4SetTrackESConfiguration使用,具体的获取方式一种通过f
2013-04-27 11:27:09 18510 21
原创 Android播放声音SoundPool、MediaPlayer、AudioTrack
Android平台中关于音频播放有以下三种方式: 1.SoundPool ---- 适合短促且对反应速度比较高的情况(游戏音效或按键声等) 2.MediaPlayer ---- 适合比较长且时间要求不高的情况 3.AudioTrack ---- 播放解码后的PCM码流 方法一:SoundPool1)SoundPool简介 SoundP
2013-04-24 12:48:41 15083
原创 android 虚拟摇杆图片版
在之前A single virtual joystick development使用的圆盘和摇杆都是使用颜色来实现的,但是在实际的开发过程中,这并不美观,所有在这使用图片替换之前使用颜色的圆盘和摇杆,两者之间的区别在于,使用颜色绘制使用的是中心点作为坐标,而使用图片则使用的是左上角作为坐标,所以这里需要进行转换,同时注意的就是图片的宽度问题,里面计算的都是使用的像素,而你一开始将图片转化为bitm
2013-04-23 14:51:07 5126
原创 h264检测是I帧还是P帧,解决录像第一帧有马赛克问题
最近使用h264码流数据进行录像,但是录出来的第一帧有马赛克,究其原因是录像的第一帧不是关键帧,所以需要录像是需要判断第一帧是否是关键帧,方法有两种,第一种是原码流的基础上查找,第二种是将原码流传递给ffmpeg让ffmpeg判断key_frame,第二种相对简单,但是由于这样一来录像和解码视频切合的太紧密,之后修改比较麻烦,所以选择第一种方案,查看注释1可以明白如何检测h264码流的关键帧,下面
2013-04-23 09:32:05 7367 1
原创 android开发过程中遇到的小问题
1、在编写xml布局的时候,总是提示[Accessibility] Missing contentDescription attribute on image的警告信息解决方法:<ImageView android:layout_width="210dp" android:layout_height="32dp" android:layout_centerHo
2013-04-22 11:42:06 1405
原创 android yuv2rgb方案
之前项目里面需要解码h264视频,使用的是ffmpeg,解码出来的是yuv,最好的显示方法是通过opengl es 2.0来实现视频的显示,如果不会opengl es 2.0的话,那么就必须将yuv2rgb然后在绘制图像,而yuv2rgb我只知道两种方法1.通过ffmpeg里面的sws_scale来实现,不过这种方法比较慢,2.这是我之前使用的方法在http://wss.co.uk/pinknoi
2013-04-18 09:16:57 5766 10
转载 H264 获取SPS与PPS(附源码)
原文链接:http://blog.csdn.net/zgyulongfei/article/details/7538523在用Android手机进行h264硬编码的时候如果要进行视频流的实时传输与播放,就需要知道视频流的Sequence Parameter Sets (SPS) 和Picture Parameter Set (PPS)。今天算是看明白如何获取SPS和PPS,在这里记
2013-04-16 15:48:41 5981
原创 android 编译libmad
之前项目里面需要转歌曲,不过是通过java来实现的比较慢,最近有时间在网上查看mp3解码,找到libmad,能够实现mp3的解码,所以编译成库测试一下性能。1、下载源码,到官网 http://sourceforge.net/projects/mad/files/libmad/0.15.1b/ 现在最新的版本是libmad-0.15.1b2、解压下载的文件,进入并创建jni目录,然后将里面的
2013-04-16 14:54:29 5071 7
原创 android 使用libjpeg-turbo将yuv2jpeg图像
要将yuv2jpeg图像则需要两个准备,一、准备libjpeg-turbo库,可以查看之前android 编译libjpeg-turbo文章,二、调用libjpeg-turbo代码,可以查看源码中的Exception.c文件,也可以看之前的使用libjpeg对图像进行压缩文章,下面就是根据这两篇文章来编写调用libjpeg-turbo库来实现yuv2jpeg的功能。1、将h264解码成yuv我
2013-04-16 10:35:50 12777 1
原创 android 编译libjpeg
之前需要将yuv转换为jpg图像,查看网上说libjpeg-turbo比libjpeg快2-3倍,但是在android手机上实践了一下,需要40-60个ms,这个虽然比以前的300ms好多了,但是还是不能满足我的要求,进一步查看了网上信息,libjpeg-turbo是为x86和x86-64进行优化的使用了SIMD指令,而手机上不支持,所以需要在试验一下libjpeg的需要。下面是我的编译步骤:
2013-04-13 10:39:56 6264 1
转载 使用libjpeg对图像进行压缩
libjpeg 是一个完全用C语言编写的库,包含了被广泛使用的JPEG解码、JPEG编码和其他的JPEG功能的实现。Libjpeg不仅可以把bmp格式转化成jpg格式,还支持其他格式的转化成jpg格式(例如ppm,gif,targa,rle等)。转化流程如下:(1) 分配和初始化一个JPEG压缩对象在libjpeg中,JPEG压缩对象被定义为“struct jpeg_comp
2013-04-12 12:34:42 8960
原创 android 编译libjpeg-turbo
最近解码视频生成的是yuv数据,然后需要生成jpg图片,之前的方案是yuv-rgb-bmp-jpg这样的话是很慢的,计算了时间大概要300ms左右,导致多次点击照相,会造成视频画面的延迟,所以只能使用别的方案替代,在网上查询libjpeg,但是又看了一篇文章http://www.linuxsir.org/bbs/thread374093.html说libjpeg-turbo比libjpeg快了2-
2013-04-12 10:49:29 12895 4
原创 android 编译mp4v2 2.0.0生成动态库
最近要录制h264+aac的mp4视频,使用mp4v2来实现,下面就是编译的方法1、下载源码,到官网http://code.google.com/p/mp4v2/downloads/list 下载,现在最新的是mp4v2 2.0.02、解压下载的mp4v2-2.0.0.tar.bz2,然后进入mp4v2-2.0.0,将里面的文件以及文件夹拷贝的新创建的jni目录中,目录结构例如:/home
2013-04-10 15:35:53 12387 26
转载 Faac 编码实时pcm流到aac流
我的程序是根据faac 1.28 库中的frontend目录下的faac的例子改的。下面是程序的运行流程:首先调用faacEncHandle hEncoder=faacEncOpen(samplerate,channels,& samplesInput,&maxBytesOutput);1.打开aac编码引擎,创建aac编码句柄。参数 samplerate 为要编码的音频pcm
2013-04-10 14:09:44 10125 5
转载 MP4V2 录制mp4(h264+aac)视频
MP4录制程序是根据mpeg4ip中mpeg4ip-1.5.0.1\server\mp4live\file_mp4_recorder.cpp文件改的。程序支持h264+aac(raw 流)的写入方式,用到了动态库mp4v2-2.0.0,不要用mpeg4ip中那个较老的版本,因为在录制大文件时会有效率问题,下面是一些mp4v2接口的简介。 MP4FileHandle MP4Create (c
2013-04-10 14:08:26 17408 3
转载 AAC ADTS格式分析
1.ADTS是个啥ADTS全称是(Audio Data Transport Stream),是AAC的一种十分常见的传输格式。记得第一次做demux的时候,把AAC音频的ES流从FLV封装格式中抽出来送给硬件解码器时,不能播;保存到本地用pc的播放器播时,我靠也不能播。当时崩溃了,后来通过查找资料才知道。一般的AAC解码器都需要把AAC的ES流打包成ADTS的格式,一般是在AAC ES流前
2013-04-08 13:19:06 2958
原创 android 编译faad2
由于最近要做AAC解码,查看了网上最初有两种思路:第一章种是ffmpeg,我查看./configure --list-decoders的时候,有看到aac解码器,同时在x86上编译也能够打开aac解码器,但是用用ndk交叉编译的时候即使--enable-decoder=aac也没有打开AAC解码器,所以这种方法暂停。第二中方法是使用faad2解码,在x86上调试,写一个demo能够解码aac,然后
2013-04-07 13:17:27 5259 9
原创 NDK CPU Features
Android NDK CPU Features detection library:-------------------------------------------This NDK provides a small library named "cpufeatures" that can be used atruntime to detect the target device's
2013-04-02 13:11:11 4225
原创 FFmepg 多线程解码历程 - 7:submit_packet
//在ff_thread_decode_frame中会调用submit_packet将码流交给对应的解码线程,来实现线程状态的改变,具体的流程图见下面图static int submit_packet(PerThreadContext *p, AVPacket *avpkt){ FrameThreadContext *fctx = p->parent; PerThr
2013-04-01 09:24:31 2661
原创 FFmepg 多线程解码历程 - 6:frame_thread_init
//ff_thread_init选择帧线程初始化,就会进入frame_thread_initstatic int frame_thread_init(AVCodecContext *avctx){ int thread_count = avctx->thread_count; const AVCodec *codec = avctx->codec; AVC
2013-03-30 15:25:10 5131
原创 FFmepg 多线程解码历程 - 5: ff_thread_init
//用来判断是帧还是片线程初始化int ff_thread_init(AVCodecContext *avctx){ if (avctx->thread_opaque) { av_log(avctx, AV_LOG_ERROR, "avcodec_thread_init is ignored after avcodec_open\n"); re
2013-03-30 15:00:18 2383 1
原创 FFmepg 多线程解码历程 - 4:avcodec_open2
//在初始化codec后,接下来就是打开解码器int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options){ int ret = 0; AVDictionary *tmp = NULL; if (avcod
2013-03-30 14:50:28 10642
原创 FFmepg 多线程解码历程 - 3: int ff_thread_decode_frame
//帧级解码函数,在avcodec_open2的时候,就会判断片还是帧解码,分析见下一篇int ff_thread_decode_frame(AVCodecContext *avctx, AVFrame *picture, int *got_picture_ptr, AVPack
2013-03-30 14:08:45 4624
原创 FFmepg 多线程解码历程 - 2 :avcodec_decode_video2
//解码函数int attribute_align_arg avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture, int *got_picture_ptr,
2013-03-30 13:27:28 6624
转载 ffmpeg 新老接口问题及对照集锦
网上很多关于ffmpeg (libav)的资料都是N年以前的,而事实上ffmpeg数年来一直在“以时俱进”,因此无论是一些新手,或者号称为老手的人,有时候难免出头痛。。。。。。为了解决大家的头痛的问题,特列一个贴子,把ffmpeg相关的一些常见的、版本的问题列举出来,供大家参考,同时也请大家一起补充。1) 不认识guess_format.解决: #define guess_f
2013-03-30 11:32:22 1995
原创 FFmepg 多线程解码历程 - 1:validate_thread_parameters
/** * Set the threading algorithms used.//设置线程的使用算法 * Threading requires more than one thread.//需要一个以上的线程 * Frame threading requires entire frames to be passed to the codec,//帧线程需要整个帧被传递到编码解码器
2013-03-30 10:58:03 4984 3
转载 FFMPEG解码多线程
FFMPEG多线程编码器一般以在Slice内分功能模块进行多线程编码,如h263,h263P,msmpeg(v1, v2, v3),wmv1。包含以下几个线程:(1)Pre_estimation_motion_thread运动估计前的准备;(2)Estimation_motion_thread运动估计;(3)Mb_var_thread宏块其他变量;(4)Encode_thread编码主线程。当然也
2013-03-30 09:46:47 5849
转载 ffmpeg的内部Video Buffer管理和传送机制
本文主要介绍ffmpeg解码器内部管理Video Buffer的原理和过程,ffmpeg的Videobuffer为内部管理,其流程大致为:注册处理函数->帧级释放->帧级申请->清空。1 注册get_buffer()和release_buffer()FFAPI_InitCodec()avcodec_alloc_context()avcodec_alloc_context2()a
2013-03-30 09:45:59 2767
原创 error: 'ff_get_buffer' was not declared in this scope
问题:/home/ffmpeg4android-code/ffmpeg-1.1.2/libavcodec/libstagefright.cpp: In function 'void* decode_thread(void*)':/home/ffmpeg4android-code/ffmpeg-1.1.2/libavcodec/libstagefright.cpp:188: error:
2013-03-29 13:58:57 3530
原创 Out of tree builds are impossible with config.h in source dir
在编译tools下的build_libstagefright的时候,由于之前在ffmpeg下面执行过./configure,生成config.h然后再次在tool下执行build_libstagefright的时候就会出现Out of tree builds are impossible with config.h in source dir这个问题解决:删除ffmpeg 下面的con
2013-03-28 14:20:58 8327
自定义FragmentTabHost
2014-06-27
CSipSimple
2013-10-25
关于Activity和Task的设计思路和方法.pdf
2013-10-15
SDL1.3源码
2013-06-17
TCL相关资料
2012-05-18
android动态设置日期时间源代码
2011-08-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人