我有MediaStreamSource实现,它可以打开多个音频流文件。在OpenMediaAsync方法中,我为所有的视频流和音频流提供MediaStreamDescription,但是MediaElement只检测到一个音频流。此外,我还测试了下一个工作逻辑:
当然,我想向ReportOpenMediaCompleted报告第一和第二个音频流,结果是有两个音频流的MediaElement。此外,我还在StreamId类中发现了MediaStreamSource字段,但它没有设置访问器,当使用ReportOpenMediaCompleted报告流时,所有MediaStreamDescription都有StreamId == 0。
OpenMediaAsync代码:
protected override void OpenMediaAsync()
{
this.streamDesc = new Dictionary<int, MediaStreamDescription>();
List<MediaStreamDescription> availableStreams = new List<MediaStreamDescription>();
for (int i = 0; i < this.parser.StreamCount; i++)
{
Dictionary<MediaStreamAttributeKeys, string> streamAttributes = new Dictionary<MediaStreamAttributeKeys, string>();
MediaStreamDescription msd = null;
var type = this.parser.GetStreamType(i);
streamAttributes[MediaStreamAttributeKeys.CodecPrivateData] = this.parser.GetCodecPrivateData(i);
if (type == ParserComponent.StreamType.Video)
{
streamAttributes[MediaStreamAttributeKeys.VideoFourCC] = this.parser.GetCodecID(i);
streamAttributes[MediaStreamAttributeKeys.Width] = this.parser.GetWidth(i).ToString();
streamAttributes[MediaStreamAttributeKeys.Height] = this.parser.GetHeight(i).ToString();
msd = new MediaStreamDescription(MediaStreamType.Video, streamAttributes);
}
else if (type == ParserComponent.StreamType.Audio)
{
msd = new MediaStreamDescription(MediaStreamType.Audio, streamAttributes);
}
if (msd != null)
{
if (i == this.parser.CurrentAudioStreamIndex || i == this.parser.CurrentVideoStreamIndex)
{
this.parser.SetStreamActive(i, true);
// quick fix for multilanguage videos to submit only 1 audio stream
// availableStreams.Add(msd);
}
this.streamDesc.Add(i, msd);
availableStreams.Add(msd);
}
}
Dictionary<MediaSourceAttributesKeys, string> sourceAttributes = new Dictionary<MediaSourceAttributesKeys, string>();
sourceAttributes[MediaSourceAttributesKeys.CanSeek] = this.parser.Seekable.ToString();
sourceAttributes[MediaSourceAttributesKeys.Duration] = this.parser.Duration.Ticks.ToString();
ReportOpenMediaCompleted(sourceAttributes, availableStreams);
}
发布于 2014-04-07 13:21:37
也许使用播放器框架是个好主意。它支持多个音频流。
https://stackoverflow.com/questions/22834323
复制相似问题