Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Video streaming MPEG-ES H.264视频从RTP转换为MPEG-TS_Video Streaming_H.264_Mpeg - Fatal编程技术网

Video streaming MPEG-ES H.264视频从RTP转换为MPEG-TS

Video streaming MPEG-ES H.264视频从RTP转换为MPEG-TS,video-streaming,h.264,mpeg,Video Streaming,H.264,Mpeg,我正在实现ATSC-153规范,该规范基本上根据RFC3984以IP/UDP/RTP格式广播基线H.264视频配置文件。这些帧的片段正在被重新组装,并且在我正在使用的嵌入式处理器上发挥了很大的作用,尽管由于某种原因正在发生一些损坏,我正试图追踪这些损坏。我试图将其封装到MPEG-TS中,以便在Windows(VLC)上进行比较,但由于某些原因,我遇到了困难。由于某些原因,VLC、TSReader和MPEG2Repair无法找到视频。我正在执行的步骤如下,对于我正在接收的SPS或PPS H.264

我正在实现ATSC-153规范,该规范基本上根据RFC3984以IP/UDP/RTP格式广播基线H.264视频配置文件。这些帧的片段正在被重新组装,并且在我正在使用的嵌入式处理器上发挥了很大的作用,尽管由于某种原因正在发生一些损坏,我正试图追踪这些损坏。我试图将其封装到MPEG-TS中,以便在Windows(VLC)上进行比较,但由于某些原因,我遇到了困难。由于某些原因,VLC、TSReader和MPEG2Repair无法找到视频。我正在执行的步骤如下,对于我正在接收的SPS或PPS H.264帧都是相同的

  • 创建PAT/PMT,PMT PID 0x11,视频类型为0x1b,视频PID为0x280,PCR PID为0x1FF(无PCR)。事实上,我每15帧左右就看一次

  • 我将访问单元分隔符NAL编号9附加到帧中。我认为这应该附加到传输中的所有H.264帧。主要pic类型为1(0x30字节),对应于基线配置文件的I,P

  • 我在此附加了一个PES头帧,其中包含来自RTP头的PTS

  • 我附加了4字节的TS头。在画面开始时,我设置了PUS位。我为序列保留了一个4位计数器

  • 任何不能被184整除的剩余字节,我放入一个TS数据包中,并将一个自适应字段(长度设置,标志字节设置为0)填充(或填充)到剩余字节

  • 我确保流以SPS帧开始。据我的理解(可能不是很好),这应该包含一幅真实的图片。SPS帧在流中大约为15K字节。这里是第一个TS数据包的转储:

    000  47 42 80 15 00 00 01 E0 00 00 81 80 05 21 AA BB
    010  9A 91 00 00 00 01 09 30 00 00 00 01 67 42 C0 14
    020  9A 44 0D 0F 9F F8 00 08 00 08 04 00 00 00 01 68
    030  DE 24 88 00 00 00 01 E6 87 26 D6 AC FA 58 78 24
    040  0E EB B5 5B 02 AF 6C EB E1 E4 9F 35 BD 61 56 F8
    050  4A 4E 58 00 00 01 65 88 80 20 20 9E 1D 60 20 61
    060  15 D8 02 70 F9 29 C0 00 40 C6 23 3A 76 CA 78 9A
    070  4D 7D 79 C1 6E 94 3E A8 76 50 4B F7 B5 B0 40 2B
    080  52 48 93 B1 A2 4A 4F 3D 14 F1 B8 7E FA 98 91 FE
    090  DC EB 0F 11 BF EB D1 B8 E0 3F 5A C2 91 2D FA 83
    0A0  03 EF 51 10 18 D6 D4 77 90 78 97 D5 BF 94 61 6D
    0B0  69 53 AF 5B 42 FE D7 A3 9D 21 81 FC 
    
    在上面的数据包中,我收到的实际视频帧从偏移量0x18开始。之前我添加的所有内容。00 01 67应指示SPS

    对于PPS帧(通常运行3Kbytes到4Kbytes),其转储如下:

    000  47 42 80 19 00 00 01 E0 00 00 81 80 05 21 AA BB
    010  F8 51 00 00 00 01 09 30 00 00 00 01 41 9A 01 05
    020  0F FF F4 3D FE 9B 0F 5E BE 18 15 20 00 50 0D 51
    030  58 32 47 F5 E7 86 1B 43 A6 FC F5 CA 64 A6 7F CF
    040  CB 94 C8 1F F2 FF 51 F7 7D DD DF 51 97 C7 C2 97
    050  77 77 77 BB B4 8B E9 B8 F9 70 D7 75 7A FF D8 64
    060  E8 C1 CE 06 83 58 20 24 00 06 66 70 BC DB C3 8D
    070  8E 6D FC 8C 5D EE 0D CC 63 61 13 BB F3 0F 0D 9F
    080  28 82 54 E4 A2 1C 21 55 BF F3 C1 86 7D 90 47 52
    090  5F C2 C6 E2 A7 3B 5E E0 A1 5B A2 C3 24 05 97 17
    0A0  A1 B2 04 22 78 F0 6F 0C DA 85 DC 7C E3 69 85 2B
    0B0  AC 02 02 01 9C 5B 11 DC B5 85 44 CE 
    
    我只能期待在这一点上,我错过了一些需要的东西,我做了一些不正确的事情,或者RFC3984重新组装的东西是可怕的错误,以至于解码器无法识别这是视频

    所以,我先问前两个问题。规格中有什么我遗漏的吗?从转储中看,我是否正确地实现了这一点


    非常感谢。

    好吧,总的来说我知道了。问题在于PMT,我没有提供一个转储。上面的封装是正确的。一旦我修复了PMT,流将在目标板上播放。

    对于转储,我深表歉意,它们没有像我认为的那样进入。非常感谢osgx为我重新格式化。我还是个新手。