最近研究Android视频直播的项目,经过的不懈努力。这块骨头我从摄像头和麦克风开始采集原始数据开始分析到通过JNI实现YUV420数据格式的相互转换,得到标准的数据输入到编码器压缩编码成H.264的码流。接下来的主要任务就是研究将音视频的两部分码流进行FLV(还有其他的例AVI,Mp4等)进行封装,最后通过RTMP协议上传到服务器的相关代码了。这段时间研究确实艰辛,自己将每一部分的研究心得都编写了相关的博客,供自己复习和帮助其他的人。这一段研究主要的数据之间的转换涉及到最多的也是底层语言,通过JNI来调用最底层代码。所以在此将这一部分的所有的知识做一个简单的总结,主要是介绍一些相关的术语,这个应该是放在研究的最前面,但你既然分析到这里了。分析这些术语无非是给你的程序加点动力,提高转换编码压缩的效率。当然具体想了解那一部分内容,可查看我的博客。
- 视频的码率、帧率和分辨率
- 音频的采样率和采样大小
- 原始数据的格式介绍
- 编码时的相关术语
视频的码率、帧率和分辨率
介绍这部分的内容主要涉及到视频播放时候的清晰度以及流畅度
码率:又名比特率(这个名字更官方)单位bps,每秒传送的比特(bit)数。在视频编码中单位一般是kbps(千位每秒)。主要影响的是体积,与体积成正比,也可叫做失真度。在视频直播中主要的算法思想就是希望通过使用最低的码流达到最少的失真效果。因而考虑到网络的传输原因衍生出固态码率cbr和可变码率vbr来达到预期的效果;
帧率:FPS,在摄像头采集的原始数据中,一帧可以理解是一张完整的图片。帧率就是一秒钟时间里传输的图片的帧数,由于视觉暂留原理,如果所看画面之帧率高于24的时候,人眼就会认为是连贯的。这