Abstract:
A method to eliminate objectionable artifacts that occur at the transition between two independently created MPEG-2 transport streams is provided herein. The method processes all of the elementary streams in one program of a transport stream to eliminate partial or missing information at the transitions. The length of the transport stream is altered so that its presentation duration is exactly equal to its transmission duration. A fixed delay is used between the beginning of transmission and the beginning of presentation. The same delay is used between the end of transmission and the end of presentation. The transport stream transmission duration is set by adjusting the number of transport packets and altering the system clock frequency.

Description:
BACKGROUND 
     1. Field of Invention 
     This invention relates to the processing and transfer of data according to the standard adopted by the Moving Picture Experts Group (MPEG), specifically, to a method of processing an MPEG- 2  transport stream to ensure a smooth transition with a similarly processed transport stream. 
     2. Description of Prior Art 
     The MPEG- 2  standard consists of the International Standards Organization (ISO) standards 13818-1 Systems, 13818-2 Video and 13818-3 Audio, which are hereby incorporated by reference. 
     MPEG- 2  is most commonly used in television systems. Applications of MPEG- 2  exist both in broadcast environments and in storage environments. In a broadcast environment, content is encoded on a continuous basis and all changes in source material must be made prior to the encoding process. In a storage environment, content is encoded and stored. A video file server may transmit the stored, precompressed streams at a later time. 
     The transport stream output from an MPEG- 2  storage encoder typically consists of a single program of a defined length which was encoded according to a set of user specified configuration parameters. Because the encoder was designed to create content in an isolated environment for storage purposes, it is likely that the implications of decoding in a broadcast system were not fully considered. For example, while it may be possible to create a stream with an exact number of frames, there may still be a timing discontinuity if two such streams are played consecutively on a decoder. This discontinuity would be visible as a roll or tear on the monitor. 
     Use of a broadcast encoder to generate transport stream segments is also problematic. In this case, the control system may not easily permit setting encoding parameters with fine temporal granularity. For example, it may not be possible to specify that a particular frame should be encoded as an I-Picture, or it may be difficult to coordinate the encoder and storage equipment to capture a stream that is exactly the program duration. 
     In Video on Demand (VOD) or Near Video on Demand (NVOD) applications, a video server transmits pre-compressed programs at scheduled times. It is highly desirable for the consumer to view the decoded stream as a continuous experience without objectionable artifacts or transitions. This goal is a challenge because each program may be encoded and stored individually, possibly from different encoders. 
     Although the video server may be able to stream back-to-back programs from two files without interruption, errors may still be perceived at the transition depending upon how the stored transport streams begin and end. Because transport streams are coded hierarchically, discontinuities may occur at multiple layers in the stream. The resulting artifacts vary in severity, depending upon the nature of the discontinuity. At a worst case, a full reacquisition of the transport stream will occur when both audio and video decoders lose synchronization at the transition. The reconstructed video may exhibit a roll or tear when the monitor resynchronizes due to a discontinuity in the frame timing. There may also be a chrominance loss or shift if there is a time base discontinuity. The displayed video may exhibit blocky artifacts that persist for several frames if predictive frames reference an incorrect anchor frame or if an incomplete picture is sent at the transition. Audio may dropout, pop, or hiss if incomplete sync frames are decoded. 
     In an article by S. Marrill Weiss in the  SMPTE Journal , December 1995, titled “Switching Facilities in MPEG- 2 : Necessary But Not Sufficient”, the problems associated with concatenating separately compressed MPEG- 2  streams are discussed. Several extensions to MPEG- 2  are proposed. The author does not claim that these extensions will answer all needs or that they will completely solve any of the problems. Rather they are put forth to provide a basis for further developments. The approach is based on imposing constraints on how the transport stream is generated. The extensions proceed by first restricting the transport rate so that each video access unit period is an integral number of transport packets. The transport stream duration is restricted to one of a number of standardized lengths. An additional constraint limits the GOP, or I frame refresh, rate to a fixed number of frames. Specific transition points are also defined in the transport stream, and the encoder must fill the buffer for all elementary streams to a defined level at the transition points. There are several problems with this approach. For example, the requirement of meeting a specific buffer fullness may adversely affect the quality of the video since the optimal bit allocation between pictures will have to be changed. Additionally, constraining the transport rate will not be possible for many applications, such as satellite transmission, where the transport rate is a function of the channel. 
     U.S. Pat. No. 5,534,944 to Egawa et al. (1996) proposes a solution to the splicing of video streams wherein stuffing bits are used at the splicing point to position the decoder&#39;s buffer at the appropriate level for the new video stream. While this approach will avoid buffer problems, it does not address several problems associated with transitions between previously encoded transport streams. For example, the presence of non-video elementary streams, splicing in the middle of a video stream where there may be odd fields or missing anchor frames, allowing streams to be spliced together in any order, and the timing problems associated with the transport layer are not addressed. 
     OBJECTS AND ADVANTAGES 
     A method for processing existing transport streams or creating transport streams for seamless concatenation will enable a smooth transition between individually encoded programs which are joined together either off-line or in real-time. If all coding layers in each transport stream start and end according to well-defined rules, two such streams may be concatenated and then decoded without exhibiting any objectionable artifacts at their junction. The viewer would see a smooth, natural transition between the two programs. 
     The present invention provides a method that can be used in either an off-line environment processing stored transport streams for seamless concatenation, or in a multiplexer in the creation of transport streams. The beginning and end of the transport stream are processed so as to smooth discontinuities at all layers. The resulting transport stream can be concatenated with other transport streams that have been similarly processed. 
     The present invention does not impose restrictions on the transport rate of the transport streams being processed. It enables two transport streams to be cleanly concatenated even when they are transmitted at different rates. In addition, no restrictions are imposed on transport stream length, I frame refresh rates, and buffer levels. Instead of constraining the encoder, the present invention adjusts the transport stream to achieve the exact duration necessary for seamless transitions. 
     Further objects and advantages will become apparent from a consideration of the ensuing drawings and detailed description. 
    
    
     DRAWING FIGURES 
     In the drawings, closely related figures have the same number but different alphabetic suffixes. 
     FIGS. 1A to  1 G are flowchart diagrams of an exemplary routine for setting the transmission duration and system clock frequency of an MPEG- 2  transport stream, and processing the beginning of the stream to indicate the presence of a transition. 
     FIG. 2 is a timing diagram illustrating a boundary case of the transition between two processed transport streams. 
     FIG. 3A is a timing diagram illustrating the determination of the length of the transport stream before the first access unit is decoded. 
     FIG. 3B is a timing diagram illustrating the determination of the length of the transport stream after the last access unit that is presented. 
    
    
     SUMMARY 
     The present invention is a method of ensuring the elimination of objectionable artifacts at the transition between similarly processed MPEG- 2  transport streams. According to the present invention, the transport stream duration and system clock frequency are set to match the presentation duration of the primary elementary stream in a transport stream. 
     DESCRIPTION 
     FIGS. 1A to  1 G are flowchart diagrams of an exemplary routine for setting the transmission duration and system clock frequency of an MPEG- 2  transport stream, and processing the beginning of the stream to indicate the presence of a transition. The transport stream contains a single program that contains video and audio elementary streams. The video and audio elementary streams consist of access units. The video elementary stream is considered to be the primary elementary stream. The audio elementary stream is considered to be the secondary elementary stream. The program has an independent time base that is conveyed as the Program Clock Reference (PCR). The frequency of the time base is the system clock frequency. Both video and audio elementary streams reference this time base. The identities of the video and audio elementary streams are defined by descriptive information contained in the transport stream. This descriptive information consists of two Program Specific Information (PSI) tables, the Program Association Table (PAT) and the Program Map Table (PMT). The transport stream is constructed according to the syntax, semantics, and requirements for an MPEG- 2  transport stream as defined in ISO/IEC 13818-1, which is hereby incorporated by reference. 
     The process begins at a block  198 . At a decision block  200 , it is determined whether there are I-Pictures in the video elementary stream. If I-Pictures are present, at a block  202  the first I-Picture found is designated as access unit VAU 1 . If I-Pictures are not present, at a block  204  the first P-picture found is designated as VAU 1 . 
     At a block  206 , video elementary stream data preceding the packet that contains the first byte of VAU 1  is removed from the transport stream. To accomplish this, all transport packets from the beginning of the transport stream to the packet that contains the first byte of VAU 1  are deleted. 
     At a decision block  208 , it is determined whether VA 1  starts with a sequence—header—code. If there is no sequence—header—code present, at a block  210  the video elementary stream is searched for a sequence header and sequence extension. At a block  212 , the sequence header and sequence extension data are inserted in the video payload preceding the first byte of VAU 1 . If insufficient payload is available in the packet before the first byte of VAU 1 , then an earlier video packet is created to contain the first bytes of added data. After the sequence header and sequence extension are inserted, the first byte of the sequence—header—code becomes the first byte of VAU 1 . 
     At a decision block  214 , it is determined whether a presentation time stamp (PTS) for VAU 1  is present in the transport stream. If there is no PTS for VAU 1 , at a block  216  a PTS is determined. The decode time stamp (DTS) for VAU 1  is also determined as defined in ISO/IEC 13818-1. A PES header containing the PTS is inserted before the first byte of VAU 1 . If the decode time stamp (DTS) for VAU 1  is not equal to the PTS, then the DTS is also inserted in the PES header. If insufficient payload is available in the packet before the first byte of VAU 1 , then a video packet is created to contain the PES header. This packet is placed before the packet containing the first byte of VAU 1 . 
     At a decision block  218 , it is determined whether the first byte of VAU 1  is the first byte of payload of a packet. If it is not the first byte of payload, at a block  220  the video data preceding the first byte of VAU 1  is removed. Adaptation field stuffing may be used to replace the eliminated video data. The first byte of VAU 1  then becomes the first byte of payload. Alternatively, the video data to be removed may be replaced with zero data bytes. Use of adaptation field stuffing is the preferred method because video data will not be introduced into the decoder buffer prior to the first byte of VAU 1 . 
     At a block  222 , a temporary variable i is set to one. At a decision block  224 , it is determined whether VAU 1+i , the access unit following VAU 1 , is a B-Picture. If VAU 1+i  is a B-Picture, at a block  226  transport packets containing only VAU 1+i  payload are removed from the transport stream. The payload of transport packets containing only VAU 1+i  payload may be replaced with adaptation field stuffing. Alternatively, transport packets containing only VAU 1+i  payload and no PCR may be substituted with null transport packets. In this case, transport packets containing only VAU 1+i payload and a PCR are retained in the transport stream, but the payload in these packets is replaced with adaptation field stuffing. At a block  228 , variable i is incremented by one. The routine returns to decision block  222  to determine whether the next access unit is a B-Picture. 
     At a decision block  230 , it is determined if one or more B-Pictures were removed. At block  230 , VAU 1+i  is not a B-Picture. If at least one B-Picture was removed, at a block  232  residual B-Picture data in the packet containing the last byte of VAU 1  is removed. At a block  234  residual B-Picture data in the packet containing the first byte of VAU 1+i  is removed. At both block  232  and block  234 , adaptation field stuffing may be used to replace the residual B-Picture data. Alternatively, the residual B-Picture data may be replaced with zero data bytes. Use of adaptation field stuffing is the preferred method because the added zero data bytes will increase the level of the decoder buffer. At a block  238 , the repeat_first_field and top_field—first fields in the picture coding extension of VAU 1  are corrected if necessary. If the top_field_first field in VAU 1  has a value of zero and the repeat_first_field field in VAU 1  has a value of zero, then the repeat_first_field field in VAU 1  is set to value of one. If the top_field_first field in VAU 1  has a value of zero and the repeat_first_field field in VAU 1  has a value of one, then the repeat_first_field field in VAU 1  is set to a value of zero. The top_field_first field in VAU 1  is set to a value of one in all cases. 
     At a block  240 , the DTS associated with VAU 1  is corrected for any eliminated B-Pictures and for an adjusted repeat_first_field field value per ISO/IEC 13818-1. 
     At a block  242 , the first audio access unit with PTS later than or equal to the DTS of VAU 1  is located in the transport stream. This access unit is designated as AAU 1 . At a block  244 , audio elementary stream data preceding the packet that contains the first byte of AAU 1  is removed from the transport stream. To accomplish this, transport packets containing audio data that precede this packet are substituted with null transport packets. 
     At a decision block  246 , it is determined whether a PTS for AAU 1  is present in the transport stream. If there is no PTS for AAU 1 , at a block  248  a PTS is determined per ISO/IEC 13818-1. A PES header containing the PTS is inserted before the first byte of AAU 1 . If insufficient payload is available in the packet before the first byte of AAU 1 , then an earlier audio packet is created to contain the PES header. This packet is substituted for a null packet that occurs in the transport stream before the packet containing the first byte of AAU 1 . 
     At a decision block  250 , it is determined whether the first byte of AAU 1  is the first byte of payload of the packet. If it is not the first byte of payload, at a block  252  the audio data preceding the first byte of AAU 1  is removed. Adaptation field stuffing is used to replace the eliminated audio data. 
     At a block  254 , the pes—length in the PES header preceding AAU 1  is corrected to compensate for the eliminated audio data. 
     At a block  255 , the packet containing the first byte of the PES header that precedes VAU 1  is designated as P v1 . 
     The routine next processes the ends of the video and audio elementary streams. At decision block  256 , it is determined whether B-Pictures are present in the video elementary stream. If B-Pictures are present, at a block  258  the B-Picture preceding the last picture that is not a B-Picture is found. This B-Picture is designated as access unit VAU n . At a block  260 , the first picture before VAU n  that is not a B-Picture is designated as VAU m . In presentation order, VAU m  will be last picture presented in the transport stream. If B-Pictures are not present, at a block  262  the last complete picture in the video elementary stream is designated as VAU n . At block  264 , VAU n  is also designated as VAU m . 
     At a block  266 , the repeat_first_field field in the picture coding extension of VAU m  is corrected if necessary. If the top_field_first and the repeat_first_field fields in VAU m  both have the value of one, then the repeat—first—field field in VAU m  is changed to a value of zero. If the top_field_first and the repeat_first_field fields in VAU m  both have the value of zero, then the repeat_first_fieId field in VAU m  is changed to a value of one. In all other cases, the repeat_first_field field in VAU m  is not modified. 
     At a block  268 , video elementary stream data following the last byte of VAU n  is removed from the transport stream. The packet containing the last byte of VAU n  is modified to eliminate any video data following VAU n . Adaptation field stuffing may be used to replace the eliminated video data. Transport packets containing video data that follow the packet containing the last byte of VAU n  are also removed. To accomplish this, all packets following the packet containing the last byte of VAU n  are deleted. 
     At a block  270 , the last audio access unit with PTS earlier than or equal to the PTS of VAU m  is located in the transport stream. This access unit is designated as AAU n . At a block  272 , audio elementary stream data following the last byte of AAU n  is removed from the transport stream. The packet containing the last byte of AAU n  is modified to eliminate any audio data following AAU n . Adaptation field stuffing is used to replace the eliminated audio data. Transport packets containing audio data that follow this packet are substituted with null transport packets. At a block  274 , the pes_length in the PES header preceding AAU n  is corrected to compensate for the eliminated audio data. 
     At a block  276 , the packet containing the last byte of elementary stream data is located in the transport stream and is designated as P Vlast . 
     The routine next adjusts the transport stream to an optimal length. This length will insure a seamless video transition when the transport stream is concatenated with another transport stream that has been processed with the same routine. All times used in the routine are relative to the system clock frequency that is carried in the transport stream by the Program Clock Reference (PCR). The input arrival time of a given byte in the transport stream is the time when the byte arrives at the decoder. The input arrival time is determined from the PCR and the transport rate as defined in ISO/IEC 13818-1. Because the transport stream is at a constant rate, the difference between the input arrival times of the first bytes of any two adjacent packets is constant. In other words, the period between adjacent packets is constant over the length of the transport stream. 
     The determination of the optimal length of the transport stream is based on the constant N AU . N AU  is an integer that defines a number of video frame periods. A single video frame period is the duration of one video frame displayed at the frame rate that is specified in the video elementary stream. The inventor has assigned the value 5 to N AU , although other values may be used. FIG. 2, shows a boundary case of the transition between two processed transport streams, TS 1  and TS 2 . In this case, there is no delay between the end of the presentation of video in TS 1  and the start of the decoding of video in TS 2 . P last  is the last packet in TS 1 . P first  is the first packet in TS 2 . T 1  is the time when the transition from TS 1  to TS 2  is received. VAU final  is the last video access unit presented in TS 1 . P Vfinal  is the packet containing the first byte of VAU final . T PTSf  is the presentation time of VAU final . T PTSf  plus one video frame period is the earliest time that an access unit immediately following VAU final  could be displayed. VAU init  is the first video access unit decoded in TS 2 . P Vinit  is the packet containing the first byte of VAU init . T DTSi  is the decode time of VAU init . In the boundary case shown in FIG. 2, T PTSf  plus one video frame period and T DTSi  represent the same time, T p . T p  is the boundary between the end of the presentation of video in the first stream and the start of the decoding of video in the second stream. The time represented by N AU  video frame periods is the difference between T 1  and T p . 
     At a block  278 , the value for T Bideal  is determined. As shown in FIG. 3A, T Bideal  is the ideal time for the beginning of the transport stream. T Bideal  must be earlier than T V1 , the input arrival time of the first byte of P v1 , the packet containing the PES header for VAU 1 . Additional time prior to T v1  must also be included to transport Program Specific Information (PSI) tables and at least one packet containing a PCR. A constant length of time that is sufficient to transport packets containing PSI and a PCR may be used. This constant is shown as L. At a minimum the start of the stream must be L earlier than T v1 . This minimum start time is T Bmin . T Bideal  must be T Bmin  or earlier and must be at least N AU  video frame periods before T DTS1 , the decode time for VAU 1 . The difference between T DTS  and T Bideal  must also be an integral number of frame periods. N AUB  is the number of frame periods between T DTS1  and T Bideal  and is determined according to equation (1) 
     N AUB =max[N NAU , ceiling(T DTS1 −T Bmin )/frame_period)]  (1) 
     The function max [x, y] returns the maximum of the numbers x and y. The function ceiling(a) returns the smallest integer that is greater than or equal to the number a. The variable frame—period is the duration of one video frame and is a function of the frame rate that is specified in the video elementary stream. 
     T Bideal  is determined according to equation (2) 
     
       
         T Bideal= T DTS1= N AUB *frame_period   (2)  
       
     
     At a block  280 , the value for T Eideal  is determined. As shown in FIG. 3B, T Eideal  is the ideal time for the end of the transport stream. T Eideal  must be later than T Vlast , the input arrival time of the last byte of P Vlast , the packet containing the last byte of elementary stream. VAU m  is the last picture displayed in the transport stream. P Vm  is the packet containing the first byte of VAU m . T Eideal  must also be a maximum of N AU  video frame periods before T PTSm+1 , the PTS for VAU m  plus one frame period. The difference between T PTSm+ and T Eideal  must also be an integral number of frame periods. N AUE  is the number of frame periods between T PTSm+1  and T Eideal  and is determined according to equation (3) 
     
       
           N   AUE =min [ N   AU , ceiling(( T   PTSm+1  − T   Vlast )/frame _period)]  (3)  
       
     
     The function min [x, y] returns the minimum of the numbers x and y. 
     T Eideal  is determined according to equation (4) 
     
       
           T   Eideal   =T   PTSm+1   −N   AUE  *frame—period   (4)  
       
     
     At a block  282 , the actual start of the transport stream, T Bactual , is determined. T Bactual  is the input arrival time of the packet that starts the transport stream. The input arrival time of a packet is the input arrival time of the first byte of the packet. The packet with input arrival time of T Bactual  is the packet whose input arrival time is closest to T Bideal . This packet is the one that gives the minimum value for D B (j), the distance from T Bideal  to the j th  packet, where j is the index of any packet in the transport stream D B (j) is determined according to equation (5) 
     
       
           D   B ( j )=| T   Bideal   =T   pkt ( j )|  (5)  
       
     
     The function |x| returns the absolute value of the number x. The function T pkt(j)  returns the input arrival time of the j th  packet. At block  282 , NP B  is also determined. NP B  is the number of leader packets that must be added before P V1  to start the stream at T Bactual . NP B  is determined according to equation (6) 
     
       
           NP   B   =(T   Bactual−T   V1 )/packet_period   (6)  
       
     
     The variable packet—period is the duration of one transport packet. 
     At a block  284 , the actual end of the transport stream, T Eactual , is determined. T Eactual  is the input arrival time of the final packet in the transport stream plus one packet period. The final packet is determined by finding the packet whose input arrival time plus one packet period is closest to T Bideal . This packet is the one that gives the minimum value for D E (k), the distance from T Eideal  to the k+1 th  packet, where k is the index of any packet in the transport stream. DE(k) is determined according to equation (5) 
     
       
           DE ( k )=| T   Eideal −   T   pkt h( k )−packet—period |  (7)  
       
     
     At block  284 , NP E  is also determined. NP E  is the number of trail packets that must be added after P Vlast  to end the stream at T Eactual . NP E  is determined according to equation (8) 
     
       
           NP   E   =(   T   Eactual   −T   Vlast − packet_period)/packet_period   (8)  
       
     
     At a block  286 , NP B  null transport packets are inserted as a leader before P V1 . At a block  288 , NP E  null transport packets are added as a trailer after P Vlast  . 
     At a block  290 , PCRs are inserted in the transport stream before P V1  at intervals less than or equal to D PCR . D PCR  is a predetermined constant that defines the minimum time interval between successive occurrences of PCRs in the transport stream. The value of  PCR  must be less than or equal to 0.1 sec, which is the minimum interval between successive occurrences of PCRs as defined in ISO/IEC 13818-1. A PCR is inserted in the transport stream by replacing a null packet with a PCR PID packet that contains adaptation field only and no payload. The adaptation field contains a PCR that is correct for the position of the packet in the transport stream. The discontinuity—indicator field is set to a value of one in the first PCR PID packet that is inserted. The discontinuity—indicator field has a value of zero in all other inserted PCR PID packets. The length of the transport stream is unchanged after the insertion of PCRs. 
     At a block  292 , PCRs are inserted in the transport stream after the last packet containing elementary stream data, P Vlast , at intervals less than or equal to D PCR . The length of the transport stream is unchanged after the insertion of PCRs. 
     At a block  294 , the payload from the second byte of payload through the byte before the first byte of the Program Association Table (PAT) is removed from the first PID O packet after P V1 . This may be accomplished by replacing the payload with adaptation field stuffing bytes. Alternatively, the PAT may be moved to the second byte of payload, and packet stuffing bytes of 0×FF used to fill the remaining payload after the end of the PAT. In either case, the pointer—field, which is the first byte of payload in the PID O packet, is set to a value of zero. 
     At a block  296 , the payload from the second byte of payload through the byte before the first byte of the Program Map Table (PMT) is removed from the first PMT PID packet after P V1 . This may be accomplished by replacing the payload with adaptation field stuffing bytes. Alternatively, the PMT may be moved to the second byte of payload, and packet stuffing bytes of 0×FF used to fill the remaining payload after the end of the PMT. In either case, the pointer—field, which is the first byte of payload in the PMT PID packet, is set to a value of zero. 
     At a block  298 , packets containing PSI tables are inserted in the transport stream before P V11 . A PID O packet containing a Program Association Table (PAT) is substituted for a null packet that occurs in the stream before P V1 . This PAT is a duplicate of the next PAT to appear in the transport stream. The inserted PID O packet contains a discontinuity—indicator field with a value of one. A PMT PID packet containing a PMT with a section—length with a value of  13  is inserted in place of a null packet after the inserted PID O packet and before P v1 . The version—number of the PMT in this packet is one less than the version—number of the next PMT to appear in the transport stream. The PMT PID packet contains a discontinuity—indicator with a value of one. A second PMT PID packet containing a PMT is inserted in place of a null packet after the inserted PMT PID packet and before P V1 . The PMT in this packet is a duplicate of the next PMT to appear in the transport stream. 
     At a block  300 , the discontinuity_indicator field is set to a value of one in the first packet in the transport stream with the video PID. If an adaptation field containing the discontinuity—indicator field cannot be contained in this first video packet, then a packet with the video PID containing adaptation field only and no payload is inserted in place of a null packet that occurs in the stream before the first video packet The discontinuity—indicator in this inserted video packet is set to a value of one. At block  300 , the discontinuity—indicator field is set to a value of one in the first packet with the audio PID in the transport stream. If an adaptation field containing the discontinuity—indicator field cannot be contained in this first audio packet, then an audio packet containing adaptation field only and no payload is inserted in place of a null packet that occurs in the stream before the first audio packet. The discontinuity_indicator in this inserted audio packet is set to a value of one. 
     At a block  302 , PCR Bbias  and PCR Ebias  are determined. PCR Bbias  is the difference between T Bideal  and T Bactual  as given in equation (9) 
     
       
           PCR   Bbias   =T   Bideal   −T   Bactual    (9)  
       
     
     PCR Ebias  is the difference between T Eideal  and T Eactual  as given in equation (10) 
     
       
           PCR   Bbias   =T   Eideal   −T   Eactual    (10)  
       
     
     At a block  304 , each PCR in the transport stream is adjusted according to equation (11) 
     
       
           PCR   new   =PCR   org   + PCR Bbias   +i *( PCR   Ebias−PCR   Bbias )/(N− 1 )   (11)  
       
     
     PCR new  is the adjusted value of the PCR that is used to replace the original value. PCR org  is the original value of the PCR. The variable i is the index of the packet containing the PCR with value PCR org . The first packet in the transport stream has an index of 0, and the last packet has an index of N minus one. The constant N is the number of packets in the transport stream. 
     At a block  306 , the continuity—counter field in each of the packets for each PID is corrected if necessary according to the definition specified in ISO/EEC 13818-1. 
     The routine ends at a block  308 . 
     While a preferred embodiment of my method has been illustrated and described, it will be appreciated that various modifications are possible without departing from the spirit and scope of the method. For example, there may not be a secondary elementary stream in which case the method applies only to the primary elementary stream, or the primary elementary stream may be audio instead of video. In another embodiment of the method, there may be more than one secondary elementary stream. In this case, the primary elementary stream and all secondary elementary streams must reference the same time base, but are not required to be in the same program. Furthermore, all processing and insertion of packets containing PSI may be omitted. 
     The preferred embodiment describes a routine that is performed on an existing transport stream. However, the method may be applied to a transport stream as it is being created by a multiplexer. 
     In the embodiment described above, the access unit that is selected as the beginning access unit for the processed stream is the first access unit found in the transport stream that meets the stated criteria. Alternatively, any access unit that is found in the transport stream that meets the criteria may be used as the beginning access unit. Likewise in the preferred embodiment, the last access unit in the transport stream to satisfy the criteria described in the embodiment is selected as the ending access unit. In another embodiment, any access unit that meets the criteria for an ending access unit and that is later than the selected beginning access unit may be designated as the ending access unit. 
     It will also be appreciated that the routine that is illustrated and described is exemplary in nature and various changes can be made to the routine. The order that some of the steps in the routine are performed may be modified, and some steps may be omitted if they are not a requirement for the application. For example, the discontinuity—indicator field may not be set to one in the initial video, audio, PSI, or PCR PID packet. 
     Within the scope of the appended claims it will be appreciated that the invention can be practiced other than as specified herein.