首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有多音频流的Windows 8 MediaStreamSource

带有多音频流的Windows 8 MediaStreamSource
EN

Stack Overflow用户
提问于 2014-04-03 10:07:17
回答 1查看 919关注 0票数 0

我有MediaStreamSource实现,它可以打开多个音频流文件。在OpenMediaAsync方法中,我为所有的视频流和音频流提供MediaStreamDescription,但是MediaElement只检测到一个音频流。此外,我还测试了下一个工作逻辑:

  • 检测到2个流
  • 只将音频流的第一或第二MediaStreamDescription报告给ReportOpenMediaCompleted

当然,我想向ReportOpenMediaCompleted报告第一和第二个音频流,结果是有两个音频流的MediaElement。此外,我还在StreamId类中发现了MediaStreamSource字段,但它没有设置访问器,当使用ReportOpenMediaCompleted报告流时,所有MediaStreamDescription都有StreamId == 0。

OpenMediaAsync代码:

代码语言:javascript
运行
复制
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);
}
EN

回答 1

Stack Overflow用户

发布于 2014-04-07 13:21:37

也许使用播放器框架是个好主意。它支持多个音频流。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22834323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档