问题标签 [transport-stream]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
parsing - 解复用器如何区分作为同步字节的 0x47 和作为数据的 0x47?
对于解复用器,输入是字节流。一切都只是零和一。现在解析器如何区分数据中的 0x47 和作为传输流标头的同步字节的 0x47?
例如,如果 demux 接收到的数据是 0x47 0x56 0xef 0x47 ... 它如何知道哪个 0x47 是同步字节?
它是否在同步字节之后寻找任何额外的位以确保它读取的 0x47 确实是标头的开头?机制是什么?
这对于任何解析器都是如此。H.264 解析器检查 NAL 起始码。它如何区分实际的起始码和数据中的起始码。因为对于解析器来说,一切都只是字节。
谢谢你。
video-streaming - 如何在 m2ts 文件中找到 PCR PID?
我需要知道我的 m2ts 文件中的 PCR PID。 我想我需要执行以下步骤:
- 查找 PID 为 0 的 TS 数据包。这是一个 PAT。
- 解析 PAT 以获取 PMT 的 PID。
- 解析 PMT 以获取 PCR 的 PID。
但是我在第一步和第二步遇到了一些麻烦。请参阅以下 TS 数据包:
“47 40 00 13”是二进制的“0100 0111 0100 0000 0000 0000 0001 0011”。
PID 为 0x0000,有效负载单元开始指示标志为 1,包含有效负载标志为 1。
根据 TS reader 我知道这个文件的 PMT PID 是 0x1000。
但是这个数据包没有包含一对字节 10 00。
我是否使用 PAT 选择了正确的 TS 数据包?请解释 PAT 从哪个字节开始。
java - Extract information from a Transport Stream in Java
I need to extract some information from a Transport Stream like PID, PAT, PMT, etc.
I found an example code to get the PID:
But I could not understand the reason to get the buf[1]
and shift 8 to the left side because to get the PID information I need get the 5 last bits from the buf[1]
and all 8 from the buf[2]
. I tested the code and the result was good. I just want to understand the mean of this first part: buf[1] << 8
in the equation. Could someone help me?
ios - H.265/HEVC 在 iOS 9 中是否支持 HLS?
目前,HLS(HTTP Live Streaming)要求内容为视频 H.264 和/或 AAC/MP3/声音。
iOS 9 中是否支持 H.265/HEVC for HLS?如果没有,有没有办法绕过这个限制并使用 H.265 编码的 TS 文件?
video - 使用 FPGA 捕获 CMOS 视频,编码并通过以太网发送
我正在为我的学生计划一个基于 Zynq Xilinx FPGA 的开源大学项目,该项目将捕获 CMOS 视频,将其编码为传输流并通过以太网将其发送到远程 PC。基本上我想设计另一个IP摄像机。我有丰富的 FPGA 经验,但缺乏有关编码和传输视频数据的知识。这是我的计划:
将 CMOS 摄像头连接到 FPGA,接收视频帧并将其保存到外部 DDR 存储器,使用 HDMI 输出进行验证。我对此没有任何问题。
我知道我必须将我的视频流压缩为例如 H.264 格式并放入传输流中。在这里我知之甚少,需要一些提示。
在我形成传输流之后,我可以使用 UDP 数据包通过网络发送它。我有工作硬件解决方案,它从 FIFO 读取数据并将其作为 UDP 数据包发送到远程 PC。
最后,我计划使用 ffmpeg 库接收和播放视频。
ffplay udp://localhost:5678
我的问题基本上是关于 2 步。如何将像素帧转换为传输流?我的选择是:
- 使用商业IP,例如
在这里,我怀疑它们是否可以免费使用,而且我们没有太多资金。
使用开放核心,如
- http://sourceforge.net/projects/hardh264/ - 这里核心只生成h264输出,但如何将其封装成传输流?
- 我搜索了 opencores.org 但在这个主题上没有成功
- 也许有人知道一些好的开源相关 FPGA 项目?
使用 Vivado HLS(C 语言)自行开发硬件编码器。但这是我不知道算法的问题。也许我可以演出 ffmpeg 或 Cisco openh264 库并找到一个将原始像素帧转换为 H.264 格式然后将其放入传输流的函数?任何帮助也将在这里得到应用。
此外,我担心我可能在 FPGA 内部生成的流的格式兼容性以及 ffplay 实用程序在主机上预期的格式兼容性。任何帮助、提示、链接和书籍都会被应用!
gstreamer - 录制时使用 Gstreamer 字幕
我是 GStreamer 的新手,正在尝试使用字幕流对视频流(现在是 v4l2src)进行编码,并混合到 MPEG ts 容器中。我可以使用“textoverlay”来设置数据,但我不想将数据刻录到图像中。但是,我想使用字幕流对录制视频时生成的“元数据”进行编码。
随着时间的推移,有没有办法可以将字幕添加到 MPEG ts 中?字幕文本的内容事先是未知的,例如移动摄像机的 GPS 坐标。
有'subtitleoverlay'插件,但我不完全理解这个。它会像“textoverlay”那样将文本刻录到图像中,还是添加单独的流?
ffmpeg - 将常规文件复用到 Mpeg TS
我正在使用 mpeg2-ts 和 ISDB-T(综合服务数字广播 - 陆地)的文件广播方法工作,我的问题是我无法将文件放入数据流中,或者作为 rawvideo,或者在mpeg-ts....我正在使用 ffmpeg 和 avconv。下面是一个测试示例:
ffmpeg -f mpegts -i Myfile.tgz -probesize FILESIZE -mpegts_original_network_id 0x1 -mpegts_transport_stream_id 0x1 -mpegts_service_id 0x25 -mpegts_pmt_start_pid 0xbb9 -mpegts_start_pid 0xbba -metadata service_provider="FILESSERVER" -metadata service_name="FILE.tsS" -mux 输出
http-live-streaming - 从 HLS 流中提取 ts 段的第一帧(m3u8)
我想从 ts 段中提取第一个 video_frame(image) 。在我的清单文件中,m3u8 iframe 标签没有出现。谁能建议如何在不下载完整 ts 段的情况下提取第一个 video_frame(image) 。
h.264 - 如何使 Media Foundation H.264 解码器工作?
由于某种原因,我无法解码 H.264。输入/输出配置进展顺利,就像输入/输出缓冲区创建一样。
我正在手动为解码器提供从实时流中解复用的 H.264。因此,我使用 MFVideoFormat_H264_ES 作为媒体子类型。解码速度很慢,解码后的帧完全是垃圾。其他解码器正在正确解码相同的流。
奇怪的是,一旦 ProcessInput() 返回 MF_E_NOTACCEPTING,下面的 ProcessOutput() 就会返回 MF_E_TRANSFORM_NEED_MORE_INPUT。根据 MSDN,这绝不应该发生。
任何人都可以提供一些关于如何做到这一点的具体信息吗?(假设 MF H.264 可以正常工作,我对此表示严重怀疑)。
我愿意提供额外的信息,但我不知道有人可能需要什么来提供帮助。
编辑:我应该什么时候将输入缓冲区中的字节数重置为零?顺便说一句,当 ProcessOutput() 提供一些东西(垃圾)时,我正在重置输出缓冲区。
Edit2:在不将输入缓冲区上的当前缓冲区大小重置为 0 的情况下,我设法获得了一些半有效的输出。半有效是指在每个成功的 ProcessOutput() 上,我都会收到一个 YUV 图像,其中当前图像包含比前一帧更多的解码宏块。框架的其余部分是黑色的。因为我没有重置大小,所以这会在一段时间后停止。所以,我想重置缓冲区大小存在问题,我想我应该在整个帧完成(或不完成)时收到一些通知。
Edit3:在创建输入缓冲区时,GetInputStreamInfo() 返回 4096 作为输入缓冲区大小。对齐0。但是,4k是不够的。增加到 4MB 有助于逐帧解压缩帧片段。仍然必须弄清楚是否有办法判断整个帧何时解码。
h.264 - 没有“0x00 0x00 0x00 0x01 0x65”的 H.264 有效载荷
我试图通过搜索来检测 TS 中的 I 帧:
但是,它不适用于某些流。在某些流中,这种序列非常罕见。有没有其他方法可以检测 I 帧?
编辑:我还尝试将 TS 保存到文件中,然后提取 H.264 有效负载。提取的有效载荷仅包含几个 0x00 0x00 0x00 0x01 0x65 字节序列。