我想编写一个Lighttpd插件来进行流媒体播放..
到目前为止,我在函数'mod_strm_handle_physical'中复制了client_socket(con> fd)。这样我就可以在子进程中通过它发送流数据。至于主进程,我将一些状态设置为连接结构,告诉服务器不要关闭此连接。
以下是我在'mod_strm_handle_physical'函数中的表现:
URIHANDLER_FUNC(mod_strm_handle_physical)
{
if(con->uri.path->ptr)
{
if(!strcmp("/abcd", con->uri.path->ptr))
{
// change Content-Type
response_header_overwrite(srv, con
, CONST_STR_LEN("Content-Type")
, CONST_STR_LEN("application/octet-stream"));
con->http_status = 200;
con->file_finished = 0; // not to close the connection
con->response.keep_alive = 1;
int dup_fd = dup(con->fd); // duplicate the client-socket
int child = fork();
if(child>0)
return HANDLER_FINISHED;
else if(child==0)
{
send(dup_fd, STREAMING_DATA, LENGTH, 0);
close(dup_fd);
exit(0);
}
else
perror("fork()");
}
}
return HANDLER_GO_ON;
}
问题是...... 通过这种方式,服务器可以做流媒体,似乎没问题。但是,服务器不能同时进行多个流式传输。我做错了吗?我虽然流媒体工作正在进行中