{"id":1281,"date":"2024-08-16T16:40:29","date_gmt":"2024-08-16T08:40:29","guid":{"rendered":"https:\/\/www.fanyamin.com\/wordpress\/?p=1281"},"modified":"2024-08-16T16:48:02","modified_gmt":"2024-08-16T08:48:02","slug":"%e5%a6%82%e4%bd%95%e8%ae%a1%e7%ae%97-mpegts-%e6%96%87%e4%bb%b6%e7%9a%84%e9%95%bf%e5%ba%a6","status":"publish","type":"post","link":"https:\/\/www.fanyamin.com\/wordpress\/?p=1281","title":{"rendered":"\u5982\u4f55\u8ba1\u7b97 mpegts \u6587\u4ef6\u7684\u957f\u5ea6"},"content":{"rendered":"<h1>Background<\/h1>\n<p>ts\u6587\u4ef6\u4e3a\u4f20\u8f93\u6d41\u6587\u4ef6, \u89c6\u9891\u7f16\u7801\u4e3b\u8981\u683c\u5f0f h264\/mpeg4, \u97f3\u9891\u4e3a acc\/mp3\u3002<\/p>\n<p>ts\u6587\u4ef6\u5206\u4e3a\u4e09\u5c42:<\/p>\n<p>1) ts \u5c42Transport Stream\u3001<\/p>\n<ul>\n<li>ts \u5c42\u5c31\u662f\u5728pes\u5c42\u52a0\u5165\u6570\u636e\u6d41\u7684\u8bc6\u522b\u548c\u4f20\u8f93\u5fc5\u987b\u7684\u4fe1\u606f<\/li>\n<li>ts \u6d41: \u7531\u5b9a\u957f\u7684TS\u5305\u7ec4\u6210 (188\u5b57\u8282) , \u800cTS\u5305\u662f\u5bf9PES\u5305\u7684\u4e00\u4e2a\u91cd\u65b0\u5c01\u88c5 (\u5230\u8fd9\u91cc, ES\u7ecf\u8fc7\u4e86\u4e24\u5c42\u7684\u5c01\u88c5)  \u3002\u5e94\u7528\u4e8e\u76f8\u5bf9\u6709\u9519\u73af\u5883\u4e0b\u7684\u4f20\u8f93\u4e0e\u5b58\u50a8 (\u5982DVB\u4e2d) , \u5176\u57fa\u672c\u5355\u4f4d\u662fTS\u5305, \u957f\u5ea6\u56fa\u5b9a188\u5b57\u8282\u3002\u65e5\u672c\u7684DVB-S\u5e7f\u64ad\u7cfb\u7edf\u91c7\u7528192\u4e2a\u5b57\u8282\u7684TS\u5305, \u7f8e\u56fd\u91c7\u7528204\u4e2a\u5b57\u8282\u7684TS\u5305, \u591a\u52a0\u4e8616\u4e2a\u5b57\u8282\u7684\u524d\u5411\u7ea0\u9519\u6821\u9a8c\u7801 (FEC) \u3002<\/li>\n<\/ul>\n<p>2) pes \u5c42 Packet Elemental Stream\u3001<\/p>\n<ul>\n<li>pes \u5c42\u662f\u5728\u97f3\u89c6\u9891\u6570\u636e\u4e0a\u52a0\u4e86\u65f6\u95f4\u6233\u7b49\u5bf9\u6570\u636e\u5e27\u7684\u8bf4\u660e\u4fe1\u606f,<\/li>\n<li>pes \u6d41: PES\u6d41\u662fES\u6d41\u7ecf\u8fc7PES\u6253\u5305\u5668\u5904\u7406\u540e\u5f62\u6210\u7684\u6570\u636e\u6d41, \u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\u5b8c\u6210\u4e86\u5c06ES\u6d41\u5206\u7ec4\u3001\u6253\u5305\u3001\u52a0\u5165\u5305\u5934\u4fe1\u606f\u7b49\u64cd\u4f5c (\u5bf9ES\u6d41\u7684\u7b2c\u4e00\u6b21\u6253\u5305) \u3002PES\u6d41\u7684\u57fa\u672c\u5355\u4f4d\u662fPES\u5305\u3002<\/li>\n<\/ul>\n<p>3) es \u5c42 Elementary Stream.<\/p>\n<ul>\n<li>es \u5c42\u5c31\u662f\u97f3\u89c6\u9891\u6570\u636e,<\/li>\n<li>es \u6d41: \u6709\u4e09\u79cd, \u56fe\u50cf\u6570\u636e\u6d41, \u97f3\u9891\u6570\u636e\u6d41, \u4ee5\u53ca\u5176\u4ed6\u7f16\u7801\u6570\u636e\u6d41\u3002<\/li>\n<\/ul>\n<p>mpegts \u6587\u4ef6\u7ed3\u6784\u5982\u4e0b<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.fanyamin.com\/wordpress\/wp-content\/uploads\/2024\/08\/image-1723797868422.png\" alt=\"file\" \/><\/p>\n<p>mpegts \u6587\u4ef6\u5934\u5b57\u6bb5\u5982\u4e0b<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.fanyamin.com\/wordpress\/wp-content\/uploads\/2024\/08\/image-1723797888797.png\" alt=\"file\" \/><\/p>\n<ul>\n<li>\n<p>The Sync Byte (0x47) marks the beginning of each MPEG-2 transport stream (TS) packet, serving as a synchronization indicator for packet boundaries.<\/p>\n<\/li>\n<li>\n<p>The PID (Packet Identifier) field within each TS packet identifies the type of payload contained in the packet. Different PID values correspond to various components of the transport stream:<\/p>\n<ul>\n<li>PID 0x0000 points to the Program Association Table (PAT), which lists all programs and their corresponding Program Map Table (PMT) PIDs.<\/li>\n<li>PID 0x0010 points to the Network Information Table (NIT), providing network-related information and descriptors.<\/li>\n<li>PIDs obtained from the PAT point to the PMT, which lists all elementary streams (audio, video, etc.) for a specific program.<\/li>\n<li>PIDs obtained from the PMT point to the actual elementary streams carrying audio, video, or other data.<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>The Program Association Table (PAT) is a vital component of the MPEG-2 transport stream. It lists all programs available in the stream along with the PID of their respective Program Map Tables (PMTs).<\/p>\n<\/li>\n<li>\n<p>The Program Map Table (PMT) contains detailed information about the elementary streams associated with a specific program. It lists all elementary streams, such as audio and video streams, along with their corresponding PIDs.<\/p>\n<\/li>\n<li>\n<p>The Network Information Table (NIT) provides network-related information and descriptors within the MPEG-2 transport stream. It includes details about the network structure, service providers, and other relevant information.<\/p>\n<\/li>\n<li>\n<p>Elementary Streams within the MPEG-2 transport stream contain the actual audio, video, or other data transmitted over the network. These streams are identified by their PIDs and are crucial for decoding and playback of multimedia content.<\/p>\n<\/li>\n<\/ul>\n<h3>1. <strong>Understand the MPEG-TS Structure:<\/strong><\/h3>\n<ul>\n<li>MPEG-TS (MPEG Transport Stream) files consist of packets, typically 188 bytes in size.<\/li>\n<li>Each packet starts with a 4-byte header, which includes a sync byte (0x47).<\/li>\n<li>The packets contain various streams, such as audio, video, and metadata.<\/li>\n<\/ul>\n<h3>2. <strong>Extract Relevant Packets:<\/strong><\/h3>\n<ul>\n<li><strong>PCR (Program Clock Reference):<\/strong> This is used to calculate the timing information. The PCR values are typically found in the adaptation field of the packet header.<\/li>\n<li><strong>PTS (Presentation Timestamp) and DTS (Decoding Timestamp):<\/strong> These are used to synchronize the decoding and presentation of the audio\/video.<\/li>\n<\/ul>\n<h3>3. <strong>Calculate Duration:<\/strong><\/h3>\n<ul>\n<li>Find the first and last PCR values in the file.<\/li>\n<li>The duration can be calculated using the difference between the first and last PCR values:<br \/>\n[<br \/>\n\\text{Duration} = \\frac{\\text{PCR}<em>{\\text{last}} - \\text{PCR}<\/em>{\\text{first}}}{\\text{PCR_frequency}}<br \/>\n]<br \/>\nwhere <code>PCR_frequency<\/code> is typically 27 MHz (27,000,000 ticks per second).<\/li>\n<\/ul>\n<h3>4. <strong>Calculate Bitrate:<\/strong><\/h3>\n<ul>\n<li><strong>File Size:<\/strong> Determine the total file size in bits.<\/li>\n<li><strong>Duration:<\/strong> Use the duration calculated from the PCR.<\/li>\n<li>Bitrate can then be calculated as:<br \/>\n[<br \/>\n\\text{Bitrate} = \\frac{\\text{Total File Size in bits}}{\\text{Duration in seconds}}<br \/>\n]<\/li>\n<\/ul>\n<h3>5. <strong>Manual Parsing:<\/strong><\/h3>\n<ul>\n<li>You would need to manually parse the binary data to extract the first and last PCR values.<\/li>\n<li>This involves reading the file byte-by-byte, identifying the sync byte (0x47), and then locating the PCR values within the adaptation field.<\/li>\n<\/ul>\n<p>\u4f8b\u5982\u6211\u6709\u4e00\u4e2a mpegts \u6587\u4ef6, \u901a\u8fc7 ffprobe \u5f97\u77e5\u5b83\u7684\u957f\u5ea6\u4e3a 86.9 \u79d2: duration=86.999989<\/p>\n<pre><code>% ffprobe -show_format -show_streams record_20240814185406_00092.ts\nffprobe version 7.0 Copyright (c) 2007-2024 the FFmpeg developers\n  built with Apple clang version 15.0.0 (clang-1500.1.0.2.5)\n  configuration: --prefix=\/opt\/homebrew\/Cellar\/ffmpeg\/7.0_1 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags=&#039;-Wl,-ld_classic&#039; --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libaribb24 --enable-libbluray --enable-libdav1d --enable-libharfbuzz --enable-libjxl --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopenvino --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox --enable-audiotoolbox --enable-neon\n  libavutil      59.  8.100 \/ 59.  8.100\n  libavcodec     61.  3.100 \/ 61.  3.100\n  libavformat    61.  1.100 \/ 61.  1.100\n  libavdevice    61.  1.100 \/ 61.  1.100\n  libavfilter    10.  1.100 \/ 10.  1.100\n  libswscale      8.  1.100 \/  8.  1.100\n  libswresample   5.  1.100 \/  5.  1.100\n  libpostproc    58.  1.100 \/ 58.  1.100\n[mpegts @ 0x12e605e80] DTS discontinuity in stream 0: packet 11 with DTS 406832999, packet 12 with DTS 414623999\nInput #0, mpegts, from &#039;record_20240814185406_00092.ts&#039;:\n  Duration: 00:01:27.00, start: 4520.000000, bitrate: 10 kb\/s\n  Program 1\n  Stream #0:0[0x41]: Video: h264 (Constrained Baseline) (HDMV \/ 0x564D4448), yuv420p(progressive), 1920x1080, 30 tbr, 90k tbn\n[STREAM]\nindex=0\ncodec_name=h264\ncodec_long_name=H.264 \/ AVC \/ MPEG-4 AVC \/ MPEG-4 part 10\nprofile=Constrained Baseline\ncodec_type=video\ncodec_tag_string=HDMV\ncodec_tag=0x564d4448\nwidth=1920\nheight=1080\ncoded_width=1920\ncoded_height=1080\nclosed_captions=0\nfilm_grain=0\nhas_b_frames=0\nsample_aspect_ratio=N\/A\ndisplay_aspect_ratio=N\/A\npix_fmt=yuv420p\nlevel=40\ncolor_range=unknown\ncolor_space=unknown\ncolor_transfer=unknown\ncolor_primaries=unknown\nchroma_location=unspecified\nfield_order=progressive\nrefs=1\nis_avc=false\nnal_length_size=0\nts_id=1\nts_packetsize=188\nid=0x41\nr_frame_rate=30\/1\navg_frame_rate=0\/0\ntime_base=1\/90000\nstart_pts=406800000\nstart_time=4520.000000\nduration_ts=7829999\nduration=86.999989\nbit_rate=N\/A\nmax_bit_rate=N\/A\nbits_per_raw_sample=8\nnb_frames=N\/A\nnb_read_frames=N\/A\nnb_read_packets=N\/A\nextradata_size=23\nDISPOSITION:default=0\nDISPOSITION:dub=0\nDISPOSITION:original=0\nDISPOSITION:comment=0\nDISPOSITION:lyrics=0\nDISPOSITION:karaoke=0\nDISPOSITION:forced=0\nDISPOSITION:hearing_impaired=0\nDISPOSITION:visual_impaired=0\nDISPOSITION:clean_effects=0\nDISPOSITION:attached_pic=0\nDISPOSITION:timed_thumbnails=0\nDISPOSITION:non_diegetic=0\nDISPOSITION:captions=0\nDISPOSITION:descriptions=0\nDISPOSITION:metadata=0\nDISPOSITION:dependent=0\nDISPOSITION:still_image=0\n[\/STREAM]\n[FORMAT]\nfilename=record_20240814185406_00092.ts\nnb_streams=1\nnb_programs=1\nnb_stream_groups=0\nformat_name=mpegts\nformat_long_name=MPEG-TS (MPEG-2 Transport Stream)\nstart_time=4520.000000\nduration=86.999989\nsize=119004\nbit_rate=10942\nprobe_score=50\n[\/FORMAT]<\/code><\/pre>\n<p>\u90a3\u5b83\u662f\u600e\u4e48\u7b97\u51fa\u6765\u7684\u5462?<\/p>\n<p>\u901a\u8fc7\u8fd9\u4e2a TS \u6587\u4ef6\u7684\u6700\u540e\u4e00\u4e2a\u6709 Adaptation fields \u5305\u4e2d\u7684 PCR \u5b57\u6bb5(PCR_n), \u51cf\u53bb\u7b2c\u4e00\u4e2a\u6709 Adaptation fields \u5305\u4e2d\u7684 PCR \u5b57\u6bb5(PCR_1)<\/p>\n<p>\u4f8b\u5982\u53d1\u73b0 package 626 \u4e2d\u6709 Adaptation fields \u5b57\u6bb5,  PCR: 124383824700<\/p>\n<pre><code>Adaptation fields\n   Adaptation_field_length: 7\n   discontinuity_indicator: False\n   random_access_indicator: False\n   ES_priority_indicator: False\n   PCR_flag: True\n   OPCR_flag: False\n   splicing_point_flag: False\n   transport_private_data_flag: False\n   adaptation_field_extension_flag: False\n   PCR: 124383824700\n\nPES header\n   stream_id: E0 (video stream 224)\n   PES_packet_length: 662\n   PES_scrambling: 0\n   PES_priority: False\n   data_alignment: False\n   copyright: False\n   original_or_copy: True\n   PTS_flag: True\n   DTS_flag: False\n   ESCR_flag: False\n   ES_rate_flag: False\n   DSM_trick_mode_flag: False\n   additional_copy_info_flag: False\n   PES_CRC_flag: False\n   PES_extension_flag: False\n   PES_header_data_length: 5\n   PTS: 414623999\n\nVideo sequence\nSequence header code not found in this packet\nAFD not found in this packet<\/code><\/pre>\n<ul>\n<li>package 3 \u4e2d\u4e5f\u6709 Adaptation fields, \u5176\u4e2d PCR: 122036625000<\/li>\n<\/ul>\n<pre><code>\nAdaptation fields\n   Adaptation_field_length: 7\n   discontinuity_indicator: False\n   random_access_indicator: True\n   ES_priority_indicator: False\n   PCR_flag: True\n   OPCR_flag: False\n   splicing_point_flag: False\n   transport_private_data_flag: False\n   adaptation_field_extension_flag: False\n   PCR: 122036625000\n\nPES header\n   stream_id: E0 (video stream 224)\n   PES_packet_length: 0 (undefined)\n   PES_scrambling: 0\n   PES_priority: False\n   data_alignment: False\n   copyright: False\n   original_or_copy: True\n   PTS_flag: True\n   DTS_flag: False\n   ESCR_flag: False\n   ES_rate_flag: False\n   DSM_trick_mode_flag: False\n   additional_copy_info_flag: False\n   PES_CRC_flag: False\n   PES_extension_flag: False\n   PES_header_data_length: 5\n   PTS: 406800000\n\nVideo sequence\nSequence header code not found in this packet\nAFD not found in this packet<\/code><\/pre>\n<p>\u800c PCR \u7684\u542b\u4e49\u5982\u4e0b<\/p>\n<p>The Program Clock Reference (PCR) is a timestamp used in MPEG Transport Streams (MPEG-TS) to synchronize the decoding of audio and video data. PCR helps the decoder to reconstruct the timing of the original media streams. Here\u2019s a detailed explanation of the PCR format:<\/p>\n<h3>1. <strong>PCR Structure:<\/strong><\/h3>\n<p>The PCR is a 42-bit value that consists of two parts:<\/p>\n<ul>\n<li><strong>PCR Base (33 bits):<\/strong> Represents the most significant part of the PCR and has a 27 MHz clock frequency.<\/li>\n<li><strong>PCR Extension (9 bits):<\/strong> Represents the least significant part and extends the precision of the PCR with a 90 kHz clock frequency.<\/li>\n<\/ul>\n<h3>2. <strong>Bit Allocation:<\/strong><\/h3>\n<ul>\n<li><strong>PCR Base (33 bits):<\/strong> Occupies bits 0 to 32.<\/li>\n<li><strong>Reserved (6 bits):<\/strong> Follows the PCR base, and these bits are reserved for future use (usually set to 0).<\/li>\n<li><strong>PCR Extension (9 bits):<\/strong> Occupies bits 42 to 50.<\/li>\n<\/ul>\n<h3>3. <strong>Detailed Breakdown:<\/strong><\/h3>\n<ul>\n<li>\n<p><strong>PCR Base:<\/strong> The PCR base is a counter that increments at a rate of 27 MHz. It rolls over every 2^33 ticks, which means the value wraps around to 0 after approximately 26.5 hours.<\/p>\n<ul>\n<li><strong>Range:<\/strong> 0 to (2^{33} - 1) (0 to 8,589,934,591)<\/li>\n<li><strong>Clock Rate:<\/strong> 27 MHz (27,000,000 ticks per second)<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>PCR Extension:<\/strong> The PCR extension provides additional precision by adding a fractional component to the PCR base. It increments at a rate of 90 kHz.<\/p>\n<ul>\n<li><strong>Range:<\/strong> 0 to (2^{9} - 1) (0 to 511)<\/li>\n<li><strong>Clock Rate:<\/strong> 90 kHz (90,000 ticks per second)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3>4. <strong>PCR Calculation:<\/strong><\/h3>\n<ul>\n<li>\n<p><strong>PCR Value:<\/strong> The full PCR value is calculated as:<br \/>\n[<br \/>\n\\text{PCR} = \\text{PCR Base} \\times 300 + \\text{PCR Extension}<br \/>\n]<br \/>\nThis formula considers the 27 MHz clock and the additional precision from the 90 kHz clock.<\/p>\n<\/li>\n<li>\n<p><strong>Interpretation:<\/strong> The PCR gives the time at which the packet carrying the PCR was transmitted. The decoder uses this information to synchronize playback by comparing the PCR value with the system clock reference (SCR) of the decoder.<\/p>\n<\/li>\n<\/ul>\n<h3>5. <strong>Location in MPEG-TS Packet:<\/strong><\/h3>\n<ul>\n<li>PCR is found in the adaptation field of an MPEG-TS packet, which is present if the <code>adaptation_field_control<\/code> bits in the packet header are set accordingly.<\/li>\n<li>If the adaptation field is present, the PCR is located at a specific offset within that field.<\/li>\n<\/ul>\n<h3>6. <strong>Example:<\/strong><\/h3>\n<p>If the PCR base is <code>0x123456789<\/code> (hexadecimal) and the PCR extension is <code>0x1FF<\/code>:<\/p>\n<ul>\n<li><strong>PCR Base:<\/strong> ( \\text{PCR Base} = 781,874,935,29 )<\/li>\n<li><strong>PCR Extension:<\/strong> ( \\text{PCR Extension} = 511 )<\/li>\n<li><strong>PCR Value:<\/strong> ( \\text{PCR} = 781,874,935,29 \\times 300 + 511 = 234,562,480,028,511 ) ticks<\/li>\n<\/ul>\n<h3>7. <strong>Use in Synchronization:<\/strong><\/h3>\n<p>PCR values are periodically inserted into the MPEG-TS stream (usually every 100 ms or so) to maintain synchronization. The decoder uses these values to correct any drift in its clock, ensuring that audio and video remain in sync during playback.<\/p>\n<h3>Summary:<\/h3>\n<ul>\n<li><strong>PCR<\/strong> is a 42-bit timestamp used for synchronization in MPEG-TS.<\/li>\n<li><strong>PCR Base<\/strong>: 33 bits, increments at 27 MHz.<\/li>\n<li><strong>PCR Extension<\/strong>: 9 bits, increments at 90 kHz.<\/li>\n<li><strong>Location<\/strong>: Found in the adaptation field of MPEG-TS packets.<\/li>\n<\/ul>\n<h2>\u7ed3\u8bba<\/h2>\n<pre><code>(124383824700 - 122036625000)\/27000000 = 86.93<\/code><\/pre>\n<p>\u672b\u5c3e\u7684 TS package \u7684 PCR \u51cf\u53bb\u5f00\u5934\u7684 TS package \u7684 PCR \u503c, \u518d\u9664\u4ee5 27,000,000, \u5c31\u5f97\u51fa\u4e86\u8fd9\u4e2a TS \u7684\u957f\u5ea6\u662f 86 \u79d2\u591a<\/p>\n<p>\u4e3a\u4ec0\u4e48\u8981\u9664\u4ee5 27000000, \u56e0\u4e3a &quot; PCR base is a counter that increments at a rate of 27 MHz&quot;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Background ts\u6587\u4ef6\u4e3a\u4f20\u8f93\u6d41\u6587\u4ef6, \u89c6\u9891\u7f16\u7801\u4e3b\u8981\u683c\u5f0f h264\/mpeg4, \u97f3\u9891\u4e3a acc\/mp3\u3002 ts\u6587\u4ef6\u5206\u4e3a\u4e09\u5c42: 1) ts \u5c42Transport Stream\u3001 ts \u5c42\u5c31\u662f\u5728pes\u5c42\u52a0\u5165\u6570\u636e\u6d41\u7684\u8bc6\u522b\u548c\u4f20\u8f93\u5fc5\u987b\u7684\u4fe1\u606f ts \u6d41: \u7531\u5b9a\u957f\u7684TS\u5305\u7ec4\u6210 (188\u5b57\u8282) , \u800cTS\u5305\u662f\u5bf9PES\u5305\u7684\u4e00\u4e2a\u91cd\u65b0\u5c01\u88c5 (\u5230\u8fd9\u91cc, ES\u7ecf\u8fc7\u4e86\u4e24\u5c42\u7684\u5c01\u88c5) \u3002\u5e94\u7528\u4e8e\u76f8\u5bf9\u6709\u9519\u73af\u5883\u4e0b\u7684\u4f20\u8f93\u4e0e\u5b58\u50a8 (\u5982DVB\u4e2d) , \u5176\u57fa\u672c\u5355\u4f4d\u662fTS\u5305, \u957f\u5ea6\u56fa\u5b9a188\u5b57\u8282\u3002\u65e5\u672c\u7684DVB-S\u5e7f\u64ad\u7cfb\u7edf\u91c7\u7528192\u4e2a\u5b57\u8282\u7684TS\u5305, \u7f8e\u56fd\u91c7\u7528204\u4e2a\u5b57\u8282\u7684TS\u5305, \u591a\u52a0\u4e8616\u4e2a\u5b57\u8282\u7684\u524d\u5411\u7ea0\u9519\u6821\u9a8c\u7801 (FEC) \u3002 2) pes \u5c42 Packet Elemental Stream\u3001 pes \u5c42\u662f\u5728\u97f3\u89c6\u9891\u6570\u636e\u4e0a\u52a0\u4e86\u65f6\u95f4\u6233\u7b49\u5bf9\u6570\u636e\u5e27\u7684\u8bf4\u660e\u4fe1\u606f, pes \u6d41: PES\u6d41\u662fES\u6d41\u7ecf\u8fc7PES\u6253\u5305\u5668\u5904\u7406\u540e\u5f62\u6210\u7684\u6570\u636e\u6d41, \u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\u5b8c\u6210\u4e86\u5c06ES\u6d41\u5206\u7ec4\u3001\u6253\u5305\u3001\u52a0\u5165\u5305\u5934\u4fe1\u606f\u7b49\u64cd\u4f5c (\u5bf9ES\u6d41\u7684\u7b2c\u4e00\u6b21\u6253\u5305) \u3002PES\u6d41\u7684\u57fa\u672c\u5355\u4f4d\u662fPES\u5305\u3002 3) es \u5c42 Elementary Stream. es \u5c42\u5c31\u662f\u97f3\u89c6\u9891\u6570\u636e, es \u6d41: \u6709\u4e09\u79cd, \u56fe\u50cf\u6570\u636e\u6d41, [&hellip;] <a class=\"read-more\" href=\"https:\/\/www.fanyamin.com\/wordpress\/?p=1281\" title=\"Permanent Link to: \u5982\u4f55\u8ba1\u7b97 mpegts \u6587\u4ef6\u7684\u957f\u5ea6\">&rarr;Read&nbsp;more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-1281","post","type-post","status-publish","format-standard","hentry","category-5"],"_links":{"self":[{"href":"https:\/\/www.fanyamin.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1281"}],"collection":[{"href":"https:\/\/www.fanyamin.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fanyamin.com\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fanyamin.com\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fanyamin.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1281"}],"version-history":[{"count":4,"href":"https:\/\/www.fanyamin.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1281\/revisions"}],"predecessor-version":[{"id":1287,"href":"https:\/\/www.fanyamin.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1281\/revisions\/1287"}],"wp:attachment":[{"href":"https:\/\/www.fanyamin.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1281"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fanyamin.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1281"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fanyamin.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1281"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}