Metadata-Version: 2.1
Name: threefive
Version: 2.0.13
Summary: SCTE 35 Parser/Decoder
Home-page: https://github.com/futzu/threefive
Author: fu-corp
Author-email: spam@futzu.com
License: UNKNOWN
Description: # threefive
        
        ## SCTE35 Decoder
        *  Parse SCTE 35 messages from Mpeg Transport Streams and Binary files. 
        *  Parse SCTE 35 messages encoded in Base64, Binary, or Hex. 
        
        ### 2019 Specification 
        * https://www.scte.org/SCTEDocs/Standards/ANSI_SCTE%2035%202019r1.pdf
        
        ###  Splice Commands 
        *  Splice Null  
        *  Splice Schedule  (lightly tested)
        *  Splice Insert 
        *  Time Signal 
        *  Bandwidth Reservation  (lightly tested)
        
        ###  Splice Descriptors 
        *  DTMF Descriptor 
        *  Segmentation Descriptor
          *  Segmentation UPID  (partially implemented)
          *  Segmentation Types and Messages 
        *  Time Descriptor 
        *  Audio Descriptor (lightly tested)
        
        ###  Dependencies 
        * Python 3
        * bitslicer9k
        
        
        ##  Install 
        ```go
         pip install threefive
         
        Collecting threefive
          Downloading https://files.pythonhosted.org/packages/a0/2b/6027c2f38d0f76f70a61e8d9ac9b9a8d781c845a1bcc0e3a6d0395538dfb/threefive-2.0.5-py3-none-any.whl
        Collecting bitslicer9k
          Downloading https://files.pythonhosted.org/packages/e1/57/aaf58b282a6bb824327a8ce266db55943881a1ebd14e6d40a952b90a28af/bitslicer9k-1.0.11-py3-none-any.whl
        Installing collected packages: bitslicer9k, threefive
        
        ```
        
        
        ##  Run 
        #### The Easy Way. 
        ### Call threefive.decode.
        
         *  mpegts files
         *  binary files
         *  base64 encoded strings
         *  hex encoded strings
         *  binary byte strings
         
         
         ####  Parse mpegts files 
        
          
        ``` python3
        
        >>> import threefive
        >>> threefive.decode('/path/to/mpegwithscte35.ts') 
        
        
        ```
        
        
        ####  Parse binary encoded messages from a file 
        
        ```python3
        >>> import threefive
        >>> stuff=threefive.decode('/mnt/build/file.bin')
        
        
        ```
        
        ####  Parse base64 encoded messages 
        
        ```python3
        
        >>> import threefive
        >>> mesg='/DBhAAAAAAAA///wBQb+qM1E7QBLAhdDVUVJSAAArX+fCAgAAAAALLLXnTUCAAIXQ1VFSUg/nwgIAAAAACyy150RAAACF0NVRUlIAAAnf58ICAAAAAAsstezEAAAihiGnw=='
        >>> t=threefive.decode(mesg)
        
        
        ```
        ####  Parse hex encoded messages 
        ```python
        
        >>> import threefive
        >>>u=threefive.decode('0xFC302F000000000000FFFFF014054800008F7FEFFE7369C02EFE0052CCF500000000000A0008435545490000013562DBA30A')
        
        
        ```
        
        #### Parse binary byte string messages
        
        
        ```python3
        >>> import threefive
        >>> f=open('/mnt/build/file.bin','rb').read()
        >>> scte35=threefive.decode(f)
        
        ```
        
        
        
        ### Ouput looks like this
        
        ```python3
        
        
        
        [  SCTE 35 Stream found with Pid 0x135  ]
        
        [SCTE 35 Message]
        
         Splice Info Section:
        	{'table_id': '0xfc', 'section_syntax_indicator': False, 'private': False, 'section_length': 47, 'protocol_version': 0, 'encrypted_packet': False, 'encryption_algorithm': 0, 'pts_adjustment': '0.000000', 'cw_index': '0x0', 'tier': '0xfff', 'splice_command_length': 4095, 'splice_command_type': 5, 'descriptor_loop_length': 10, 'crc': '0x10fa4d9e'}
        
         Splice Command:
        	{'splice_type': 5, 'name': 'Splice Insert', 'splice_event_id': 662, 'splice_event_cancel_indicator': False, 'out_of_network_indicator': True, 'program_splice_flag': True, 'duration_flag': True, 'splice_immediate_flag': False, 'time_specified_flag': True, 'pts_time': '89742.161689', 'break_auto_return': False, 'break_duration': '242.000000', 'unique_program_id': 1, 'avail_num': 0, 'avail_expected': 0}
        
         Splice Descriptor 0:
        	{'name': 'Avail Descriptor', 'splice_descriptor_tag': 0, 'descriptor_length': 8, 'identifier': 'CUEI', 'provider_avail_id': 0}
        ```
        
        
        
        
        ##  Splice Methods 
        
        ####  threefive.Splice.show_info_section() 
        ```python3
        
        >>> import threefive
        >>> mesg='/DBhAAAAAAAA///wBQb+qM1E7QBLAhdDVUVJSAAArX+fCAgAAAAALLLXnTUCAAIXQ1VFSUgAACZ/nwgIAAAAACyy150RAAACF0NVRUlIAAAnf58ICAAAAAAsstezEAAAihiGnw=='
        >>> splice=threefive.Splice(mesg)
        >>> splice.show_info_section()
        
        [ Splice Info Section ]
        table_id : 0xfc
        section_syntax_indicator : False
        private : False
        reserved : 3
        section_length : 97
        protocol_version : 0
        encrypted_packet : False
        encryption_algorithm : 0
        pts_adjustment : 0
        cw_index : 0xff
        tier : 0xfff
        splice_command_length : 5
        splice_command_type : 6
        descriptor_loop_length : 75
        
        ```
        ####  threefive.Splice.show_command() 
        ```python3
        >>> import threefive
        >>> mesg='/DBhAAAAAAAA///wBQb+qM1E7QBLAhdDVUVJSAAArX+fCAgAAAAALLLXnTUCAAIXQ1VFSUgAACZ/nwgIAAAAACyy150RAAACF0NVRUlIAAAnf58ICAAAAAAsstezEAAAihiGnw=='
        >>> splice=threefive.Splice(mesg)
        >>> splice.show_command()
        
        [ Splice Command ]
        splice_type : 6
        name : Time Signal
        time_specified_flag : True
        pts_time : 31466.942367
        
        ```
        ####  threefive.Splice.show_descriptors()
         ##### Multiple splice descriptors per splice command are supported. 
         
        ```python3
        
        >> import threefive
        >>> mesg='/DBhAAAAAAAA///wBQb+qM1E7QBLAhdDVUVJSAAArX+fCAgAAAAALLLXnTUCAAIXQ1VFSUgAACZ/nwgIAAAAACyy150RAAACF0NVRUlIAAAnf58ICAAAAAAsstezEAAAihiGnw=='
        >>> stuff=threefive.Splice(mesg)
        >>> stuff.show_descriptors()
        
        [ Splice Descriptor  0  ]
        name : Segmentation Descriptor
        splice_descriptor_tag : 2
        descriptor_length : 23
        identifier : CUEI
        segmentation_event_id : 0x480000ad
        segmentation_event_cancel_indicator : False
        program_segmentation_flag : True
        segmentation_duration_flag : False
        delivery_not_restricted_flag : False
        web_delivery_allowed_flag : True
        no_regional_blackout_flag : True
        archive_allowed_flag : True
        device_restrictions : 0x3
        segmentation_upid_type : 8
        segmentation_upid_length : 8
        turner_identifier : 0x000000002cb2d79d
        segmentation_type_id : 53
        segmentation_type : Provider Placement Opportunity End
        segment_num : 2
        segments_expected : 0
        
        [ Splice Descriptor  1  ]
        name : Segmentation Descriptor
        splice_descriptor_tag : 2
        descriptor_length : 23
        identifier : CUEI
        segmentation_event_id : 0x48000026
        segmentation_event_cancel_indicator : False
        program_segmentation_flag : True
        segmentation_duration_flag : False
        delivery_not_restricted_flag : False
        web_delivery_allowed_flag : True
        no_regional_blackout_flag : True
        archive_allowed_flag : True
        device_restrictions : 0x3
        segmentation_upid_type : 8
        segmentation_upid_length : 8
        turner_identifier : 0x000000002cb2d79d
        segmentation_type_id : 17
        segmentation_type : Program End
        segment_num : 0
        segments_expected : 0
        
        [ Splice Descriptor  2  ]
        name : Segmentation Descriptor
        splice_descriptor_tag : 2
        descriptor_length : 23
        identifier : CUEI
        segmentation_event_id : 0x48000027
        segmentation_event_cancel_indicator : False
        program_segmentation_flag : True
        segmentation_duration_flag : False
        delivery_not_restricted_flag : False
        web_delivery_allowed_flag : True
        no_regional_blackout_flag : True
        archive_allowed_flag : True
        device_restrictions : 0x3
        segmentation_upid_type : 8
        segmentation_upid_length : 8
        turner_identifier : 0x000000002cb2d7b3
        segmentation_type_id : 16
        segmentation_type : Program Start
        segment_num : 0
        segments_expected : 0
        
        ```
        
        ###  threefive.Splice.show() 
        #### Shows all data
        ```python3
        
        >>> import threefive                
        >>> mesg='/DBIAAAAAAAA///wBQb+ky44CwAyAhdDVUVJSAAACn+fCAgAAAAALKCh4xgAAAIX
        Q1VFSUgAAAl/nwgIAAAAACygoYoRAAC0IX6w')
        >>> fu=threefive.Splice(mesg)
        >>> fu.show()
        ```
        ###  Read individual values 
        
        ```python3
        import threefive
        mesg='/DAvAAAAAAAA///wFAVIAACPf+/+c2nALv4AUsz1AAAAAAAKAAhDVUVJAAABNWLbowo='
        scte_data=threefive.Splice(mesg)
        
        >>> scte_data.command.name    
        'Splice Insert'
        >>> scte_data.command.splice_immediate_flag
        False
        >>> scte_data.command.pts_time
        '21514.559089'
        >>> scte_data.command.break_duration
        '60.293567'
        
        
        ```
        
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.6
Description-Content-Type: text/markdown
