Code Monkey home page Code Monkey logo

scte35-threefive's Introduction

๐Ÿš€ threefive

threefive is a SCTE35 Parser library in Python3.

  • All 2019 SCTE-35 Splice Commands and Splice Descriptors are fully Supported.

  • threefive is simple and easy to use.

    • Up and Running in Less Than Seven Seconds

    • SCTE-35 can be parsed from strings or video with one function threefive.decode().

    • threefive automatically identifies and parses Base64, Hexidecimal, or Binary .

    • Multiple programs and multiple SCTE-35 streams are well supported.

    • SCTE35 cues up to 4096 bytes long can be parsed from video streams or encoded strings.


Why so many releases?

  • I generate a lot releases, however the interface to classes and functions rarely changes
  • Releases are made for incremental improvements. This keeps pip and the git repo in sync.
  • Having several relases makes it much easier to resolve issues


Changes

  • As of threefive v.2.2.39 threefive.Cue will require Cue.decode() to be called to parse data.
 from threefive import Cue
 Base64 = "/DAvAAAAAAAA///wBQb+dGKQoAAZAhdDVUVJSAAAjn+fCAgAAAAALKChijUCAKnMZ1g="
 cue = Cue(Base64)
 cue.decode()   # Now required
 cue.show()
  • Stream.decode_next() will be removed in 2.2.37.

    • The decode_next() method has proven to be problematic since the switch to parsing MPEG-TS tables directly.
    • Use Stream.decode(func=myfunc) instead. It works just like a callback function.
  • As of version 2.1.95, threefive.version returns a string for the current version.

  >>> import threefive
  >>> threefive.version()
 '2.2.35'

Fast _Start

Dependencies

  • Python 3.6+ or pypy3
  • bitn

Install

  • git
git clone https://github.com/futzu/SCTE35-threefive.git

cd SCTE-threefive

# you need root to install for the system

make install

# for pypy3 

make pypy3
  • pip
pip3 install threefive

# for pypy3

pypy3 -mpip install threefive

#If you don't have pip installed, try this.

pypy3 -mensurepip install pip 

๐Ÿกก top

Easy threefive

The decode Function

  • source decode.py
  • threefive.decode is an all purpose function to decode SCTE 35 messages from a file or string.
import threefive
  • MpegTS
threefive.decode('/path/to/mpegwithscte35.ts') 
  • Base64
mesg='/DBUAAAAAAAA///wBQb+AAAAAAA+AjxDVUVJAAAACn+/Dy11cm46dXVpZDphYTg1YmJiNi01YzQzLTRiNmEtYmViYi1lZTNiMTNlYjc5OTkRAAB2c6LA'
threefive.decode(mesg)
  • Hex
hexed='0xFC302F000000000000FFFFF014054800008F7FEFFE7369C02EFE0052CCF500000000000A0008435545490000013562DBA30A'
threefive.decode(hexed)

๐Ÿกก top

Advanced threefive

Cue Class

  • source cue.py
  • The threefive.Cue class decodes a SCTE35 binary, base64, or hex encoded string.
  • threefive.Cue provides several methods to access the parsed data.
from threefive import Cue

b64 = "/DBIAAAAAAAA///wBQb+ek2ItgAyAhdDVUVJSAAAGH+fCAgAAAAALMvDRBEAAAIXQ1VFSUgAABl/nwgIAAAAACyk26AQAACZcuND"

cue = Cue(B64)
cue.decode()
Return cue as dict
cue.get()

# Splice Info Section
cue.get_info_section()

# Splice Command
cue.get_command()

# Splice Descriptors
cue.get_descriptors()
Return cue as JSON
jason = cue.get_json()
Print cue as JSON
cue.show()

๐Ÿกก top

Stream Class

 threefive.Stream(tsdata, show_null = False)
  • source stream.py

  • The threefive.Stream class parses SCTE35 messages from a file or stream.

    • tsdata is an open file handle.

    • show_null if set to True, enables showing SCTE 35 null commands.

Method Description
Stream.show() Prints all recognized Programs and streams by pid and type.
Stream.decode(func = show_cue) Prints SCTE-35 cues for SCTE-35 packets. Accepts an optional function, func, as arg.
Stream.decode_program(the_program,func = show_cue) Same as Stream.decode except only packets where program == the_program
Stream.decode_proxy(func = show_cue) Same as Stream.decode except raw packets are written to stdout for piping to another program.

Stream.show()

List programs and streams for a video.

# pypy3
>>>> from threefive import Stream, version
>>>> version
'2.2.09'
>>>> with open('video.ts','rb') as tsdata:
....     st = Stream(tsdata)
....     st.show()
....     

Program: 1030 (pcr pid: 1031)
	   1031: [0x1b] Video
	   1032: [0x3] ISO/IEC 11172 Audio
	   1034: [0x6] ITU-T Rec. H.222.0 | ISO/IEC 13818-1 PES packets with private data
	   1035: [0x86] SCTE 35

Program: 1100 (pcr pid: 1101)
	   1101: [0x1b] Video
	   1102: [0x3] ISO/IEC 11172 Audio
	   1104: [0x6] ITU-T Rec. H.222.0 | ISO/IEC 13818-1 PES packets with private data
	   1105: [0x86] SCTE 35

Program: 1080 (pcr pid: 1081)
	   1081: [0x1b] Video
	   1082: [0x3] ISO/IEC 11172 Audio
	   1084: [0x6] ITU-T Rec. H.222.0 | ISO/IEC 13818-1 PES packets with private data

Stream.decode(func=show_cue)

import sys
from threefive import Stream
'''

if __name__ =='__main__':
   with open(sys.argv[1],'rb') as tsdata:
       sp = Stream(tsdata)
       sp.decode()
  • Pass in custom function

  • func should match the interface func(cue)

  • example

import sys
import threefive

def display(cue):
   print(f'\033[92m{cue.packet_data}\033[00m')
   print(f'{cue.command.name}')

def do():
   with open(sys.argv[1],'rb') as tsdata:
    sp = threefive.Stream(tsdata)
    sp.decode(func = display)       

if __name__ == '__main__':
    do()

Stream.decode_program(the_program, func = show_cue)

  • Use Stream.decode_program() instead of Stream.decode() to decode SCTE-35 from packets where program == the_program
import threefive

with open('../35.ts','rb') as tsdata:
    threefive.Stream(tsdata).decode_program(1)

Stream.decode_proxy(func = show_cue)

  • Writes all packets to sys.stdout.

  • Writes scte35 data to sys.stderr.

   import threefive
      
   with open('vid.ts','rb') as tsdata:
      sp = threefive.Stream(tsdata)
      sp.proxy_decode()
  • Pipe to mplayer
python3 proxy.py | mplayer -

๐Ÿกก top

scte35-threefive's People

Contributors

futzu avatar vladdoster avatar gitfu avatar jamesfining avatar richard-vd avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.