- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我想用 Python 实现一个服务器,通过 HTTP 流式传输 MP3 格式的音乐。我希望它能够广播音乐,以便客户端可以连接到流并开始收听当前正在播放的任何内容,就像广播电台一样。
以前,我使用 SocketServer.TCPServer 在 Python 中实现了我自己的 HTTP 服务器(是的,我知道 BaseHTTPServer 存在,只是想自己编写一个迷你 HTTP 堆栈),那么音乐流媒体在架构上会有什么不同呢?我需要在网络端和 MP3 端查看哪些库?
最佳答案
mp3 格式专为流式传输而设计,这使得一些事情比您预期的要简单。数据本质上是 audio frames 的流使用内置边界标记,而不是文件头后跟原始数据。这意味着一旦客户端期望接收音频数据,您可以从现有 mp3 源中的任何点开始向其发送字节,无论是实时的还是文件,客户端将同步到它找到的下一帧和开始播放音频。耶!
当然,您必须为客户端提供一种建立连接的方法。事实上的标准是 SHOUTcast (ICY) 协议(protocol)。这与 HTTP 非常相似,但状态和 header 字段的不同之处在于它与 Python 的内置 http 服务器库不直接兼容。您也许可以让这些库为您完成一些工作,但它们的文档化接口(interface)不足以完成它;您必须阅读他们的代码才能了解如何让他们说 SHOUTcast。
以下是一些帮助您入门的链接:
http://forums.winamp.com/showthread.php?threadid=70403
http://forums.radiotoolbox.com/viewtopic.php?t=74
http://www.smackfu.com/stuff/programming/shoutcast.html
http://en.wikipedia.org/wiki/Shoutcast
我建议从单个 mp3 文件开始作为您的数据源,让客户端-服务器连接设置和播放正常工作,然后继续处理实时源、多编码比特率、带内元数据和播放列表等问题。
播放列表通常是 .pls 或 .m3u 文件,本质上只是指向直播 URL 的静态文本文件。它们并不困难,甚至不是绝对必要的,因为许多(大多数?)mp3 流媒体客户端将接受根本没有播放列表的直播 URL。
至于建筑,这个领域非常开放。您有与 HTTP 服务器一样多的选项。线程?工作进程?事件驱动?由你决定。对我来说,更有趣的问题是如何与服务于多个输出流的网络处理程序(播放器)共享来自单个输入流(广播器)的数据。为了避免 IPC 和同步的复杂性,我可能会从单线程事件驱动设计开始。在 python 2 中,像 gevent 这样的库会给你very good I/O performance同时允许您以非常易于理解的方式构建代码。在 python 3 中,我更喜欢 asyncio 协程。
关于python - 编写 Python 音乐流媒体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5688573/
我正在使用 Twitter4j 流 API。我正在使用地理定位约束来仅从特定区域获取推文。这是代码的那部分: twitterStream.addListener(listener);
我正在使用 WCF 并希望将大文件从客户端上传到服务器。我已经调查并决定遵循 http://msdn.microsoft.com/en-us/library/aa717050.aspx 中概述的分块方
我和提问者的情况很相似: Can I serve MP3 files with PHP?基本上我试图保护 mp3 文件不被直接下载,因此用户必须首先通过 php 进行身份验证。这是我的代码: head
我连接了 Red5 oflaDemo 并且工作正常 当我尝试使用 ffmpeg rtmp 流式传输 flv 文件时,我遇到了这个错误 root@zzz-OptiPlex-170L:~# ffmpeg
我正在尝试压缩一堆文件并通过流使数据可用。 我希望内存占用尽可能小。 我的想法是实现一个 Stream,其中我有一堆 FileStream 对象作为数据成员。当我的 Stream 上的 Read 方法
只是想知道是否有人知道自动执行此操作和/或作为 50 mp4 视频的批处理的脚本或程序。我说的是使用 CLI mediafilesegmenter 命令将视频分段的过程,以便从 Amazon S3 流
我有一个带有摄像头模块的 Raspberry Pi,我想将 PiCamera 的视频返回从 Python 流式传输到另一台运行 Python 服务器的计算机。 我成功地使用 OpenCV 返回了视频(
我正在使用 ffmpeg sdk 在 youtube live 上流式传输实时视频 av_interleaved_write_frame(m_pAvFmtCntx, pkt); av_interlea
我正在尝试使用 Tweepy 流式传输 Twitter,我想知道是否可以在不提供关键字的情况下进行流式传输?因此,我将能够流式传输所有推文,而不仅仅是具有给定关键字的推文。我正在关注的代码可以在这里找
我是 Hazelcast 的新手,我正在尝试使用它来将数据存储在太大而无法容纳在单台计算机上的 map 中。 我需要实现的过程之一是检查 map 中的每个值并对其执行某些操作 - 不是累积或聚合,而且
我需要设置从多个网络摄像头到互联网(在浏览器中)的实时流传输,并且这些流应该仅对特定用户可见。 IE。用户 A 使用他或她的登录名/密码登录我的系统,转到视频流页面,并查看来自特定摄像头的流,而其他用
我在看 Twitter Streaming API获取实时提要。但我不希望它存储在我的服务器上。我只是希望它从服务器中提取,浏览器页面将从我的服务器的 twitter 提取 URL 检索数据。但我想避
我想创建一个P2P视频传输的应用程序。更详细地说,我需要以下内容: 用户可以通过点击应用程序中的按钮来打开网络摄像头。 应用程序开始从网络摄像头拍摄图像并将其发送到特定位置(由端口和 IP 地址指定)
我们有一个在 Tomcat 下运行的 Java Web 应用程序(应用程序 #1)。 我们的要求:我们想为流媒体设置一个单独的服务器。我们的媒体文件已经转换为 flv(我们支持的唯一格式)...我们只
我是 RTMP 流媒体的新手,正在寻求帮助。足以让我开始。 我已经在谷歌上搜索了大约 5-7 个小时,但仍然无法确定我的答案! Red5的文档有限,根本找不到任何支持!甚至与我类似的问题在 stack
我正在尝试编写一个简单的 map only hadoop streaming job 从 hdfs 读取数据并将其推送到 vertica。 我写了几个shell脚本如下 加载.sh hadoop
我是 Android 的新手,正在尝试: 从相机流式传输原始数据 (ImageFormat RAW_SENSOR) 处理原始数据 交互显示处理结果 原始数据捕获似乎只能在静态捕获模式下使用。这是正确的
我需要将音频从麦克风流式传输到 http 服务器。 这些录音设置是我需要的: NSDictionary *audioOutputSettings = [NSDictionary dictionaryW
我需要了解 WCF 在发送消息时是如何工作的。 WCF 在发送之前是否序列化所有内容? 我的另一个问题是使用 Streaming 有什么好处?更大的消息是否更好,比如说 1Mb 到 2Mb?我可以发送
是否可以直接从 API 初始化新的环聊直播广播/流式传输?我尝试将环聊直播用于我网站的直播系统,但我在 YouTube Live API 中没有看到任何允许通过环聊直播创建流的 API 方法(看起来需
我是一名优秀的程序员,十分优秀!