首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MseStreamSource播放MPEG-2 TS

使用MseStreamSource播放MPEG-2 TS
EN

Stack Overflow用户
提问于 2018-04-17 12:57:43
回答 1查看 1.5K关注 0票数 6

我需要在UWP应用程序中显示一个实时视频流。

视频流来自GoPro。它由UDP消息传输。它是一个MPEG-2 TS流.我可以通过以下命令行使用FFPlay成功地播放它:

代码语言:javascript
复制
ffplay -fflags nobuffer -f:v mpegts udp://:8554

我想在不使用第三方库的情况下使用MediaPlayerElement来播放它。

根据下面的页面:https://learn.microsoft.com/en-us/windows/uwp/audio-video-camera/supported-codecs UWP应该能够播放它。(我在Windows Store中安装了"Microsoft“应用程序)。

我接收带有UdpClient的MPEG-2 TS流.效果很好。我在每个UdpReceiveResult中接收一个12字节的头,然后是4、5、6或7个MPEGTS数据包(每个包是188个字节,从0x47开始)。

我创建了一个MseStreamSource:

代码语言:javascript
复制
_mseStreamSource = new MseStreamSource();
_mseStreamSource.Opened += (_, __) =>
{
    _mseSourceBuffer = _mseStreamSource.AddSourceBuffer("video/mp2t");
    _mseSourceBuffer.Mode = MseAppendMode.Sequence;
};
_mediaPlayerElement.MediaSource = MediaSource.CreateFromMseStreamSource(_mseStreamSource);

我是这样向MseStreamSource发送消息的:

代码语言:javascript
复制
    UdpReceiveResult receiveResult = await _udpClient.ReceiveAsync();
    byte[] bytes = receiveResult.Buffer;
    mseSourceBuffer.AppendBuffer(bytes.AsBuffer());

MediaPlayerElement显示消息“视频不受支持或文件名不正确”。(不确定消息,我的Windows是法文)。

使用MseAppendMode.Sequence模式是个好主意吗?我应该把什么传递给AppendBuffer方法?原始udp消息包括12字节头还是每个MPEGTS 188字节数据包?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-18 08:45:13

我终于把视频放好了!

下面是提取MPEG-TS数据包并将它们正确发送到MseStreamSource的步骤:

MseSourceBuffer需要处于“序列”模式:

代码语言:javascript
复制
_mseSourceBuffer.Mode = MseAppendMode.Sequence;

对于每个接收到的UDP数据报,我提取MPEG-TS数据包。为此,我忽略了UDP数据报的前12个字节。然后,我在一个单独的数组中提取每个188字节的数据包(每个数据包从0x47开始)。

我将每个数据包发送到一个同步队列。

我将数据包从队列中排出队列,并将它们分组到MseSourceBuffer中。我为每个PAT数据包创建了一个新组(pid = 0):

代码语言:javascript
复制
byte[] bytes;
// [...] combine the packets of the group
mseSourceBuffer.AppendBuffer(bytes.AsBuffer());

我尝试使用MemoryStream并调用AppendStream()方法,但没有成功。

还关心线程同步:不应丢失数据包顺序。这就是同步队列的原因。

希望它能帮到别人。

这个维基百科MPEG-TS页面帮了我很多忙。

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

https://stackoverflow.com/questions/49878796

复制
相关文章

相似问题

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