ffmpeg+ffserver多媒体服务器开发入门

来源:互联网 发布:stc12c5a60s2编程 编辑:程序博客网 时间:2024/05/23 23:47

公司需要为Html5客户端配置多媒体服务器。主要是作为媒体server,,音频是实时来自聊天室,中间需要经过一次转码,Opus->mp3,实时转码。


研究了两周,将其中一些心得记录分享下。



1.循环播放mp3文件。

ffserver提供对外的服务请求的处理,ffmpeg作为转码的工具,即将文件或者流中的数据流转发或者转码到ffserver的磁盘文件/tmp/feed1.ffm中。ffm是ffmpeg中保存文件的一种格式,自带文件头,其实细节我们不用关系。

ffserver.conf配置如下:

HTTPPort 8999RTSPBindAddress 0.0.0.0MaxHTTPConnections 2000MaxClients 1000MaxBandwidth 1000CustomLog -<Feed feed1.ffm>File /tmp/feed1.ffmFileMaxSize 20M#ACL allow 127.0.0.1</Feed># MP3 audio<Stream str.mp3>NoVideoFeed feed1.ffmFormat mp2AudioCodec libmp3lameAudioBitRate 64AudioChannels 2AudioSampleRate 44100StartSendOnKeyAVOptionAudio flags +global_header</Stream>

ffmpeg命令如下:

./ffmpeg -re -f concat -i <(for i in {1..10000}; do echo "file '$PWD/test.mp3'"; done)  http://localhost:8999/feed1.ffm

做了一个shell循环语句,循环读取文件,作用是客户端循环播放,不会中断。


无限循环不知道怎么做,但是循环1w次就是1个月了,大不了一个月重启一次。谁知道无限的shell语法的告诉我一声。


通过以上的处理就可以实现一个只提供一首mp3歌曲的mp3服务器。


如果想要做成服务器实时转发实时流,比如来自聊天室的语音数据,需要改写ffmpeg的输入模块,即从内存中获取,然后我们自己处理,比如从socket接收等。



性能的话肯定没有他们说的那么厉害,2000路,毕竟一个单线程的东西。具体性能等以后测试完后再分享。


//2015-12-30

搞了将近一个月,最后还是放弃用ffserver了。这就是一个坑,永远填不完。

缺点:

1.单线程server,扛不住大量的并发访问。是由他的IO架构决定的。他用的是poll而不是epoll

2.ffmpeg 在多线程编程上的问题。追踪源代码发现有使用static变量的情况。

3.ffmpeg转码的架构设计不够优化,想象一下,不能无限开启线程来转码吧。

...


最后解决方案:

自己开发,一周搞定。


1 0
原创粉丝点击