【原创】MJPG源码概述_Detective_ALong_新浪博客

mjpg_streamer.c

main()

1、  通过getopt方法和while循环的方式解析输入参数;

2、  log相关;

3、  判断是否转换为daemon模式;

4、  初始化互斥锁和条件变量;

5、  SIGPIPE和SIGINT信号初始化;

6、  通过调用动态链接库为in结构体的init、stop、run、cmd和param赋值;

7、  global.in.init(&global.in.param);

8、  通过调用动态链接库为out结构体的init、stop、run、cmd和param赋值;

9、  global.out[i].init(&global.out[i].param);

10、              执行global.in.run();

11、              执行global.out[i].run(global.out[i].param.id);

12、              pause()。

 

input_file.c

input_init();

1、  将参数由字符串格式转换为数组的形式;

2、  通过getopt方法和while循环的方式解析输入参数;

3、  pglobal赋值。

 

input_stop()

pthread_cancel(worker)

 

input_run(void)

1、  开辟视频缓冲区pglobal->buf;

2、  创建线程pthread_create(&worker, 0, worker_thread, NULL);

3、  pthread_detach(worker)。

 

void *worker_thread( void *arg )

1、  pthread_cleanup_push;

2、  pthread_mutex_lock;

3、  memcpy_picture;

4、  pthread_cond_broadcast;

5、  pthread_mutex_unlock;

6、  usleep;

7、  pthread_cleanup_pop。

httpd.c

void *server_thread( void *arg )

1、创建流式套接字;

2、setsockopt

3、本地sockaddr_in配置;

4、地址和套接字捆绑bind;

5、套接字侦听listen;

6、阻塞等待客户端的链接accept;

7、创建线程处理客户端请求;


void *client_thread( void *arg )

1、将形参传递给局部变量;

2、初始化iobuf、req结构体;

3、_readline(int fd, iobuffer *iobuf, void *buffer, size_t len, int timeout)

   从socket描述符fd中读取数据到iobuf里,再到buffer所指向的内存空间。

  _read(fd, iobuf, &c, 1, timeout),包含select函数,从文件描述符集中读取数据。

4、用strstr检查客户端传来的命令中,需要的数据4种形式请求:SNAPSHOT、STREAM、COMMAND、FILE。

5、parse the rest of the HTTP-request。

6、check for username and password if parameter。

7、对于四种请求予以答复。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值