最近在自学视音频方面的知识,感谢雷神的博客,愿雷神一路组好
雷神博客连接:http://my.csdn.net/leixiaohua1020
本项目地址(含源码):https://github.com/dengzhi00/Live_Rtmp2
初学者,项目没做具体优化,欢迎大家交流学习(也欢迎大家start)
项目结构:
项目包含三大模块:
livecollector模块:视音频采集模块 LiveVideoGet:视频采集类 LiveAudioGet:音频采集类 LiveVideoEncode:视频编码nv21转yuv420p,视频硬编码,视频90度旋转算法 LiveAudioEncode:音频硬编码类 LiveEncode:视音频采集参数编码控制类 LiveRop:参数控制,数据回调类
livepush模块:视音频编码推流模块,视频编码:x264编码;音频编码:faac编码;推流:rtmp推流
liveffmpeg模块:ffmpeg编码推流模块,ffmpeg正在学习中,此模块将持续更新…
app模块:测试demo
视频采集
anroid视频采集采用Camare类
采集方法详见项目LiveVideoGet类:
源数据获取:
采集的码流格式是nv21格式
具体格式是:
Y Y Y Y
Y Y Y Y
Y Y Y Y
Y Y Y Y
V U
V U
V U
V U
转换成yuv420sp格式:
Y Y Y Y
Y Y Y Y
Y Y Y Y
Y Y Y Y
u v
u v
u v
u v
代码:
视频编码
详见项目LiveVideoEncode类:
硬编码:
初始化编码器
注:
此视频源数据为旋转90度数据,后置摄像头逆时针旋转,前置摄像头顺时针旋转,
故初始化编码器时将编码器宽高交换位置:
MediaFormat format = MediaFormat.createVideoFormat(MediaFormat.MIMETYPE_VIDEO_AVC, height,width);
软编吗:详见livepush模块
cpp下Stream.cpp文件,注释都在