天嵌 ARM开发社区

 找回密码
 注册
查看: 2649|回复: 2

Super-streamer视频流服务器

[复制链接]
jsjs2002 发表于 2013-3-10 11:27:45 | 显示全部楼层 |阅读模式
最近找工作,本来是想找linux下C应用,结果最后去做android底层了。所以这个视频流服务器也没时间继续改进了,希望各位大虾努力啊。

    总体实现描述:

         通过启动脚本start.sh启动程序,程序首先解析启动脚本传递的参数。

•            1.若input选择大于0,则加载input.so,根据传递的参数执行init函数(有几个input选项就执行几次)。在init中(第一次运行时创建input_plugin,暂时只支持v4l2.so)检查二级插件,是否是V4l2.so。在输入节点input_node链表中查找device,format,是否不存在。满足条件后方能建立输入节点,并加入链表中。最后调用二级插件的init来初始化摄像头。根据输入节点的个数调用输入插件的run函数,即建立输入线程input_thread,线程中调用输入二级插件的get来获得视频图像数据(二级插件中获得数据后唤醒其他等待此数据的线程,如编码线程等)。

•         2.若encode选项大于0,则加载encode.so。根据encode选项的个数来执行init函数。Init中建立编码二级插件,分解plugin参数,得到源格式和目标格式,在输入节点input_node链表中查找源格式是否存在,存在则建立编码节点encode_node。并调用编码二级插件的init初始化硬件或者软件编码器,传递编码所需的源数据的buf,size,条件变量等信息。根据编码节点的个数调用编码二级插件的run函数,建立编码线程encode_thread,线程中调用编码二级插件的run来进行编码(编码时首先等待源数据准备好,即阻塞等待输入线程中完成数据采集后唤醒自身)

•         3.若output选项个数大于0(注意不同于input和encode,只能有一个),加载output.so。若output选项大于0,则执行其init函数(只执行一次,之前的两个都是根据节点的个数来确定执行的次数)。在init根据plugin选项建立输出二级插件的链表,根据comport选项建立server_nodes链表(当然在建立链表的过程中会排除plugin comport重复的问题)。如output选项大于0,则执行run函数,根据server_nodes的个数建立服务线程server_thread。在server_thread中监听所属的端口,为每一个连接的客户端建立客户端节点client_nodes,加入server_nodes中存储客户端节点的链表,并建立客户端线程client_thread。客户端线程等待客户端的指令,并做出相应的反应。例如客户端想要视频数据,则建立一个视频线程video_thread传递视频数据。注意当客户端断开连接的时候,客户端线程结束,并且对应的server_nodes在客户端节点链表中删除这个节点,并释放。值得注意的是为了兼容C/S和B/S模式,客户端指令必需遵循一定的规范。

•         

•            对各个顶级插件对应的次级插件处理是不同的,输入二级插件(V4l2.so)一般只有一个,被很多节点调用,所以不能有全局信息。而编码插件可以有很多个,而且一个encode节点对应一个编码二级插件,所以只要将其地址传给对应的节点就好,并且可以有全局变量来存储输入节点的信息。而输出二级插件可以用很多个,不同于编码二级插件的是可能被不同的节点使用,所以不能用全局信息。在output中建立了输出二级插件的链表,来存储这些插件信息。

 楼主| jsjs2002 发表于 2013-3-10 11:28:30 | 显示全部楼层
亚瑟王 发表于 2013-3-11 09:58:53 | 显示全部楼层
jsjs2002 发表于 2013-3-10 11:28
链接地址http://blog.csdn.net/fremaks/article/details/8654661

亲,谢谢你。给你加了5个金币。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-1 00:50 , Processed in 1.031250 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表