赤壁赋
壬戌之秋,七月既望,苏子与客泛舟游于赤壁之下。清风徐来,水波不兴。举酒属客,诵明月之诗,歌窈窕之章。少焉,月出于东山之上,徘徊于斗牛之间。白露横江,水光接天。纵一苇之所如,凌万顷之茫然。浩浩乎如冯虚御风,而不知其所止;飘飘乎如遗世独立,羽化而登仙。
于是饮酒乐甚,扣舷而歌之。歌曰:“桂棹兮兰桨,击空明兮溯流光。渺渺兮予怀,望美人兮天一方。”客有吹洞箫者,倚歌而和之。其声呜呜然,如怨如慕,如泣如诉,余音袅袅,不绝如缕。舞幽壑之潜蛟,泣孤舟之嫠妇。
苏子愀然,正襟危坐而问客曰:“何为其然也?”客曰:“月明星稀,乌鹊南飞,此非曹孟德之诗乎?西望夏口,东望武昌,山川相缪,郁乎苍苍,此非孟德之困于周郎者乎?方其破荆州,下江陵,顺流而东也,舳舻千里,旌旗蔽空,酾酒临江,横槊赋诗,固一世之雄也,而今安在哉?况吾与子渔樵于江渚之上,侣鱼虾而友麋鹿,驾一叶之扁舟,举匏樽以相属。寄蜉蝣于天地,渺沧海之一粟。哀吾生之须臾,羡长江之无穷。挟飞仙以遨游,抱明月而长终。知不可乎骤得,托遗响于悲风。”
苏子曰:“客亦知夫水与月乎?逝者如斯,而未尝往也;盈虚者如彼,而卒莫消长也。盖将自其变者而观之,则天地曾不能以一瞬;自其不变者而观之,则物与我皆无尽也,而又何羡乎!且夫天地之间,物各有主,苟非吾之所有,虽一毫而莫取。惟江上之清风,与山间之明月,耳得之而为声,目遇之而成色,取之无禁,用之不竭,是造物者之无尽藏也,而吾与子之所共适。”
客喜而笑,洗盏更酌。肴核既尽,杯盘狼藉。相与枕藉乎舟中,不知东方之既白。
希望自己努力坚持
最近工作方面需要接触到音视频方面,然而自己这方面却是一个小白,所以决定自己动手学会这方面的内容,看了一下自己需要学习的东西太多太多,网上的资料比较零散,一下子陷入了迷茫.直到在网上看到一篇音视频开发指南Android 音视频开发入门指南,突然感觉自己又有了目标和动力,所以接下来就按照上面的步骤一步步进阶!
进阶步骤
在 Android 平台绘制一张图片,使用至少 3 种不同的 API,ImageView,SurfaceView,自定义 View
在 Android 平台使用 AudioRecord 和 AudioTrack API 完成音频 PCM 数据的采集和播放,并实现读写音频 wav 文件
在 Android 平台使用 Camera API 进行视频的采集,分别使用 SurfaceView、TextureView 来预览 Camera 数据,取到 NV21 的数据回调
学习 Android 平台的 MediaExtractor 和 MediaMuxer API,知道如何解析和封装 mp4 文件
学习 Android 平台 OpenGL ES API,了解 OpenGL 开发的基本流程,使用 OpenGL 绘制一个三角形
学习 Android 平台 OpenGL ES API,学习纹理绘制,能够使用 OpenGL 显示一张图片
学习 MediaCodec API,完成音频 AAC 硬编、硬解
学习 MediaCodec API,完成视频 H.264 的硬编、硬解
串联整个音视频录制流程,完成音视频的采集、编码、封包成 mp4 输出
串联整个音视频播放流程,完成 mp4 的解析、音视频的解码、播放和渲染
进一步学习 OpenGL,了解如何实现视频的剪裁、旋转、水印、滤镜,并学习 OpenGL 高级特性,如:VBO,VAO,FBO 等等
学习 Android 图形图像架构,能够使用 GLSurfaceviw 绘制 Camera 预览画面
深入研究音视频相关的网络协议,如 rtmp,hls,以及封包格式,如:flv,mp4
深入学习一些音视频领域的开源项目,如 webrtc,ffmpeg,ijkplayer,librtmp 等等
将 ffmpeg 库移植到 Android 平台,结合上面积累的经验,编写一款简易的音视频播放器
将 x264 库移植到 Android 平台,结合上面积累的经验,完成视频数据 H264 软编功能
将 librtmp 库移植到 Android 平台,结合上面积累的经验,完成 Android RTMP 推流功能
上面积累的经验,做一款短视频 APP,完成如:断点拍摄、添加水印、本地转码、视频剪辑、视频拼接、MV 特效等功能
看到没这一条一条的.列的多好,我准备花半年的时间来学习.
实现第一条
在 Android 平台绘制一张图片,使用至少 3 种不同的 API,ImageView,SurfaceView,自定义 View
ImageView,自定义就不用说了吧,下面重点看看SurfaceView的绘制图片.
直接上代码:
public class SurfaceViewDraw extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder surfaceHolder;
private Paint paint;
private Rect aa;
private Bitmap bitmap;
public SurfaceViewDraw(Context context) {
this(context, null);
}
public SurfaceViewDraw(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public SurfaceViewDraw(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
//得到控制器
surfaceHolder = getHolder();
//对surfaceview进行操作
surfaceHolder.addCallback(this);
paint = new Paint();
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.olo);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
//重要的一点要说明.在这里可以在线程里面用canvas绘制图片,所以为什么SurfaceView比较时候绘制图片和图形
Canvas canvas = surfaceHolder.lockCanvas();
//开始画
canvas.drawBitmap(bitmap, new Matrix(), paint);
//解锁画布
surfaceHolder.unlockCanvasAndPost(canvas);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
//surface 大小发生变化的时候
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
//销毁时发生,一般在这里将画图停止.释放
}
}
结果
image.png
第一步很好实现了!继续努力!!,坚持下去!!!