Sok*_*kco 6 streaming live audio-streaming http-live-streaming
我一直想要制作一个现场音频流媒体服务,有点像抽搐.现在在你说这太难了之前应该只使用已经存在的服务,我真的想知道如何从头开始实际做到这一点的细节.我做了一些研究,但我发现的结果非常模糊,或者指导我做了类似Wowza的事情.我已经看到了一些关于HTTP Live Streaming的内容,我想我理解了一般的想法:麦克风/摄像机将其馈送发送到编码器,编码器将m3u8格式的馈送发送到服务器,人们从m3u8文件中流式传输m3u8文件.服务器到他们的设备.但是我该怎么做呢?这背后的实际编程是什么?是否有必要使用像Wowza或Red5这样的服务?
Bra*_*rad 13
我做了一些研究,但我发现的结果非常模糊
不幸的是,你问的是一些非常含糊的问题,这就是你得到模糊答案的原因.让我把你的问题分解成碎片吧.如果您对具体问题有疑问,则应发布单独的特定问题,然后在评论中链接到该问题.
是否有必要使用像Wowza或Red5这样的服务?
这些不是服务(好吧,Wowza提供一些服务),而是处理流媒体的服务器.他们接受您的源流并有效地将其传递给所有听众.是的,您需要某种服务器才能通过互联网将流媒体传输给人们,而且不需要使用Wowza或Red5.根据您的具体需求,还有许多其他方法可以做到这一点.
我们来谈谈一个更简单的方法...... HTTP渐进式流媒体.您的客户端(Web浏览器,应用程序,互联网收音机等)可以在收到音频流时播放它们.他们不知道或不关心它的存在......他们所知道的只是他们发出了HTTP请求,收到了足够的数据来播放,并开始播放.他们也不知道或不关心消息来源是什么......是将文件转码到流中还是有人用麦克风说话.重要的不是.在这种模式下,互联网广播流基本上就像一个似乎永远不会结束的音频文件.如果您查看SHOUTcast或Icecast,HTTP progressive是他们所说的协议.
对于编码器,原始音频必须来自某个地方,例如音频捕获设备(麦克风,混音器等)或一堆音频文件.原始音频数据(通常是PCM)用编解码器(例如MP3)编码.这个编解码器的输出现在通过HTTP PUT请求发送到服务器(如果你正在使用Icecast ... hacky其他方法用于SHOUTcast,SOURCE用于旧Icecast).服务器接收此数据,保留它的一个小缓冲区,并将其副本发送给连接的客户端.
如果您正在播放MP3,则服务器只会在数据输入时将数据立即发送回客户端.其他容器格式(如Ogg)要求在流捕获之前首先发送标头.此时,服务器基本上动态地将流数据复用到每个客户端的动态容器中.(通常这是通过构建标头,然后在正确的点处拼接流的其余部分来完成的.)
HTTP渐进式流式传输是有利的,因为它可以在浏览器中直接使用,与新旧设备兼容(我的旧Palm Pilot播放它们很好),并且只需要很少的服务器资源.
我见过一些关于HTTP Live Streaming的内容
HLS是可用的协议之一.而不是像HTTP渐进式一样持续运行的流,而是一次记录编解码器输出几秒钟,保存一大块数据,并将其上传到服务器.然后,客户端可以按顺序下载这些块并播放它们.这种方法有很多开销,但人们选择它有一些关键原因:
客户端可以在分段中断时切换到不同的流.如果客户端正在传输一些高清视频,但后来发现它没有带宽支持它,它可以开始下载SD视频.编码器通常被配置为以各种比特率提供块.与HLS一起使用的容器格式支持这种直接流连接,因为基本上通知编解码器以确保流在那些点处可拼接.
HLS不需要特殊服务器.您可以通过SFTP或通常使用的任何方法将文件上传到Web服务器.没有什么可以安装在网页通常需要的东西之上.
由于您将数据存储在服务器上,因此如果客户端可以处理它并且您拥有磁盘空间,则可以自动支持重播.
CDN发行.如果您想在S3存储桶前使用类似Cloudfront的东西,您可以,并且AWS不必以与分发任何其他文件相同的方式为您提供支持.
对HLS的一个很大的负面影响是客户支持.虽然HTTP渐进式流式传输自HTTP以来已经有效,但HLS是新的,客户端并不是很擅长.浏览器不直接支持它,并且需要使用MediaSource API和一些工艺JavaScript来处理回放.依赖标准框架的移动应用程序经常遇到麻烦......特别是Android 3.0有一些非常讨厌的HLS错误.随着时间的推移,这种情况越来越好.
还有另一个我不会涉及的类似协议,但它是MPEG DASH.分段完成类似于HLS,它正在迅速吞噬HLS的实际使用情况.
但是我该怎么做呢?这背后的实际编程是什么?
你必须将这个问题分解成碎片来决定你想要达到的目标.做什么,特别是?你想制作一个编码器吗?制作服务器?
我一直想要制作一个现场音频流媒体服务,有点像抽搐.
为此,您不需要自己发明任何技术.你可以组装已经存在的碎片.我们假设"像Twitch"意味着以下内容:
要做到这一切,我会说: - 不要自己托管流,使用CDN. - 使用MediaRecorder API进行编码.(尚未广泛使用,但很快就会推出.)
我在这篇文章中没有达到字符限制......所以我希望能让你开始.请发布除此之外的具体问题.