欢迎关注勤于奋、每天12点准时更新国外LEAD相关技术
大家好,今天继续聊聊H264流的知识,和安卓当中解析H264,这篇文章很简单,算是记录一下学习的过程,音视频要学习的知识远远不止这些东西,这只是一个开始。
创建一个解码器,怎么做?音视频解码需要一个解码器,如果使用硬件解码,我们就需要使用MediaCodec这个方法,然后使用
mediaCodec = MediaCodec.createDecoderByType("video/avc");
就可以创建一个解码器,解码器可以配置一些信息
mediaCodec.configure(mediaformat, surface, null, 0);这个configurt方法的意思就是配置解码器,
第一个参数就是视频信息需要创建,然后传进去,然后第二个surface就是用来播放这个解码后的视频,如果你已经创建好了,想播放就可以传个surface进去就能播放到手机了。
当然如果你只是解码,做视频编辑,那么这个参数就可以不传进去,第三个参数就是加密视频,如果没有你可以不传这个。
解码是耗时的操作,所以要放到线程里面去操作,decodeH264去解码,解码我们也写的很简单,直接放到byt里面去
InputStream is = new DataInputStream(new FileInputStream(new File(path)));
int len;
int size = 1024;
byte[] buf;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
buf = new byte[size];
while ((len = is.read(buf, 0, size)) != -1)
bos.write(buf, 0, len);
buf = bos.toByteArray();
return buf;
如果你的视频很大,比如你有2个G的视频,直接拿到这里来解码,肯定会卡死的,如果真是的项目肯定是比如1兆这样的方式去读取,不是一次性读取。
Java DataInputStream类数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。
下面的构造方法用来创建数据输入流对象。
InputStream is = new DataInputStream(new FileInputStream(new File(path)));
MediaCodec 解码过程
解码主要是给DSP芯片去解码,我们要用到的API主要有如下几个。
dequeueOutputBuffer
dequeueInputBuffer
getInputBuffers
createVideoFormat
configure
主要用到了这几个方法,好了,今天就写到这里吧,最近学习也是很累,感觉回到当初学习LEAD一样,很多东西都不懂,自己做好笔记,然后还要一个一个单词去查询,网上搜索,恶补自己的基础知识。
这几天每天晚上都是12点睡觉,这也算是自己的一个爱好吧,我可以肯定的说,过了这段时间,我以后不会在这样了,因为没有这样让你疯狂的事了,至少在工作上,在写程序上。
这个痴情,也就是在奔40的人最后一次冲刺了,可以说做安卓开发10来年,音视频一直没有正经的学习过,所以这次也是花了5千多,好好的系统的学习一下。
大家目前在搞项目,比如国外LEAD项目,开始学习绝对很累,压力很大,尽量每天都去学,都去看,比如学到找任务的时候,我提供的那些渠道,大家都可以每天都去找,都去申请,都去注册,然后挂站去做任务。
这样做基本1个月肯定能收款,1个月搞不定,不行?2个月,3个月,一定能收款,绝对没有夸张的说,但是前提是,这些流程,和方法你都掌握了,只是在找任务的时候。
附:诚信为人,认真做事,人在做,天在看,每日更新一篇关于技术或者国外lead文章,长期坚持原创不易,如文章引起大家共鸣,