TSDuck v3.40-3963
MPEG Transport Stream Toolkit
|
A class which analyzes a complete transport stream. More...
#include <tsTSAnalyzer.h>
Classes | |
class | ETIDContext |
This protected inner class contains the analysis context for one TID/TIDext into one PID. More... | |
class | PIDContext |
This protected inner class contains the analysis context for one PID. More... | |
class | ServiceContext |
This protected inner class contains the analysis context for one service. More... | |
Public Member Functions | |
TSAnalyzer (DuckContext &duck, const BitRate &bitrate_hint=0, BitRateConfidence bitrate_confidence=BitRateConfidence::LOW) | |
Default constructor. | |
virtual | ~TSAnalyzer () override |
Destructor. | |
void | feedPacket (const TSPacket &packet, const TSPacketMetadata &mdata) |
The following method feeds the analyzer with a TS packet. | |
void | getGlobalPIDs (std::vector< PID > &list) |
Get the list of global PID's. | |
void | getPIDs (std::vector< PID > &list) |
Get the list of all PID's. | |
void | getPIDsOfService (std::vector< PID > &list, uint16_t service_id) |
Get the list of PID's for one service id. | |
void | getPIDsWithPES (std::vector< PID > &list) |
Get the list of PID's carrying PES packets. | |
void | getServiceIds (std::vector< uint16_t > &list) |
Get the list of service ids. | |
void | getUnreferencedPIDs (std::vector< PID > &list) |
Get the list of unreferenced PID's. | |
void | reset () |
Reset the analysis context. | |
void | setBitrateHint (const BitRate &bitrate_hint=0, BitRateConfidence bitrate_confidence=BitRateConfidence::LOW) |
Specify a "bitrate hint" for the analysis. | |
void | setMaxConsecutiveSuspectCount (uint64_t count) |
Set the maximum number of consecutive suspect packets. | |
void | setMinErrorCountBeforeSuspect (uint64_t count) |
Set the number of consecutive packet errors threshold. | |
Protected Types | |
using | ETIDContextMap = std::map< ETID, ETIDContextPtr > |
Map of ETIDContext, indexed by ETID. | |
using | ETIDContextPtr = std::shared_ptr< ETIDContext > |
Safe pointer to an ETIDContext (not thread-safe). | |
using | PIDContextMap = std::map< PID, PIDContextPtr > |
Map of PIDContext, indexed by PID. | |
using | PIDContextPtr = std::shared_ptr< PIDContext > |
Safe pointer to a PIDContext (not thread-safe). | |
using | ServiceContextMap = std::map< uint16_t, ServiceContextPtr > |
Map of ServiceContext, indexed by service id. | |
using | ServiceContextPtr = std::shared_ptr< ServiceContext > |
Safe pointer to a ServiceContext (not thread-safe). | |
using | ServiceIdSet = std::set< uint16_t > |
Set of service ids. | |
Protected Member Functions | |
ETIDContextPtr | getETID (const Section §ion) |
Get an ETID context. | |
PIDContextPtr | getPID (PID pid, const UString &description=UNREFERENCED) |
Get a PID context. | |
ServiceContextPtr | getService (uint16_t service_id) |
Get a service context. | |
bool | pidExists (PID pid) const |
Check if a PID context exists. | |
void | recomputeStatistics () |
Update the global statistics value if internal data were modified. | |
Protected Attributes | |
UString | _country_code {} |
TOT country code. | |
DuckContext & | _duck |
TSDuck execution context. | |
cn::milliseconds | _duration {} |
Total broadcast duration. | |
Time | _first_local {} |
First system local time (first packet). | |
Time | _first_stt {} |
First STT (ATCS) UTC time stamp. | |
Time | _first_tdt {} |
First TDT UTC time stamp. | |
Time | _first_tot {} |
First TOT local time stamp. | |
Time | _first_utc {} |
First system UTC time (first packet). | |
BitRate | _global_bitrate = 0 |
Bitrate for global PID's. | |
ISDBTLayerCounter | _global_isdb_layers {} |
Same as _isdb_layers for global PID's. | |
size_t | _global_pid_cnt = 0 |
Number of global PID's (ref but no service). | |
uint64_t | _global_pkt_cnt = 0 |
Number of packets in global PID's. | |
size_t | _global_scr_pids = 0 |
Number of scrambled global PID's. | |
uint64_t | _invalid_sync = 0 |
Number of packets with invalid sync byte (not 0x47). | |
Time | _last_local {} |
Last system local time (recomputeStatistics). | |
Time | _last_stt {} |
Last STT (ATCS) time stamp. | |
Time | _last_tdt {} |
Last TDT UTC time stamp. | |
Time | _last_tot {} |
Last TOT local time stamp. | |
Time | _last_utc {} |
Last system UTC time (recomputeStatistics). | |
size_t | _pcr_pid_cnt = 0 |
Number of PID's with PCR's. | |
size_t | _pid_cnt = 0 |
Number of PID's (with actual packets). | |
PIDContextMap | _pids {} |
Description of PIDs. | |
BitRate | _psisi_bitrate = 0 |
Bitrate for global PSI/SI PID's. | |
size_t | _psisi_pid_cnt = 0 |
Number of global PSI/SI PID's (0x00 to 0x1F). | |
uint64_t | _psisi_pkt_cnt = 0 |
Number of packets in global PSI/SI PID's. | |
size_t | _psisi_scr_pids = 0 |
Number of scrambled global PSI/SI PID's (normally zero). | |
size_t | _scrambled_pid_cnt = 0 |
Number of scrambled PID's. | |
uint16_t | _scrambled_services_cnt = 0 |
Number of scrambled services. | |
ServiceContextMap | _services {} |
Description of services, map key: service id. | |
uint64_t | _suspect_ignored = 0 |
Number of suspect packets, ignored. | |
std::bitset< TID_MAX > | _tid_present {} |
Array of detected tables. | |
uint64_t | _transport_errors = 0 |
Number of packets with transport error. | |
BitRate | _ts_bitrate = 0 |
TS bitrate (either from PCR or options). | |
std::optional< uint16_t > | _ts_id {} |
Transport stream id. | |
ISDBTLayerCounter | _ts_isdb_layers {} |
For ISDB-T streams with 204-byte packets, map key = layer indicator (0-1) to value = number of TS packets. | |
BitRate | _ts_pcr_bitrate_188 = 0 |
Average TS bitrate in b/s (eval from PCR). | |
BitRate | _ts_pcr_bitrate_204 = 0 |
Average TS bitrate in b/s (eval from PCR). | |
uint64_t | _ts_pkt_cnt = 0 |
Number of TS packets. | |
BitRate | _ts_user_bitrate = 0 |
User-specified TS bitrate (if any). | |
BitRateConfidence | _ts_user_br_confidence = BitRateConfidence::LOW |
Confidence in user-specified TS bitrate. | |
BitRate | _unref_bitrate = 0 |
Bitrate for unreferenced PID's. | |
ISDBTLayerCounter | _unref_isdb_layers {} |
Same as _isdb_layers for unreferenced PID's. | |
size_t | _unref_pid_cnt = 0 |
Number of unreferenced PID's. | |
uint64_t | _unref_pkt_cnt = 0 |
Number of packets in unreferenced PID's. | |
size_t | _unref_scr_pids = 0 |
Number of scrambled unreferenced PID's. | |
A class which analyzes a complete transport stream.
|
explicit |
Default constructor.
[in,out] | duck | TSDuck execution context. The reference is kept inside the analyzer. |
[in] | bitrate_hint | Optional bitrate "hint" for the analysis. It is the user-specified bitrate in bits/seconds, based on 188-byte packets. The bitrate hint is optional: if specified as zero, the analysis is based on the PCR values. |
[in] | bitrate_confidence | Confidence level in bitrate_hint. |
void ts::TSAnalyzer::feedPacket | ( | const TSPacket & | packet, |
const TSPacketMetadata & | mdata | ||
) |
The following method feeds the analyzer with a TS packet.
The stream is analyzed by repeatedly calling feedPacket().
[in] | packet | One TS packet from the stream. |
[in] | mdata | Associated metadata. |
void ts::TSAnalyzer::setBitrateHint | ( | const BitRate & | bitrate_hint = 0 , |
BitRateConfidence | bitrate_confidence = BitRateConfidence::LOW |
||
) |
Specify a "bitrate hint" for the analysis.
[in] | bitrate_hint | Optional bitrate "hint" for the analysis. It is the user-specified bitrate in bits/seconds, based on 188-byte packets. The bitrate hint is optional: if specified as zero, the analysis is based on the PCR values. |
[in] | bitrate_confidence | Confidence level in bitrate_hint. |
|
inline |
Set the number of consecutive packet errors threshold.
[in] | count | The number of consecutive packet errors after which a packet is considered as suspect if it does not belong to a previously known PID. If set to zero, suspect packet detection is disabled. Initially set to the default value 1. |
|
inline |
Set the maximum number of consecutive suspect packets.
[in] | count | When that number of consecutive suspect packets is reached, the next packet will not be considered for suspect detection. Initially set to the default value 1. |
void ts::TSAnalyzer::getServiceIds | ( | std::vector< uint16_t > & | list | ) |
Get the list of service ids.
[out] | list | The returned list of service ids. |
void ts::TSAnalyzer::getPIDs | ( | std::vector< PID > & | list | ) |
Get the list of all PID's.
[out] | list | The returned list of all PID's. |
void ts::TSAnalyzer::getGlobalPIDs | ( | std::vector< PID > & | list | ) |
Get the list of global PID's.
Global PID's are PID's which do not belong to a service.
[out] | list | The returned list of global PID's. |
void ts::TSAnalyzer::getUnreferencedPIDs | ( | std::vector< PID > & | list | ) |
Get the list of unreferenced PID's.
[out] | list | The returned list of unreferenced PID's. |
void ts::TSAnalyzer::getPIDsOfService | ( | std::vector< PID > & | list, |
uint16_t | service_id | ||
) |
Get the list of PID's for one service id.
[out] | list | The returned list of PID's. |
[in] | service_id | The service id. |
void ts::TSAnalyzer::getPIDsWithPES | ( | std::vector< PID > & | list | ) |
Get the list of PID's carrying PES packets.
[out] | list | The returned list of PID's carrying PES packets. |
|
protected |
Get a service context.
Allocate a new entry if service is not found.
[in] | service_id | Service to search. |
|
protected |
|
protected |
Check if a PID context exists.
[in] | pid | PID to search. |
|
protected |
Get a PID context.
Allocate a new entry if PID not found.
[in] | pid | PID to search. |
[in] | description | Initial description of the PID if the context is created. |