看什么框架, 什么操作系统了。 一般可以直接system把脚本字符串当做参数处理。 这个方法坏处是会开新进程。 还有一个方法就是把ffmpeg编译进项目(建议把main
函数改成一个可调用的函数)可以写一个service, 里面负责调度ffmpeg, 每一个请求开一个新的ffmpeg解码
线程。 需要注意的是ffmpeg对内存的需求很高,
所以线程不肯能无限增加。 所以需要自己写一个线程池来维护线程数量。 超过线程数量的请求会被block知道一个线程释放。 这样还是有问题, 因为视频流是长期处理过程, 所以资源有限的情况下是不够处理高并发的。 最后一个方法是用nginx rtmp什么的负责多个视频流的连接, 然后就把不同的视频包都扔到同一个线程队列处理,然后解码分发。这样高并发性能也许会好一点, 缺点是可能会出现所有人都卡顿的情况你可以看一下php帮助文档的对proc_open()函数的Note。
Note: Windows compatibility: Descriptors beyond 2 (stderr)
are made available to the child process as inheritable handles, but since the
Windows architecture does not associate file descriptor numbers with low-level
handles, the child process does not (yet) have a means of accessing those
handles. Stdin, stdout and stderr work as expected.
我当时做的时候用的exec()函数
评论列表(0条)