[英]how to play chunks of mp3 bytes from sql server, transferred to desktop client (by wcf) using C#?
我在sql
数据库上有"chunks"
音频( mp3
格式),即你可以想象一个mp3
文件,分成相等大小的块,每个块保存在sql
server db上的记录中。 这些chunks
通过WCF
服务返回到桌面客户端。 当然,客户端在收到下一个块时会要求下一个块。(它们会按顺序收到,所以标题首先出现!)这里有一个问题,我怎样才能在我的桌面应用程序中逐个播放这个接收到的chunks
? 我可以使用每个块来连续播放它们来缓冲播放器吗?
请注意: - 桌面客户端在C#中 - 如果它适用于此目的,则播放器可以是wmp! -chunk以字节保存 - 由于某些原因,“chunk on sql”系统已经被其他人实现了..我只需要找到一种方法来像桌面上的流一样播放它们
谢谢!
假设您的mp3播放器可以从System.IO.Stream对象播放,请使用以下内容实现您自己的流类
private byte[] GetDataBlock()
{
while (data.Count == 0)
{
//TODO: Read More Data from the database
index = 0;
}
return data.Peek();
}
private void RemoveDataBlock()
{
data.Dequeue();
index = 0;
}
Queue<byte[]> data = new Queue<byte[]>();
int index = 0;
public override int Read(byte[] buffer, int offset, int count)
{
int left = count;
int dstIndex = 0;
while (left > 0)
{
byte[] front = GetDataBlock();
int available = front.Length - index;
// how much from the current block can we copy?
int length = (available <= left) ? available : left;
Array.Copy(front, index, buffer, dstIndex, length);
dstIndex += length;
left -= length;
index += length;
// read all the bytes in the array?
if (length == available)
{
RemoveDataBlock();
}
}
return count;
}
这样做是将数据块放入队列中。 Read方法按顺序读取它们。
此代码一次只能读取1个块,但可以扩展为在单独的线程上读取并缓冲多个块。
假设您有一种在用户请求时在数据库中对它们进行适当排序的方法,那么您的故障就相当简单了。 在伪代码中
实质上,将块发送给用户可用,直到遇到页脚,播放块就好像它们已经完成一样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.