我有一个代码,用于从在线流(视频流或广播)录制一些音乐/视频文件。
如何修改它以将SetSource属性设置为我的MediaElement(例如来自IBuffer或Bytes [],...)?
(我不能使用这样的变体:
mediaElement1.Source = new Uri(urlLinkToOnlineStream); mediaElement1.Play();
)
我需要直接从已打开的流设置SetSource(我需要写入文件并在同一时刻或稍微停顿时从流中记录相同的字节[])。
HttpClientHandler aHandler = new HttpClientHandler();
aHandler.ClientCertificateOptions = ClientCertificateOption.Automatic;
HttpClient aClient = new HttpClient(aHandler);
aClient.DefaultRequestHeaders.ExpectContinue = false;
HttpResponseMessage response = await aClient.GetAsync(urlLinkToOnlineStream, HttpCompletionOption.ResponseHeadersRead);
var destinationFile = await KnownFolders.MusicLibrary.CreateFileAsync(@"recorded.mp3", CreationCollisionOption.ReplaceExisting);
var fileStream = await destinationFile.OpenAsync(FileAccessMode.ReadWrite);
Stream stream = await response.Content.ReadAsStreamAsync();
IInputStream inputStream = stream.AsInputStream();
ulong totalBytesRead = 0;
while (true)
{
// Read from the web.
IBuffer buffer = new Windows.Storage.Streams.Buffer(1024);
buffer = await inputStream.ReadAsync(buffer, buffer.Capacity, InputStreamOptions.None);
if (buffer.Length == 0)
{
break;
}
totalBytesRead += buffer.Length;
await fileStream.WriteAsync(buffer);
}
inputStream.Dispose();
fs.Dispose();
答案 0 :(得分:0)
您是在开发通用Windows平台应用程序还是Windows Phone 8.1应用程序? UWP支持HTTP Live Stream等媒体流协议。您可以直接将URL分配给媒体元素。
UWP:
static
对于Windows Phone 8.1,您可以使用开源流媒体库。
答案 1 :(得分:0)
我知道这已经过时了,但是我有一个可以适应流的单个音频文件的工作示例。
InMemoryRandomAccessStream stream = new InMemoryRandomAccessStream();
HttpClient hc = new HttpClient();
HttpResponseMessage msg = await hc.GetAsync(urlLinkToOnlineStream);
await RandomAccessStream.CopyAsync(await msg.Content.ReadAsInputStreamAsync(), stream);
stream.Seek(0);
myMediaElement.SetSource(stream, msg.Content.Headers.ContentType.ToString());
您必须记得在确定已完成Dispose()
和InMemoryRandomAccessStream
时致电HttpClient
。否则你最有可能最终导致内存泄漏。
我不完全确定您打算如何进行缓冲,但是如果您在Dispose()
(在我的示例中)中调用stream
,则播放将失败。如果在当前块完成之前调用SetSource
,它也将开始播放新的数据块。