Questa è un'area di ricerca attiva. Mi è capitato di aver svolto un po 'di lavoro in quest'area, quindi condividerò ciò che posso sull'idea di base (questo lavoro è stato svolto con partner del settore e non posso condividere i dettagli segreti :)).
Il tl; dr è che spesso è possibile identificare un flusso di traffico crittografato come portante video, ed è spesso possibile stimarne la risoluzione, ma è complicato e non sempre preciso. Molte persone stanno lavorando su modi per farlo in modo più coerente e accurato.
Il traffico video ha alcune caratteristiche specifiche che possono distinguerlo da altri tipi di traffico. Qui mi riferisco specificamente al video on demand, non al video live streaming. Il video on demand spesso non ha quei tag di priorità menzionati in questa risposta. Inoltre mi riferisco specificamente al video adattivo, il che significa che il video è diviso in segmenti (ciascuno della durata di circa 2-10 secondi) e ogni segmento di video è codificato a più livelli di qualità (livello di qualità che significa: bitrate video a lungo termine, codec, e risoluzione). Durante la riproduzione del video, il livello di qualità al quale viene scaricato il segmento successivo dipende dalla velocità dati che l'applicazione ritiene che la rete possa supportare. (Questo è il protocollo DASH a cui si fa riferimento in questa risposta.)
Se il tuo telefono sta riproducendo un video e guardi la velocità di dati (media mobile ponderata di) del traffico andando sul tuo telefono nel tempo, potrebbe assomigliare a questo:
(questo viene catturato da una sessione di YouTube su Verizon. C'è la media mobile su 15 secondi e anche la media a breve termine.
Ci sono alcune parti diverse in questa sessione:
Innanzitutto, l'applicazione video (lettore YouTube) cerca di riempire il buffer fino alla capacità del buffer. Durante questo periodo, estrae i dati a qualsiasi velocità supportata dalla rete. In questa fase, è praticamente indistinguibile dal download di un file di grandi dimensioni, a meno che non si possa dedurre che si tratta di traffico video dall'indirizzo remoto (come menzionato in questa risposta).
Una volta che il buffer è pieno, quindi si ottengono "raffiche" a intervalli regolari. Supponiamo che il tuo buffer possa contenere 200 secondi di video. Quando il buffer contiene 200 secondi di video, l'applicazione interrompe il download. Quindi, dopo che un segmento di video è stato riprodotto (diciamo 5 secondi), c'è di nuovo spazio nel buffer, quindi scaricherà il segmento successivo, quindi si fermerà di nuovo. Questo è ciò che causa questo schema esplosivo.
Questo modello è molto caratteristico del video - il traffico proveniente da altre applicazioni non ha questo modello - quindi un fornitore di servizi di rete può facilmente scegliere i flussi che trasportano traffico video. In alcuni casi, potresti non osservare mai questo schema, ad esempio se il video è così breve che l'intera cosa viene caricata nel buffer in una volta e quindi il client interrompe il download. In queste circostanze, è molto difficile distinguere il traffico video dal download di un file (a meno che tu non possa capirlo tramite indirizzo remoto).
Comunque, una volta identificato il flusso come trasportante traffico video, sia indirizzo remoto (non sempre possibile, poiché i principali fornitori di video utilizzano reti di distribuzione di contenuti che non sono esclusive del video) o dal suo modello di traffico (possibile se la sessione video è lunga, molto più difficile se è così breve da caricare l'intero video nel buffer tutto in una volta) ...
Ora, come ha detto Hector, puoi provare a indovinare la risoluzione dal bitrate osservando la dimensione (in byte) di ogni "raffica" di dati:
Dalla dimensione per durata potresti fare una stima ragionevole della risoluzione, specialmente se mantieni una media mobile.
Ma questo può essere difficile. Prendi la sessione di YouTube nel mio esempio:
- Non tutti i segmenti hanno la stessa durata: la durata del video richiesto alla volta dipende da diversi fattori (il livello di qualità, lo stato della rete, il tipo di dispositivo stai riproducendo il video e altri). Quindi non puoi necessariamente guardare un "burst" e dire "OK, questo era X byte che rappresentava 5 secondi di video, quindi conosco la velocità di dati del video". A volte puoi capire la probabile durata del segmento, ma altre volte è complicato.
- Per un determinato livello di qualità video e durata del segmento, segmenti diversi avranno dimensioni diverse (a seconda di cose come la quantità di movimento quella parte del video).
- Anche a parità di risoluzione video, la velocità dati a lungo termine può variare: un video 1080p codificato con VP9 non avrà la stessa velocità dati a lungo termine di uno codificato con H.264.
- Il livello di qualità video cambia in base alla qualità della rete percepita (che è visibile al fornitore di servizi di rete) e allo stato del buffer (che non lo è). In questo modo puoi esaminare le velocità di trasmissione dati a lungo termine superiori a 30 secondi, ma è possibile che il livello di qualità video effettivo sia cambiato più volte in quei 30 secondi.
- Durante i periodi in cui il buffer si esaurisce o si riempie alla velocità possibile (quando non si hanno quelle "raffiche"), è molto più difficile stimare cosa sta succedendo nel video.
- Per complicare ulteriormente le cose: a volte un flusso video sarà "suddiviso in strisce" su più flussi di strato inferiore. A volte una parte del video viene recuperata da un indirizzo, quindi si passa al recupero del video da un indirizzo diverso.
Quel grafico della velocità di dati che ti ho mostrato appena sopra? Ecco qual era la risoluzione video in quell'intervallo di tempo:
Qui, il colore indica la risoluzione video. Quindi ... puoi in qualche modo stimare cosa sta succedendo solo dai modelli di traffico. Ma è un problema difficile! Ci sono altri indicatori nel traffico che puoi osservare. Non posso dire in modo definitivo come lo stia facendo un qualsiasi fornitore di servizi. Ma almeno per quanto riguarda lo stato dell'arte accademico, non c'è modo di farlo con perfetta precisione, tutto il tempo (a meno che tu non abbia la collaborazione dei fornitori di video ...)
Se sei interessato a saperne di più sulle tecniche utilizzate per questo tipo di problema, c'è molta letteratura accademica là fuori - vedi ad esempio BUFFEST: Predicting Buffer Conditions and Real-time Requirements of HTTP (S) client di streaming adattivi come punto di partenza. (Non il mio articolo, solo uno che ho letto di recente.)