前段时间写完了RTMP的直播方案,因为是基于librtmp的库来实现的,所以比较简单。之后花了一个月吧,参照海思的rtsp推流框架,慢慢的写了一个基于RealTek为底层的网络摄像头Rtsp直播功能的demo。这个不带任何库,纯C写的推流功能,学到了蛮多东西的,都写下来以后忘了还能回来看看,同时也希望给刚刚起步做rtsp直播的小伙伴一点参考。
一时间也不知道从什么地方讲起,我还是顺着我的代码一步一步讲吧。首先要确定一个事情就是,在网络摄像头RTSP直播的方案中,摄像头是作为服务器端的,连接摄像头请求码流数据的都是客户端。
int main(int argc, char* argv[])
{
int s32MainFd;
pthread_t framesource_id;
struct timespec ts = {
0, 200000000 };
ringmalloc(720*576);//64个大小为720*576的环形缓冲区
printf("RTSP server START\n");
PrefsInit();//设置服务器信息全局变量 端口等
printf("listen for client connecting...\n");
signal(SIGINT, IntHandl);//捕捉信号用来终止程序
s32MainFd = tcp_listen(SERVER_RTSP_PORT_DEFAULT);//554
if (ScheduleInit() == ERR_FATAL)//推送视频数据流线程入口
{
fprintf(stderr,"Fatal: Can't start scheduler %s, %i \nServer is aborting.\n", __FILE__, __LINE__);
return 0;
}
RTP_port_pool_init(RTP_DEFAULT_PORT);//初始化端口集合,用以给多个RTP,RTCP分配端口
pthread_create(&framesource_id,NULL,FRAME_SOURCE_THREAD