标签: mpeg2-ts

在哪里开始/拆分mpeg2-ts

我正在编写一个在HTTP上直播mpeg2-ts的服务器,我想知道分割mpeg传输流的最佳位置是什么.该流将由iptv机顶盒播放,我不知道这些设备的行为方式.

我认为启动流的最佳位置是在I帧之前,但设备在开始解码视频流数据之前可能需要PAT和PMT数据包...

streaming iptv mpeg2-ts

6
推荐指数
1
解决办法
1457
查看次数

使用MseStreamSource播放MPEG-2 TS

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

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

ffplay -fflags nobuffer -f:v mpegts udp://:8554
Run Code Online (Sandbox Code Playgroud)

我想在不使用第三方库的情况下使用MediaPlayerElement.

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

我收到了带有UdpClient的MPEG-2 TS流.它运作良好.我在每个UdpReceiveResult中收到一个12字节的标头,然后是4,5,6或7个MPEGTS数据包(每个数据包是188字节,从0x47开始).

我创建了一个MseStreamSource:

_mseStreamSource = new MseStreamSource();
_mseStreamSource.Opened += (_, __) =>
{
    _mseSourceBuffer = _mseStreamSource.AddSourceBuffer("video/mp2t");
    _mseSourceBuffer.Mode = MseAppendMode.Sequence;
};
_mediaPlayerElement.MediaSource = MediaSource.CreateFromMseStreamSource(_mseStreamSource);
Run Code Online (Sandbox Code Playgroud)

这是我将消息发送到MseStreamSource的方式:

    UdpReceiveResult receiveResult = await _udpClient.ReceiveAsync();
    byte[] bytes = receiveResult.Buffer;
    mseSourceBuffer.AppendBuffer(bytes.AsBuffer());
Run Code Online (Sandbox Code Playgroud)

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

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

c# video ffmpeg mpeg2-ts uwp

6
推荐指数
1
解决办法
794
查看次数

封装H.264流可变帧速率在MPEG2传输流中

想象一下,我从实时对话中获得了H.264 AnxB帧.封装在MPEG2传输流中的最佳方法是什么,同时保持后续播放的时序信息?

我正在使用libavcodec和libavformat库.当我获得AVCodecContext类型的对象(*pcc)的指针时,我设置了foll.

pcc->codec_id = CODEC_ID_H264;
pcc->bit_rate = br;
pcc->width = 640;
pcc->height = 480;
pcc->time_base.num = 1;
pcc->time_base.den = fps;
Run Code Online (Sandbox Code Playgroud)

当我收到NAL单元时,我创建一个AVPacket并调用av_interleaved_write_frame().

AVPacket pkt;
av_init_packet( &pkt );
pkt.flags |= AV_PKT_FLAG_KEY;   
pkt.stream_index = pst->index;
pkt.data = (uint8_t*)p_NALunit;
pkt.size = len;

pkt.dts = AV_NOPTS_VALUE;
pkt.pts = AV_NOPTS_VALUE;

av_interleaved_write_frame( fc, &pkt );
Run Code Online (Sandbox Code Playgroud)

我基本上有两个问题:

1)对于可变帧率,有没有办法不指定foll.pcc-> time_base.num = 1; pcc-> time_base.den = fps; 并用一些东西替换它来表示可变帧速率?

2)在提交数据包时,我应该将什么"时间戳"分配给pkt.dts和pkt.pts?

现在,当我使用ffplay播放输出时,它以恒定帧速率(fps)播放,我在上面的代码中使用它.

我也很想知道如何适应不同的空间分辨率.在我收到的流中,每个关键帧都以SPS和PPS开头.我知道每当空间分辨率发生变化时.有没有办法不必指定pcc-> width = 640; pcc-> height = 480; 前期?换句话说,表明空间分辨率可以在中游改变.

非常感谢,艾迪

ffmpeg h.264 mpeg2-ts

5
推荐指数
1
解决办法
2708
查看次数

如何通过UDP发送MPEGTS流

我正在开发一个实时视频流系统,该系统基本上由一台服务器和几个客户端组成。

现在,让我们忽略数据包如何在服务器和客户端之间转发,让我们仅关注服务器如何通过UDP数据包发送MPEGTS流

流以MPEGTS格式编码。

我想做的是读取一些数据包(主要问题是“多少?”)并将它们封装在UDP数据包中。目的地(客户端)读取这些UDP数据包,然后将其转发到VLC,VLC可以通过读取UDP数据包来播放MPEGTS网络流。

如果仅发送视频数据包,则一切正常,相反,如果我尝试将某些视频数据包和某些音频数据包封装在同一UDP数据包中,则VLC无法解码和播放流。我读到某个地方,每个UDP数据包应包含7个TS数据包,但是不幸的是,即使我遵守此规则,VLC也无法正确解码该流。

这是我的程序的示例代码:http : //pastebin.com/evMi6FkY

如何将MPEGTS数据包封装在UDP数据包中?

谢谢!

udp ffmpeg vlc video-streaming mpeg2-ts

5
推荐指数
1
解决办法
2万
查看次数

将 H.264 Annex B 转换为 MPEG-TS

所以...

我在本地文件中有通过 RTSP 捕获的 RAW H.264 视频数据,我正在尝试在 Java FX 应用程序中播放视频。为此,我需要使用 Http Live Streaming。

我已经成功地设计了一个 Java FX 架构原型,该架构可以使用包含 .m3u8(HLS 索引)文件和 .ts(MPEG-TS)文件集合的本地文件夹通过 HLS 与本地服务器一起播放视频。我的最后一部分是用 .264 / .h264 文件替换 .ts 文件,并在本地服务器中,将 H.264 Annex B 数据转换/包装为 MPEG-TS。

我无法弄清楚将 H.264 Annex B 转换为 MPEG-TS 所需的条件。我找到了以下信息...

“附件B通常用于直播和流媒体格式,例如传输流......”

szatmary.org/blog/25

“该文件的附录 B 指定了一种这样的格式,它以类似于传统 MPEG 视频基本流的格式包装 NAL 单元,从而使其适用于像 MPEG PS/TS 这样无法提供所需帧的容器......”

wiki.multimedia.cx/?title=H.264

“Java FX 支持多种不同的媒体类型。媒体类型被认为是容器格式和一种或多种编码的组合。在某些情况下,容器格式可能只是包含编码数据的基本流。”

docs.oracle.com/javafx/2/api/javafx/scene/media/package-summary.html

“使用 EXT-X-STREAM-INF 标签的 CODECS 属性。当此属性存在时,它必须包括播放流所需的所有编解码器和配置文件......”

developer.apple.com/library/ios/documentation/networkinginternet/conceptual/streamingmediaguide/FrequentlyAskedQuestions/FrequentlyAskedQuestions.html

似乎我在基本流和传输流方面缺少一些简单的东西。我已经使用 ffmpeg 将我的 H.264 文件转换为 TS 文件并尝试了解差异。我知道大致的格式差异,但我仍然缺乏细节。有没有人有一个链接来展示这个或知道一些关于如何通过 MPEG-TS 提供 H.264 Annex B 数据的简单信息?

我不想使用工具,我需要在本地有一个自定义文件格式,我可以在其中解析 H.264 Annex B …

ffmpeg javafx h.264 http-live-streaming mpeg2-ts

5
推荐指数
1
解决办法
4099
查看次数

如何解析h.264中的访问单元

我正在一个项目中工作,需要Access unitsH.264原始基本流中删除一些,例如删除4个访问单元并播放剩余的视频.

为此,我将Access unit Delimiter(NAL Unit Type:9)作为边界Access Unit并切断视频,但视频以丢包结束.但是如果我把Sequence parameter set(NAL Unit type :7)作为边界,结果视频播放没有任何丢包.
有人请帮我解决这个问题:我应该在哪里剪切视频?

ffmpeg h.264 mpeg2-ts

5
推荐指数
2
解决办法
7551
查看次数

从 MPEG TS 中提取 PCR 时间值

我正在尝试从 MPEG-TS 数据包中提取 PCR 时间值。根据wiki,PCR 包含 33+6+9 个位数,并且还指出前 33 位基于 90 kHz 时钟,而后 9 位基于 27 MHz 时钟。当 PCR 标志启用时,我提取适应字段字节后面的位。

问题是,如何通过考虑各自的时钟频率值,用我拥有的这 48 (33+6+9) 位来计算 PCR 时间戳值。

谢谢。

mpeg2-ts

5
推荐指数
1
解决办法
6565
查看次数

如何让 ffmpeg 附加到现有的输出文件而不覆盖它?

我通过 UDP 接收 MPEG-TS 流,并使用 FFmpeg 将内容保存到文件中(使用编解码器复制并映射所有流)。在流停止的情况下,我想在恢复时重新启动 FFmpeg 并附加到已写入的现有文件中。

如何配置 FFmpeg 以附加到文件并且在再次启动时不覆盖它?

输入和输出容器都是 MPEG-TS,并且流和编解码器的数量将相同。

ffmpeg mpeg2-ts

5
推荐指数
1
解决办法
5396
查看次数

如何在Gstreamer中使用mpegtsmux进行网络摄像头流媒体播放

我是gstreamer的新手,我想用mpeg2-ts通过网络流式传输网络摄像头视频.我能够使用以下管道流式传输视频,但我不知道如何使用mpeg2-ts流式传输视频mpegmux.任何帮助都会很棒!谢谢.

我的工作管道(没有mpegmux):

// Sender
gst-launch-1.0 -ve v4l2src \
! video/x-raw, framerate=30/1 \
! videoconvert \
! x264enc noise-reduction=10000 speed-preset=fast tune=zerolatency byte-stream=true threads=4 key-int-max=15 intra-refresh=true  \
! rtph264pay pt=96 \
! udpsink host=localhost port=5000

// Receiver
gst-launch-1.0 -ve udpsrc port=5000 \
! application/x-rtp, media=video, clock-rate=90000, encoding-name=H264, payload=96 \
! rtph264depay \
! h264parse \
! avdec_h264 \
! videoconvert \
! ximagesink sync=false
Run Code Online (Sandbox Code Playgroud)

我尝试了一些像下面这样的方法,但仍然无法让它工作.发件人给出错误"无法将mux与rtph264pay链接",接收器给出"无法将mux与udpsrc链接".

// Sender
gst-launch-1.0 -ve v4l2src \
! video/x-raw, framerate=30/1 \
! videoconvert \ …
Run Code Online (Sandbox Code Playgroud)

video-streaming gstreamer mpeg2-ts

5
推荐指数
1
解决办法
5532
查看次数

从 HLS 流解析 timed_id3 值

如何解析从 HLS 流块获取的 timed_id3 值?

Twitch 流块包含 ffprobe 标识为 timed_id3 的第三个数据流中的编码时间等信息,提取的数据为:

b'\x00\x00\x00\x020TRCK\x00\x00\x00\x06\x00\x00\x033936\x00TDEN\x00\x00\x00\x15\x00\x00\x032016-09-30T02:01:11\x00TDTG\x00\x00\x00\x15\x00\x00\x032016-09-30T02:01:18\x00TOFN\x00\x00\x00\x1a\x00\x00\x03index-0000003936-tI2q.ts\x00TSSE\x00\x00\x00\x15\x00\x00\x03libavtwitch: 730c86\x00TXXX\x00\x00\x01\x15\x00\x00\x03segmentmetadata\x00{"broadc_s":1,"cmd":"ld_lat_data","ingest_r":2,"ingest_s":3,"stream_offset":15624,"transc_r":1475200871542,"transc_s":1475200878899}\xbd\x00\x00\x00\x01\xce\x8cM\x9d\x10\x8e%\xe9\xfe'
Run Code Online (Sandbox Code Playgroud)

它是可解析的,包含常见的 ID3 值,但似乎不是完整的 ID3 数据。根据 ID3 规范,它应该以“ID3”标识符值和其他值开头,但事实并非如此,并且我尝试的所有 id3 解析库都因此无法解析它。

HLS 流中的 timed_id3 似乎与 mp3 文件的正常 id3 信息不同。

python id3 ffmpeg mpeg2-ts id3v2

5
推荐指数
0
解决办法
3256
查看次数