Giter Site home page Giter Site logo

ericberendsen / dvbinspector Goto Github PK

View Code? Open in Web Editor NEW
169.0 11.0 29.0 88.57 MB

DVB Inspector is an open-source DVB analyzer, written in java

Home Page: http://www.digitalekabeltelevisie.nl/dvb_inspector/

License: GNU General Public License v3.0

Batchfile 0.03% Shell 0.01% Java 99.96%
dvb-protocols dvb-psi dvb-t dvb mpeg-ts bitrate

dvbinspector's Introduction

DVB Inspector

DVB Inspector is an open-source DVB analyzer, written in java. It can show the logical structure of the DVB SI and PSI data. It also shows bit rate usage data. DVB Inspector can be used to analyse contents; MPEG Video structure, teletext, DVB subtitles, DSM-CC Object carousels, SCTE-35 signaling, etc.

DVB Inspector example screen

Prerequisites

DVB inspector requires java 17 or higher.

Installation

DVB inspector comes in a single .zip file. It contains all necessary files for running DVB inspector.

Unzip DVBinspector-1.18.0-dist.zip to a directory of your choice. It will create the following directory structure;

Directory structure

  • lib directory, contains external libraries that are required.
  • src/main/java, this directory contains sources for the java program.
  • src/main/resources, contains images needed by DVB Inspector
  • src/main/resources/res, contains comma separated resource files for bouquet_id, ca_system_id, data_broadcast_id, original_network, platform_id, oui_registration. The files can be updated if needed, see site.
  • COPYING, contains the GPL license
  • dvb.bat Dos command script that starts the program. Can be modified if libraries are placed in a different location than default.
  • dvb.sh Bash script to start the program using Linux.
  • DVBInspector.jar contains the classes for the main program. Can be executed using the dvb.bat or dvb.sh script.
  • DVBinspector-1.18.0.jar. Self contained jar that contains all resources and libs. To execute just double click.

Usage

DVBinspector-1.18.0.jar

There are two ways to start DVBInspector. The easiest is to use DVBinspector-1.18.0.jar. This jar contains everything DVBInspector needs (apart from java), so there is no need to set class-paths, etc. On windows just double-click. Or from command line type "DVBinspector-1.18.0.jar" (without the quotes). If you want more control (to set heap size), and see some debug information you can use "java -jar DVBinspector-1.18.0.jar".

dvb.bat

This small windows batch file sets up the environment to start DVB Inspector. It includes the needed libraries in the class path.

dvb.sh

The linux/unix/mac version of dvb.bat. This small batch file sets up the environment to start DVB Inspector. It includes the needed libraries in the class path.

Manual

See the manual for more information on available views and options of the program.

Changelog

List of the most important changes between releases.

Release 1.18.0

Release date: 3/07/2023

  • added: support for h.266 (VVC) parsing
  • added: labels for Satellite Access Tables PID and table_id
  • added: VVCVideoDescriptor
  • added: table view for NIT with services per network
  • added: multiple detail views per node
  • updated: versions of DVB identifiers and OUI list (thanks to lebernie)

Release 1.17.0

Release date: 11/11/2022

This release requires Java 17 or newer!

  • improved: faster loading of simple private sections. Thanks to Alen Vrečko
  • added: AVS3VideoDescriptor and AVS3 components and stream type. Thanks to Paul Higgs
  • added: option to save teletext pages and services as .t42 file
  • added: parsing of SMPTE2038. Thanks to Loïc Bienvenu
  • added: documentation on how to add a parser. Thanks to Loïc Bienvenu
  • added: AlternativeTransferCharacteristicsSei_message. Thanks to Loïc Bienvenu
  • added: some Canal+ International private descriptors
  • added: jump to tree location from htmlView for EIT, cc_errors
  • added: list of packetNo's of continuity errors
  • improved: list of packets for PID now shows actual packetNo in range [..]
  • added: accelerator keys for tabbed panes (Alt-1 .. Alt-5)
  • fixed: Wrong TSID in BAT
  • added: Recent Files Menu
  • added: JPEG-XS descriptor, decoding of JPEG-XS elementary stream header. Thanks to Simon Provost

Release 1.16.1 (bug fix release)

Release date: 28/01/2022

  • fixed: dvb.sh and dvb.bat to use correct dependencies

Release 1.16.0

Release date: 23/01/2022

  • added: interpreting PSI tables based on tableID
  • added: support for stuffing sections
  • added: support for TSDT (Transport stream description table)
  • added: DTG ServiceAttributeDescriptor
  • added: ServiceAvailabilityDescriptor
  • added: Option to show timestamps as seconds.uuu instead of hh:mm:ss.uuu
  • updated: dependencies like opencsv, jfreechart, etc.
  • fixed: bug in original network id of the TransportProtocolDescriptor
  • fixed: bug when getting the objectInfo data in BIOPFileMessage
  • fixed: missing fields in TerrestrialDeliverySystemDescriptor

Release 1.15.0 (10th anniversary release)

Release date: 31/01/2021

This release requires Java 11 or newer!

  • added: support for AC-4
  • added: display preroll time on splice_time for SCTE-35
  • added: copy/save buttons to TableView
  • fixed: fastscan ONT detection checks for originalNetworkId not actual
  • added: fastscan M7 Nagra_brandID_descriptor
  • added: support for SlHdrInfo in UserDataRegisteredItuT35Sei_message
  • added: support for ST2094-10_data in AuxData
  • changed: java version to 11
  • fixed: VPS day/country decoding (Thanks to Stefan Pöschel)
  • fixed: support for UTF-8 ISO/IEC10646-1
  • extended: implementation of PES Header, including support for AD_descriptor in PES_private_data

Release 1.14.0

Release date: 17/10/2020

  • fixed: scaling for HiDPI displays
  • improved: labeling PIDs shared between services
  • fixed: (null) in SDT when service has no service_descriptor
  • added: NVOD_reference_descriptor
  • added: time_shifted_event_descriptor
  • added: more detail for EIT Events
  • added: TableView for TOT(sections)
  • improved: EIT event HTMLView to group by language
  • fixed: labeling PIDs whem multiple versions PMTSection present
  • added: some UserDataTypes from ATSC
  • added: several (private) stream_type and table_type descriptions
  • fixed: reload stream shows progress indicator and can be interrupted
  • added: support for TTML, including TtmlSubtitlingDescriptor, Downloadable Font Information Table and XMLView
  • fixed: url_extension_byte off by one in TransportProtocolDescriptor (Thanks to Tomi Sarparanta)
  • added: .trp to supported file extensions

Release 1.13.0

Release date: 31/05/2020

  • added: Tableview for several PSI tables
  • updated: lookup files for DVB identifiers, like original_network_id, ca_system_id, etc.
  • updated: oui list
  • updated: dependencies like opencsv, jfreechart, etc.
  • fixed: handling of CA_Descriptor in component descriptors
  • fixed: EIT View not complete when spanning multiple tableIds
  • improved: show table specific labels in treeview instead of table_id_extension

Release 1.12.0

Release date: 13/04/2020

  • updated: stream_type descriptions and MPEG Extension descriptor names based on H.222.0 (2018) Amendment 1
  • fixed: a service is not uniquely identified by service_id only, but by original_network_id, transport_stream_id and service_id, chn.
  • changed: SDT and EIT tree representation to match the fix for service_id
  • updated: M7 Fastscan to v.8.2.0
  • added: AC4Descriptor and AudioPreselectionDescriptor (DVBExtensionDescriptors)
  • improved: MegaFrameInitializationPacket to support Optional MIP section parameters
  • added: Name descriptor and Module link descriptor support for DSM-CC UN-Message
  • improved: performance on DSMCCs getTreeNode by using parallel streams
  • added: ScramblingDescriptor
  • fixed: handle PesPackets without data for subtitling
  • added: detect SL-HDR data (Annex A of TS 103 433-1)
  • added: label for ST2094-10_data (HDR Signalling)
  • updated: several descriptions to match DVB BlueBook A038 June 2019

Release 1.11.0

Release date: 13/04/2019

  • improved: make generic PSI tables, DSM-CC parsing and PCR/PTS view switchable, this will reduce memory usage and processing time.
  • added: support for t2mi, including exporting plp as new .TS file
  • improved: T2DeliverySystemDescriptor now full specification implemented
  • added: TargetSmartcardDescriptor
  • updated: use new values from ISO/IEC 13818-1:2018
  • added: option to fully expand tree node using keyboard and/or context menu
  • improved: do post processing after user interrupts file loading, so labels will be set and packets will display
  • added: HDR_WCG_idc field to HEVCVideoDescriptor
  • added: option to save byte[] from Tree
  • added: filter to show only mpeg-ts files in File Open Dialog
  • added: support for 14496-3 Audio (AAC) parsing
  • added: display SCTE-35 time_signal in PCR/PTS Graph
  • improved: support for h.265 video (HEVC), added graph with frame sizes, added Slice_segment_header, Slice_segment_layer_rbsp, st_ref_pic_set
  • added: option to filter series in PCR/PTS/DTS Graph
  • fixed: when multiple PrivateDataFields were present in AdaptationField the list was not constructed correctly
  • added: SCTE adaptation field data descriptor and EBP_descriptor
  • added: support for M7 Fastscan Tables

Release 1.10.1 (bug fix release)

Release date: 09/09/2018

  • fixed: parsing of 138181 Audio. This bug resulted in looping (when playing and in the graph) of the audio in a single PES Packet.

Release 1.10.0

Release date: 12/08/2018

  • fixed: IPMACStreamLocationDescriptor componentTag was read wrong
  • fixed: Parsing of Audio Access Units in Pes Packet, last unit of Pes packet was incorrectly shown at next Pes packet
  • added: option to CTRL-C packet content from Grid view (after click to set focus)
  • added: remember directory of dropped file, next "File Open" will open in that directory
  • fixed: handling of TSPackets with transportErrorIndicator set, this caused Pid packetview to crash
  • added: splice_command_type TimeSignal and SegmentationDescriptor support for SCTE-35
  • added: added new streamType strings
  • added: values from bluebook a038 dec 2017 for a.o. ContentDescriptor, LinkageDescriptor, DVBExtensionDescriptor
  • improved: error handling for errors in adaptationField
  • changed: upgraded to java 1.8
  • added: display SCTE35 Program Splice Points (with spliceTime) in PCR/PTS Graph
  • added: error handling when PESHeader not complete in TSPacket

Thanks to every one that has reported bugs in DVB Inspector! This helps to make the program better and more robust. Please contact me if you think there is an error or option for improvement in the program. I really do appreciate it!

Release 1.9.0

Release date: 27/10/2017

  • added: NetworkChangeNotifyDescriptor
  • added: drag-and-drop support
  • fixed: PSI table handling of new versions with more subtables than initial table
  • added: SHDeliverySystemDescriptor
  • fixed: value of streamContextEExt was reported wrong in ComponentDescriptor
  • fixed: last PESPacket was not handled when not followed by payload_start_indicator. Now it is handled when all bytes are read (does not work for video, because there PES_packet_length is not set)
  • added: S2XSatelliteDeliverySystemDescriptor based on DVB BlueBook A038 jan 2017
  • added: URILinkageDescriptor
  • added: ServiceRelocatedDescriptor and CIAncillaryDataDescriptor
  • fixed: handle start_time = 0xFFFFFFFF (undefined) for EITsection Event (like VOD)
  • added: support for TEMI information in Adaptation Field, added Timeline descriptor
  • added: show TEMI data in TimeStampChart (second y-axis)
  • added: panning in BitRateChart and TimeStampChart (use CTRL+mouse for panning/drag)
  • fixed: detection of SCTE35 pid in PMT
  • added: Teletext support for G0 character sets, switching between normal and alternate G0 set
  • fixed: wrong line endings in dvb.sh
  • upgraded: versions of jfreechart and jcommon
  • fixed: some smaller bugs

Thanks to Michael Cullen for contributing the NetworkChangeNotifyDescriptor.

Release 1.8.0

Release date: 07/01/2017

  • removed: option to enable/disable TS packets (now it is always enabled)
  • added: some values from DVB BlueBook a038 Oct 2016
  • fixed: handle missing PCRPid
  • added: copy and save action to EITView
  • fixed: in H264 frame graph last access unit was not drawn when not followed by delimiter
  • improved: performance when parsing PES packets
  • improved: less memory usage for loading TS packets
  • added: display message when stream can not be displayed (most likely heap error)
  • added: display minimum and maximum distance between repeating table sections

Release 1.7.0

Release date: 23/09/2016

  • added: option to select default Teletext G0 and G2 Character Set Designation
  • updated: several lookup tables from http://www.dvbservices.com/identifiers/
  • fixed: tertiary_region_code is 16 bits in TargetRegionDescriptor and TargetRegionNameDescriptor
  • fixed: don't treat char > 0x7f as mosaic graphics in teletext pages
  • fixed: bug regarding the National Option Subset which leads to wrong display of e.g. the page 109 of the ZDF Teletext
  • fixed: some bugs

Release 1.6.0

Release date: 17/01/2016

  • added: support for SCTE-35 (Digital Program Insertion Cueing Message for Cable)
  • fixed: support for ISO/IEC 10646 encoding
  • added: MultilingualBouquetNameDescriptor
  • added: MVC video sub-bitstream support (H264)
  • added: text search in Tree View
  • added: mnemonics and accelerators to menu
  • fixed: last data byte of teletext data was not shown
  • fixed: last field of EBU data PES field was not shown
  • fixed: handle adaptation_field_length ==0 correctly (do not show flags that are not there)
  • fixed: some bugs

Thanks to Richard Mars for fixing the TxtDataField and EBUPESDataField

Release 1.5.0

Release date: 07/08/2015

  • added: Support for h.265 (HEVC) parsing
  • added: MPEG Extension descriptor
  • added: HEVC video descriptor
  • added: HEVC_timing_and_HRD_descriptor
  • added: support for new stream types in PMT as defined in ITU-T H.222.0 (10/2014)
  • added: SIT (Selection Information Table) and PartialTransportStreamDescriptor
  • updated: component descriptor to use Final draft ETSI EN 300 468 V1.15.1
  • fixed: rendering of DVB titles when display_window_flag is used
  • fixed: some bugs

Thanks to Daniel Kamil Kozar for adding MPEG Extension descriptor, HEVC video descriptor and HEVC_timing_and_HRD_descriptor

Release 1.4.0

Release date: 18/01/2015

  • added: PCR/PTS/DTS Chart
  • added: show PesHeader in TSPacket
  • fixed: improved support for national characters in teletext
  • fixed: fixed bitrate calculation, now handles (ignores) PCRs that have smaller value than previous
  • fixed: some bugs

Thanks to Daniel Kamil Kozar for the fix for improved support for national characters in teletext!

Release 1.3.0

Release date: 25/08/2014

  • added: support for Related Content Tables (RCT)
  • added: support for Coding of Data Fields in the Private Data Bytes of the Adaptation Field
  • added: AdaptationFieldDataDescriptor, FTAConentManagmentDescriptor, MetaDataDescriptor, MetaDataPointerDescriptor, RelatedContentDescriptor, DTG-GuidanceDescriptor, DTG-LogicalChannelDescriptor, Mpeg4AudioDescriptor
  • added: message, t2delivery, targetregion, targetregionname extension descriptors
  • added: support for 188,192,204 and 208 bytes size TSPackets
  • added: add gridlines to gridview, make gridview zoomable
  • fixed: added encoding string for type 0x1f
  • added: linkageType==0x0D (event linkage) to LinkageDescriptor
  • fixed: some bugs

Release 1.2.0

Release date: 14/01/2014

  • fixed: Audio access units were not handled right when not aligned with PESPackets
  • added: Graph of MPEG 1/2 audio
  • added: option to play MPEG 1/2 audio
  • fixed: show multiple versions of CATSections/SDTSections in DVBTree
  • fixed: Mouse over in EITView now has correct behavior for emphasis and lf/cr DBVStrings
  • improved: Changed BitRateChart for better labels on time-axis, and improved mouse support
  • changed: upgraded to java 1.7
  • fixed: some bugs

Release 1.1.0

Release date: 11/10/2013

  • added: Show contents of TS packets per PID
  • added: Progress indicator when loading file
  • added: graph to show frame type/order and size in H.264 Video
  • added: SequenceDisplayExtension (MPEG2 Video)
  • fixed: eventIds in BIOPStreamEventMessage
  • improved: scrolling in EIT and Grid View
  • added: option to show version number on Table Sections
  • fixed: some bugs

Release 1.0.0

Release date: 21/06/2013

  • added: Show contents of TS packets, both in Tree and Grid View
  • improved: performance of Grid View
  • fixed: version number in PSI tables is 5 bits, not 4
  • Added: support for DSM-CC stream descriptor list
  • fixed: usage of version info in DSM-CC Object carousel
  • fixed: usage of transaction_id in DSM-CC Object carousel
  • changed: method of checking CRC on PSI tables, should be more robust now
  • changed: method how different versions of tables are stored, now all version are stored, even if version number wraps around
  • added: MHP Label descriptor
  • added: Multilingual Network Name descriptor
  • added: Multilingual Service Name descriptor
  • added: DSM-CC Stream descriptor

Release 0.0.10

Release date: 28/04/2013

  • added: graph to show frame order (IBP) and size in MPEG2 Video
  • added: toggle legend on Bitrate chart
  • added: copy to clip board functionality on detail panel
  • added: save as... for images in detail panel
  • added: resize images in detail panel
  • added: remember window size/position
  • changed: order of tabs (EPG grid now second, so all 'filtered' views are at the end)
  • fixed: getDisplayWindowFlag in DisplayDefinitionSegment.java
  • added: frame_packing_SEI_not_present_flag to AVCVideoDescriptor.java
  • fixed: handle missing object_data_segments in DisplaySet

Thanks to Dave Evans for the fixes for getDisplayWindowFlag, frame_packing_SEI_not_present_flag and missing object_data_segments!

Release 0.0.9

Release date: 06/02/2013

  • added: EIT grid view

Release 0.0.8

Release date: 27/01/2013

  • fixed: MPEG2 Video preview did not work on PES packets, because of adding PTS labels.
  • added: some detail to PDC TxtTriplets for teletext

Release 0.0.7

Release date: 20/01/2013

  • added: descriptors: S2SatelliteDeliverySystemDescriptor, AACMpeg2Descriptor, JPEG2000VideoDescriptor
  • added: AC3 (also alternative syntax) and E-AC3 support
  • updated: General PES support, also show PES packets for which no dedicated support is available
  • added: option show PTS on PES packets (easier to find certain packet)

Thanks to Asif Raza for the contribution of the AACMpeg2Descriptor and JPEG2000VideoDescriptor.

Release 0.0.6

Release date: 23/08/2012

  • added: preview for MPEG2 Video (based on MPVDecoder from ProjectX)
  • updated DVB subtitles (now show complete Display Sets), and show Video background

Release 0.0.5

Release date: 06/08/2012

  • added: Support for h.264
  • added: descriptors: DefaultAuthorityDescriptor, ServiceIdentifierDescriptor, NordigLogicalChannelDescriptorV1 and NordigLogicalChannelDescriptorV2
  • fixed: filtering of non printable characters (range 0x80 to 0x9F) in text items
  • changed: source encoding to UTF-8
  • added: option to number items in lists
  • fixed: some bugs
  • new: put sources on sourceforge

Release 0.0.4

Release date: 15/05/2012

  • added: Support for DSM-CC Object carousels (HbbTV, MHP, MHEG5)
  • added: Ancillary data for 138183-Audio (RDS over UECP)
  • added: Mega-frame Initialization Packet (MIP) for DVB-T
  • added: hex-viewer for raw data
  • changed: improved usability, now remembers last used directory, default private_data_specifier and view-modus
  • fixed: some bugs
  • added: descriptors: TargetBackGroundDescriptor, VideoWindowDescriptor and ApplicationUsageDescriptor (AIT)

Release 0.0.3

Release date: 23/08/2011

  • added: Support for AIT
  • added: level 2.5 graphical view for teletext pages
  • fixed: some bugs
  • added: some descriptors
  • changed: maven enabled (if you want to build it yourself)

Release 0.0.2

Release date: 26/02/2011

  • changed: the way PES data is processed, less memory use and higher processing speed
  • added: grid view for TS packets
  • added: graphical view for teletext pages
  • added: graphical view for DVB subtitles
  • added: 'copy to clipboard' actions to tree view
  • changed: when changing the order of PIDs in the bitrate view, they keep their original color

Release 0.0.1

Release date: 31/01/2011

  • Initial release.

dvbinspector's People

Contributors

basicmaster avatar davemevans avatar dependabot[bot] avatar ericberendsen avatar lebernie avatar loic-bvn-a avatar mkauf avatar musingwei avatar paulhiggs avatar simon-provost avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dvbinspector's Issues

Question: Any method to locate the continuity errors?

Hi,

In the PID list tree, I can see that the tool counts the "continuity errors" found in the stream. However, what do I have to do to go (locate) these packets? It will be desirable to have a method to go directly to these gaps.

Any idea?

Suggestion: include flatpak release so appears within flatpak software repo

Hi,
DVB Inspector is a great tool and it would be fantastic if it could be found within Flathub Software Repo. This repo is included by default within the Software application on Fedora Linux, one-click installation, adds the app to application menu and provides an update mechanism.

The publishing process involves creating a manifest and adding to the Flatpak github.

I've included an illustrative flatpak project. To build on a Fedora Linux system:

# one-off install tooling
sudo dnf install flatpak flatpak-builder
sudo flatpak install org.freedesktop.Sdk//21.08 org.freedesktop.Sdk.Extension.openjdk17//21.08

# build 
flatpak-builder --force-clean build-dir manifest.json

# local build test run
flatpak-builder --run build-dir manifest.json dvbinspector.sh

# to build and install locally for the user (icon and menu item will magically appear)
flatpak-builder --force-clean --install --user build-dir manifest.json

Cheerio

Question: Muxing delay calculation

Hi @EricBerendsen ,

To check the correctness of a muxer, it would be interesting to have this information: the delay between the time stamps of the PES data and the PCR time clock. Therefore, here is my suggestion:

  • When parsing the PES data, for each packet, in the pts field the tool adds the time difference between this timestamp and the PUSI packet (the start of the PES packet) in reference to the PCR time clock (calculating the clock until the first TS packet of the PES stream).

Here one example:

Video 14496 PES Packet
+-Start TS Packet No: 0x242 (578)
+-stream_id: 0xE0 (224) => ITU-T Rec. H.262 | ISO/IEC 13818-2 or ISO/IEC 11172-2 or ISO/IEC 14496-2 video stream number 0
+-PES_packet_length: 0x8B7 (2231)
+ ...
+-pts: 0xE15D4 (923092) => 0:00:10.2565  (PCR time difference: 0:00:00.0123)

The problem is that some tools (like the FFmpeg encoder) when muxing MPEG-TS streams, are not very good when muxing multiple services with VBR video streams in a CBR transport stream. And the idea is to have a tool that checks these differencies.

What you think?

Troubles with "Start TS Packet No:" after "Parse data"

Hi @EricBerendsen ,

The problem is that after doing "Parse data" with the right mouse button in a pid with PES Data (video, audio, substitles), when checking the "Start TS Packet No:" numbers the values seems to be incorrect. My assumption is that this value indicates the TS PACKET where the PES packet starts. However, if I go to the Transport packets, the "index" doesn't exists.

But this is not a bug. The value is correct. The problem is that the value "Start TS Packet No:" references the TS packet of the total packets. And the list "Transport packets" is indexed with the PID list order (aka the packets of this pids). So here is the root cause of the confusion. Therefore, my suggestion is to print the two values: the "global" TS packet and the "local" TS packet. Then it will be more easy to find the packet, independent of the list that you're using. Example: Start TS Packet No: 0xBD0D (48397) [28], where [28] is the 28th packet of this pid when you search in the "Transport packet" tree. Take note that after you full expand the Transport packet tree you will se the (48397) packet number, but not when you're expanding it.

Do you agree with this simple improvement?

Contact

Hi,

I tried to contact you via the form on your website but it always displays an error after submitting my comment.

SCTE-35 preroll timing

What I would really like to know is SCTE-35 splice event preroll timing: comparing the PTS of when the splice will execute against the PTS of when the command was issued. This is something only the Compressed Media Analyzer provides--no other analyzer I've tried has this feature. Maybe you can think of some way to implement it?
scte_info_channel_600_20210119

BUG: Outdated dvb.bat and dvb.sh files

Hi @EricBerendsen ,

The new release has a bug for Windows and Linux users. The launch files dvb.bat and dvb.sh files are calling to outdated packages jars. Then it's impossible to launch the tool. Almost for Windows I use this to fix the error:

"C:\Program Files\Java\jdk-17.0.2\bin\java.exe" -classpath .;.\lib\jfreechart-1.5.3.jar;.\lib\opencsv-5.5.2.jar;.\lib\jlayer-1.0.1.4.jar;.\lib\commons-text-1.9.jar;.\lib\commons-logging-1.2.jar;.\lib\commons-lang3-3.12.0.jar;.\lib\commons-collections4-4.4.jar;.\lib\commons-collections-3.2.2.jar;.\lib\commons-beanutils-1.9.4.jar;.\DVBinspector.jar %JVM_FLAGS% -Djava.util.logging.config.file=src/main/resources/logging.properties nl.digitalekabeltelevisie.main.DVBinspector

I hope you'll update these files and indicate a method to link to the current version of the JRE. However, the most relevant action is to maintain the correct versions of the used packages.

Regards.

units in seconds instead of h:m:s

Thank you for your useful DVB inspector program. I managed to get it up and running pretty easily on my Mac due to your hard work making it a stand-alone .jar. Once I fiddled with some permissions for Java on my system, I was able to browse and analyze files in my Downloads folder. For the record, here's what I had to do: give Full Disk Access to JavaLauncher via:
Settings->Security & Privacy->Full Disk Access and add /System/Library/CoreServices/JavaLauncher

I would like to see values in seconds rather than hh:mm:ss. For example, in a SCTE-35 message, I see:

TableType: user defined / SCTE3 - Splice_info_section (SCTE-35) (0/0)
[redacted]
+-table_id: 0xFC (252) => user defined / SCTE3 - Splice_info_section (SCTE-35)
[redacted]
+-splice_insert
[redacted]
| +-splice_time
[redacted]
| | +-pts_time: 0x647FA2E3 (1686086371) => 5:12:14.2930
| +-break_duration
[redacted]
| | +-duration: 0x7BA0CE (8102094) => 0:01:30.0232
  1. I would like to see pts_time in plain seconds (expected value: 1686086371/90000=18734.293) rather than hh:mm:ss.ssss
  2. Is there some text cutoff for table id 0xFC and TableType?
    perhaps user defined / SCTE3 - Splice_info_section (SCTE-35)
    should be user defined / SCTE35 - Splice_info_section (SCTE-35)

can't support UTF-8 ISO/IEC 10646-1

onid tsid sid service_name service_type service_type description service_provider_name EIT_schedule_flag EIT_present_following_flag running_status free_CA_mode
1 1 47 �森購�1� 1 digital television service   1 1 4 0
1 1 49 壹����� 1 digital television service   1 1 4 0
1 1 50 年代��� 1 digital television service   1 1 4 0
1 1 51 �森��� 1 digital television service   1 1 4 0
1 1 76 WakuWaku Japan 1 digital television service   1 1 4 0

original_network_id: 0x1 (1) => Société Européenne des Satellites
+-transport_stream_id: 0x1 (1)
+-service (�森購�1�) [0]
| +-service_id: 0x2F (47)
| +-reserved_future_use: 0x3F (63)
| +-EIT_schedule_flag: 0x1 (1) => EIT schedule information present in TS
| +-EIT_present_following_flag: 0x1 (1) => EIT_present_following information present in TS
| +-running_status: 0x4 (4) => running
| +-free_CA_mode: 0x0 (0) => clear
| +-service_descriptors_length: 0x16 (22)
| +-Descriptor: service_descriptor [0]: 0x48 (72)
| +-service_type: 0x1 (1) => digital television service
| +-service_provider_name_encoding: -
| +-service_provider_name_length: 0x0 (0)
| +-service_provider_name:
| +-service_name_encoding: UTF-8 encoding of ISO/IEC 10646-1
| +-service_name_length: 0x11 (17)
| +-service_name: �森購�1�
+-service (壹�����) [1]
| +-service_id: 0x31 (49)
| +-reserved_future_use: 0x3F (63)
| +-EIT_schedule_flag: 0x1 (1) => EIT schedule information present in TS
| +-EIT_present_following_flag: 0x1 (1) => EIT_present_following information present in TS
| +-running_status: 0x4 (4) => running
| +-free_CA_mode: 0x0 (0) => clear
| +-service_descriptors_length: 0x18 (24)
| +-Descriptor: service_descriptor [0]: 0x48 (72)
| +-service_type: 0x1 (1) => digital television service
| +-service_provider_name_encoding: -
| +-service_provider_name_length: 0x0 (0)
| +-service_provider_name:
| +-service_name_encoding: UTF-8 encoding of ISO/IEC 10646-1
| +-service_name_length: 0x13 (19)
| +-service_name: 壹�����
+-service (年代���) [2]
| +-service_id: 0x32 (50)
| +-reserved_future_use: 0x3F (63)
| +-EIT_schedule_flag: 0x1 (1) => EIT schedule information present in TS
| +-EIT_present_following_flag: 0x1 (1) => EIT_present_following information present in TS
| +-running_status: 0x4 (4) => running
| +-free_CA_mode: 0x0 (0) => clear
| +-service_descriptors_length: 0x15 (21)
| +-Descriptor: service_descriptor [0]: 0x48 (72)
| +-service_type: 0x1 (1) => digital television service
| +-service_provider_name_encoding: -
| +-service_provider_name_length: 0x0 (0)
| +-service_provider_name:
| +-service_name_encoding: UTF-8 encoding of ISO/IEC 10646-1
| +-service_name_length: 0x10 (16)
| +-service_name: 年代���
+-service (�森���) [3]
| +-service_id: 0x33 (51)
| +-reserved_future_use: 0x3F (63)
| +-EIT_schedule_flag: 0x1 (1) => EIT schedule information present in TS
| +-EIT_present_following_flag: 0x1 (1) => EIT_present_following information present in TS
| +-running_status: 0x4 (4) => running
| +-free_CA_mode: 0x0 (0) => clear
| +-service_descriptors_length: 0x15 (21)
| +-Descriptor: service_descriptor [0]: 0x48 (72)
| +-service_type: 0x1 (1) => digital television service
| +-service_provider_name_encoding: -
| +-service_provider_name_length: 0x0 (0)
| +-service_provider_name:
| +-service_name_encoding: UTF-8 encoding of ISO/IEC 10646-1
| +-service_name_length: 0x10 (16)
| +-service_name: �森���
+-service (WakuWaku Japan) [4]
+-service_id: 0x4C (76)
+-reserved_future_use: 0x3F (63)
+-EIT_schedule_flag: 0x1 (1) => EIT schedule information present in TS
+-EIT_present_following_flag: 0x1 (1) => EIT_present_following information present in TS
+-running_status: 0x4 (4) => running
+-free_CA_mode: 0x0 (0) => clear
+-service_descriptors_length: 0x14 (20)
+-Descriptor: service_descriptor [0]: 0x48 (72)
+-service_type: 0x1 (1) => digital television service
+-service_provider_name_encoding: -
+-service_provider_name_length: 0x0 (0)
+-service_provider_name:
+-service_name_encoding: UTF-8 encoding of ISO/IEC 10646-1
+-service_name_length: 0xF (15)
+-service_name: WakuWaku Japan

SDT private_data:
private_data: 0x0001FF002FFF8016481401001115E69DB1E6A3AEE8B3BCE789A931E58FB00031FF8018481601001315E5A3B9E99BBBE8A696E696B0E8819EE58FB00032FF8015481301001015E5B9B4E4BBA3E696B0E8819EE58FB00033FF8015481301001015E69DB1E6 "..../...H.................1....1...H........................2...H.....................3...H........."

./dvb.sh: cannot execute: required file not found

[DVBinspector-1.17.0]$ ./dvb.sh 
bash: ./dvb.sh: cannot execute: required file not found

dvb.sh has CRLF line endings:

[DVBinspector-1.17.0]$ hexdump -C dvb.sh 
00000000  23 21 2f 62 69 6e 2f 62  61 73 68 0d 0a 6a 61 76  |#!/bin/bash..jav|
  • 0d - CR
  • 0a - LF

After changing line endings to LF only, dvb.sh runs successfully.

Exception java.lang.IllegalArgumentException: new child is null

Hello,

I have been using DVB Inspector for many years to inspect DVB-T transport streams in Poland. Right now, on the eve of the migration to DVB-T2, broadcasters are launching new transmitters.

Unfortunately, one of the new multiplexes is causing an exception in DVB Inspector. The full error message is

Ooops.
While displaying your stream an error occurred from which DVB Inspector can not recover.
java.lang.IllegalArgumentException: new child is null

Transport stream seems OK. It plays properly in VLC and Windows Movies & TV app. Moreover, MediaInfo app displays correct information about its content. The "problematic" transport stream is here for download (one program and full multiplex, none of them work in DVB Inspector):

https://www.dropbox.com/sh/t9vp81l3pya9020/AACcAC8jFqZfTpOfHU6S1V-Da?dl=0

I hope this helps to fix this issue.
Best regards.

Moving to Java 11

DVB Inspector will be migrating to Java 11. From now on all code should be compiled with Java 11, and from the next release (1.15) a Java 11 JRE will be needed to run DVB Inspector.

One of my goals with developing DVB Inspector is learning new Java features. So I am trying to find a balance between using the latest Java version, and not forcing users to migrate too often. Java 11 has been available for two years now, and is an Oracle Long-Term-Support (LTS) release.

Linux and ^M in the dvb.sh

Hello,

latest release ZIP has dvb.sh for UNIX systems with extra ^M at the end of each line. Thus making the script spit out error as the shell interprets the /bin/bash^M as non existent. The fix is to remove those extra chars at the end of line, easiest with mcedit from mc (Midnight Commander) package.
On other note - OpenJDK 17 seems to work fine with dvbinspector.

[Suggestion] search and export function for EPG data

Thanks for this great tool.

In the EIT View you can see the EPG/TV guide data where you can also export it to .png.
Would be great if you can also export this data to json/xml/txt.

Furthermore some search function would be great. For example search for a certain program, description, actor or whatever.

Suggestion: More RAM with 64bit

Hi,

I'm using DVB Inspector for some time. As I'm running it in a 64bit Windows for 8GB of RAM, I replace the -Xmx1000m inside the dvb.bat file with this: -Xmx4g -Xms4g. Then the program run more fast and I can open larger files.

So, please consider if you want to add a new dvb-64bit.bat file, or provide a method to reconfigure the Java memory.

I hope this helps!
Regards.

Wrong TSID in BAT

If TSID bigger than 4095 show wrong TSID in BAT.

DVBinspector-1.16.1

bouquet id bouquet id name bouquet name descriptor tsid (WRONG) tsid (CORRECT) onid original network name
128 Digital Platform DIGITURK1 Digital Platform BAT 1448 5600 42 Päijät-Hämeen Puhelin Oyj
128 Digital Platform DIGITURK1 Digital Platform BAT 4037 40901 42 Päijät-Hämeen Puhelin Oyj
128 Digital Platform DIGITURK1 Digital Platform BAT 2229 30901 42 Päijät-Hämeen Puhelin Oyj
128 Digital Platform DIGITURK1 Digital Platform BAT 3717 20101 42 Päijät-Hämeen Puhelin Oyj
128 Digital Platform DIGITURK1 Digital Platform BAT 2345 43305 42 Päijät-Hämeen Puhelin Oyj
128 Digital Platform DIGITURK1 Digital Platform BAT 1041 42001 42 Päijät-Hämeen Puhelin Oyj
128 Digital Platform DIGITURK1 Digital Platform BAT 1929 30601 42 Päijät-Hämeen Puhelin Oyj
128 Digital Platform DIGITURK1 Digital Platform BAT 3737 40601 42 Päijät-Hämeen Puhelin Oyj
128 Digital Platform DIGITURK1 Digital Platform BAT 441 41401 42 Päijät-Hämeen Puhelin Oyj
128 Digital Platform DIGITURK1 Digital Platform BAT 1042 42002 42 Päijät-Hämeen Puhelin Oyj
128 Digital Platform DIGITURK1 Digital Platform BAT 43 4103 42 Päijät-Hämeen Puhelin Oyj
128 Digital Platform DIGITURK1   3437 40301 42 Päijät-Hämeen Puhelin Oyj
128 Digital Platform DIGITURK1   3937 40801 42 Päijät-Hämeen Puhelin Oyj
128 Digital Platform DIGITURK1   942 41902 42 Päijät-Hämeen Puhelin Oyj
128 Digital Platform DIGITURK1   1241 42201 42 Päijät-Hämeen Puhelin Oyj
128 Digital Platform DIGITURK1   7 7 42 Päijät-Hämeen Puhelin Oyj
128 Digital Platform DIGITURK1   3640 40504 42 Päijät-Hämeen Puhelin Oyj
128 Digital Platform DIGITURK1   743 41703 42 Päijät-Hämeen Puhelin Oyj
128 Digital Platform DIGITURK1   1729 30401 42 Päijät-Hämeen Puhelin Oyj
128 Digital Platform DIGITURK1   2830 31502 42 Päijät-Hämeen Puhelin Oyj
128 Digital Platform DIGITURK1   45 41005 42 Päijät-Hämeen Puhelin Oyj
128 Digital Platform DIGITURK1   2329 31001 42 Päijät-Hämeen Puhelin Oyj
128 Digital Platform DIGITURK1   1045 42005 42 Päijät-Hämeen Puhelin Oyj
128 Digital Platform DIGITURK1   3030 31702 42 Päijät-Hämeen Puhelin Oyj
128 Digital Platform DIGITURK1   61 61 42 Päijät-Hämeen Puhelin Oyj
128 Digital Platform DIGITURK1   941 41901 42 Päijät-Hämeen Puhelin Oyj
128 Digital Platform DIGITURK1   3 3 42 Päijät-Hämeen Puhelin Oyj
128 Digital Platform DIGITURK1   341 41301 42 Päijät-Hämeen Puhelin Oyj
128 Digital Platform DIGITURK1   1142 42102 42 Päijät-Hämeen Puhelin Oyj
128 Digital Platform DIGITURK1   1 1 42 Päijät-Hämeen Puhelin Oyj
128 Digital Platform DIGITURK1   541 41501 42 Päijät-Hämeen Puhelin Oyj

TS File

Prevent descriptors from reading past descriptor_length

There is no checking in descriptor constructors on reading past descriptor_length. This may cause descriptors with varying length and inconsistent signalling to show fields from "after" the descriptor (data from next descriptor, or CRC32, or...)

This is because descriptor constructors are called with byte[] data and an int offset, where the data is the whole containing table_section. Reason to do this was to prevent unnecessary copying of data.

Options;

  1. update every descriptor and for every field explicitly check on reading past length. To much existing code to be realistic, and you can not guarantee to cover all possible overruns.
  2. call constructors with copy of byte[] with only enough bytes. When reading past length an ArrayIndexOutOfBounds will be thrown, and the descriptorFactory will fall back to a generic Descriptor.

See tsduck/tsduck#862 for example

Unable to create DSM-CC Object and hierarchy even though private data follows ETSI DVB Standards

Hi,

I recorded some Transport Streams for work, and realised that dvbinspector is unable to recognise the DSM-CC packets and list them under the DSM-CC section under PSI, and I am unable to view or export the Object Carousel, directories and files. I am unable to share these as the recordings are over 30GB and due to work reasons.

Looking at the example TS from your website and redirecting the output of the JAR file, it seems that the error is as below:

nl.digitalekabeltelevisie.data.mpeg.dsmcc.DSMCCs update
WARNING: Not supported type; isPartOfObjectCarousel:false, isSSU:false, pid:5xxx

Looking at your code and comments, it seems to be missing the carousel_id_descriptor and data_broadcast_id_descriptor in the PMT when compared to known good TS.

public void update(final TableSectionExtendedSyntax section){
final int pid = section.getParentPID().getPid();
//check if this PID is referenced in a PMT which contains a broadcastID descriptor for one of its componenets that has a caroussel.
// does not mean this PID has to be the component with the broadcastIDdescriptor
boolean isPartOfObjectCarousel = false;
boolean isSSU = false;
for(final PMTsection[] pmtTable:pmts){
final PMTsection pmt=pmtTable[0];
// get carouselId from main loop
// should be there according to ETSI TR 101 202 V1.2.1 P.29
final List<Component> comps = pmt.getComponentenList();

image

Is it possible to modify the code such that it will still recognise the Object Carousel without the carousel id, but just name it as unknown or something like that? I would like to still be able to export the directories and files from under the PSI DSM-CC.

New Features

Hello Eric,

First of all - your over 10 year work is great. Your App is the most completely java dvb (lib) I‘ve seen so far.

My questions are very simple and I‘d like to support you.

Have you ever thought about a live input stream like rtsp or USB/TCP Devices and (you already have all information about that in the nit table) service discovery, to tune to every frequency with the required parameters? Therefore you‘d get the whole network information data.

What do you think about a xmltv export of the eit data? This would make this app more famous to users that are not interested in the technical background of dvb.

Problem with runing DVB inspector under Windows 10 x64

Hello
After download form git version DVBinspector-1.16.1-dist i when i try start from dvb.bat get error as below

set JVM_FLAGS=

java -classpath .;.\lib\jfreechart-1.5.3.jar;.\lib\opencsv-5.5.2.jar;.\lib\jlayer-1.0.1.4.jar;.\lib\commons-text-1.9.jar;.\lib\commons-logging-1.2.jar;.\lib\commons-lang3-3.12.0.jar;.\lib\commons-collections4-4.4.jar;.\lib\commons-collections-3.2.2.jar;.\lib\commons-beanutils-1.9.4.jar;.\DVBinspector.jar -Djava.util.logging.config.file=src/main/resources/logging.properties nl.digitalekabeltelevisie.main.DVBinspector
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: nl/digitalekabeltelevisie/main/DVBinspector has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

I have installed Java x64 in system version 8 update 351.

SDT updates not reflected

Hi @EricBerendsen ,

I detected a very small (but not simple) bug:

  • When you read a TS stream where it includes a change in the SDT table, you can see the "new" table and "old" table. In the PSI tree, you have the two. And you can see the two. Until here no problem.
  • However, when you select the PSI/SDT or PSI/PAT main folder, what you're watching is the "old" version. For example, if a new service is added, then you don't see the NAME included in the new SDT table. You only can see (overall) the ID of the service.

Therefore I feel you need to update the data when a new version of the tables appears. And the issue is complex to fix it because it's not sufficient to use the las table. For example, perhaps a service is removed (not added). So in this case you need to "merge" more or less the new with the old data.

Perhaps you never have seen this. But it can appear and I want to report it.
Regards.

EBU subtitles.

Hi Eric,

There has been quite some interest, and an attempt to include EBU subtitles into Googles Exoplayer app.
google/ExoPlayer#5491 among others.

The previous effort was in native code C, is buggy and can not be integrated into Exo.

I was wondering if you might be interested in making a library or module for integration into the Exoplayer project.
The specific skills seem to be very scarce so thought I would reach out to you as you are very experienced in this area.

If course I can assist with testing and providing any TS samples from Australian TV you may require.

Thanks for your consideration.

All the best,
Mal.

Wanted: Streams with 3D or UHDTV Subtitles ( EN 300 743 V1.4.1 or newer)

Current support for DVB subtitles in DVB Inspector is based on EN 300 743 V1.3.1. Since then 3D and UHDTV support have been added to the standard. I would like to update DVB Inspector to the newer standard, but need test data.

Especially looking for streams with disparity signalling segments, alternative CLUT segments, and/or using progressive encoding (using new object coding type in the Object Data Segment.

Crash in JPEG XS descriptor handler

DVB Inspector 1.17.0 is crashing when analyzing the PMT in this TS recording:
xs_descriptor.zip

It seems maybe it is expecting some private byte at the end of the descriptor, but as far as I know this is optional.

SEVERE: Error displaying stream
java.lang.NullPointerException: Cannot read the array length because "value" is null
        at nl.digitalekabeltelevisie.controller.KVP.<init>(KVP.java:223)
        at nl.digitalekabeltelevisie.data.mpeg.descriptors.extension.mpeg.JpegXsVideoDescriptor.getJTreeNode(JpegXsVideoDescriptor.java:105)
        at nl.digitalekabeltelevisie.util.Utils.addToList(Utils.java:1223)
        at nl.digitalekabeltelevisie.util.Utils.addListJTree(Utils.java:1202)
...

SCTE-35 messages inside the DSM-CC stream (was Buffer overflow in TransportStream's packet_pid)

Hi, just got this exception:

Warning: error parsing transport stream
java.lang.ArrayIndexOutOfBoundsException: Index 33345520 out of bounds for length 33345520
	at nl.digitalekabeltelevisie.data.mpeg.TransportStream.processPacket(TransportStream.java:360)
	at nl.digitalekabeltelevisie.data.mpeg.TransportStream.parsePSITables(TransportStream.java:329)
	at nl.digitalekabeltelevisie.gui.TSLoader.doInBackground(TSLoader.java:91)
	at nl.digitalekabeltelevisie.gui.TSLoader.doInBackground(TSLoader.java:42)
	at java.desktop/javax.swing.SwingWorker$1.call(SwingWorker.java:304)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.desktop/javax.swing.SwingWorker.run(SwingWorker.java:343)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:833)

Probably the problem is the index increment. Dunno what the DVB/TS standard says on this

Suggestion: Parsing PES data

Hi @EricBerendsen ,

When parsing some "large" (between 5~10 min.) files, if I select "Parse data" for a pid I'll get in troubles. The problem is the memory management. In some cases the process will never finish (I need to close the program), or I'll need to wait a lot of time. So, here one suggestion if you want to implement it:

  • In the "Parse data" function add one Status Window (or a Status Bar) to print the percentage of the completed process. As you know the total number of packets then you can calculate how many reamins until complete the process. Futhermore, you can also implement a "Stop" button to exit for the process and print only de partial data parsed. This will helps when the number of packets is very large and you only want to check some part.

I hope you agree with this enhancement.
Thank you for this useful tool.
Regards.

dvb.sh uses dos style newlines

I get this error on macos unless I run dos2unix first:

dvb.sh: bad interpreter: /bin/bash^M: no such file or directory

Drag and drop support for re-opening

Hi,

When I want to use DVB Inspector I launch it from a ICON, and after I drag & drop the file to analyze. However, I have a frustration with this: when I want to analyze another different file, I need to close and open a new instance of the tool. That's because the drag & drop refuses to receive the file when another file is opened on it. So, could you please remove this restriction?

Thank you.

Version 1.17 will require java 17

Early warning; the next release of DVB Inspector (1.17) will require java 17. I know this may inconvenience some users, as some people may not have the admin rights to install a new version of Java, or Java 17 may not yet be available for their OS (Raspberry Pi ?). I am sorry about that.

I have two main goals when working on DVB Inspector; learning about DVB and learning about new features of Java. I think there are enough new features in Java 17 to justify upgrading to this new version.

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.