Recherche avancée

Médias (0)

Mot : - Tags -/organisation

Aucun média correspondant à vos critères n’est disponible sur le site.

Autres articles (25)

  • Des sites réalisés avec MediaSPIP

    2 mai 2011, par

    Cette page présente quelques-uns des sites fonctionnant sous MediaSPIP.
    Vous pouvez bien entendu ajouter le votre grâce au formulaire en bas de page.

  • Emballe Médias : Mettre en ligne simplement des documents

    29 octobre 2010, par

    Le plugin emballe médias a été développé principalement pour la distribution mediaSPIP mais est également utilisé dans d’autres projets proches comme géodiversité par exemple. Plugins nécessaires et compatibles
    Pour fonctionner ce plugin nécessite que d’autres plugins soient installés : CFG Saisies SPIP Bonux Diogène swfupload jqueryui
    D’autres plugins peuvent être utilisés en complément afin d’améliorer ses capacités : Ancres douces Légendes photo_infos spipmotion (...)

  • Encoding and processing into web-friendly formats

    13 avril 2011, par

    MediaSPIP automatically converts uploaded files to internet-compatible formats.
    Video files are encoded in MP4, Ogv and WebM (supported by HTML5) and MP4 (supported by Flash).
    Audio files are encoded in MP3 and Ogg (supported by HTML5) and MP3 (supported by Flash).
    Where possible, text is analyzed in order to retrieve the data needed for search engine detection, and then exported as a series of image files.
    All uploaded files are stored online in their original format, so you can (...)

Sur d’autres sites (4981)

  • 10 Key Google Analytics Limitations You Should Be Aware Of

    9 mai 2022, par Erin

    Google Analytics (GA) is the biggest player in the web analytics space. But is it as “universal” as its brand name suggests ?

    Over the years users have pointed out a number of major Google Analytics limitations. Many of these are even more visible in Google Analytics 4. 

    Introduced in 2020, Google Analytics 4 (GA4) has been sceptically received. As the sunset date of 1st, July 2023 for the current version, Google Universal Analytics (UA), approaches, the dismay grows stronger.

    To the point where people are pleading with others to intervene : 

    GA4 Elon Musk Tweet
    Source : Chris Tweten via Twitter

    Main limitations of Google Analytics

    Google Analytics 4 is advertised as a more privacy-centred, comprehensive and “intelligent” web analytics platform. 

    According to Google, the newest version touts : 

    • Machine learning at its core provides better segmentation and fast-track access to granular insights 
    • Privacy-by-design controls, addressing restrictions on cookies and new regulatory demands 
    • More complete understanding of customer journeys across channels and devices 

    Some of these claims hold true. Others crumble upon a deeper investigation. Newly advertised Google Analytics capabilities such as ‘custom events’, ‘predictive insights’ and ‘privacy consent mode’ only have marginal improvements. 

    Complex setup, poor UI and lack of support with migration also leave many other users frustrated with GA4. 

    Let’s unpack all the current (and legacy) limitations of Google Analytics you should account for. 

    1. No Historical Data Imports 

    Google rushed users to migrate from Universal Analytics to Google Analytics 4. But they overlooked one important precondition — backwards compatibility. 

    You have no way to import data from Google Universal Analytics to Google Analytics 4. 

    Historical records are essential for analysing growth trends and creating benchmarks for new marketing campaigns. Effectively, you are cut short from past insights — and forced to start strategising from scratch. 

    At present, Google offers two feeble solutions : 

    • Run data collection in parallel and have separate reporting for GA4 and UA until the latter is shut down. Then your UA records are gone. 
    • For Ecommerce data, manually duplicate events from UA at a new GA4 property while trying to figure out the new event names and parameters. 

    Google’s new data collection model is the reason for migration difficulties. 

    In Google Analytics 4, all analytics hits types — page hits, social hits, app/screen view, etc. — are recorded as events. Respectively, the “‘event’ parameter in GA4 is different from one in Google Universal Analytics as the company explains : 

    GA4 vs Universal Analytics event parameters
    Source : Google

    This change makes migration tedious — and Google offers little assistance with proper events and custom dimensions set up. 

    2. Data Collection Limits 

    If you’ve wrapped your head around new GA4 events, congrats ! You did a great job, but the hassle isn’t over. 

    You still need to pay attention to new Google Analytics limits on data collection for event parameters and user properties. 

    GA4 Event limits
    Source : Google

    These apply to :

    • Automatically collected events
    • Enhanced measurement events
    • Recommended events 
    • Custom events 

    When it comes to custom events, GA4 also has a limit of 25 custom parameters per event. Even though it seems a lot, it may not be enough for bigger websites. 

    You can get higher limits by upgrading to Google Analytics 360, but the costs are steep. 

    3. Limited GDPR Compliance 

    Google Analytics has a complex history with European GDPR compliance

    A 2020 ruling by the Court of Justice of the European Union (CJEU) invalidated the Privacy Shield framework Google leaned upon. This framework allowed the company to regulate EU-US data transfers of sensitive user data. 

    But after this loophole was closed, Google faced a heavy series of privacy-related fines :

    • French data protection authority, CNIL, ruled that  “the transfers to the US of personal data collected through Google Analytics are illegal” — and proceeded to fine Google for a record-setting €150 million at the beginning of 2022. 
    • Austrian regulators also deemed Google in breach of GDPR requirements and also branded the analytics as illegal. 

    Other EU-member states might soon proceed with similar rulings. These, in turn, can directly affect Google Analytics users, whose businesses could face brand damage and regulatory fines for non-compliance. In fact, companies cannot select where the collected analytics data will be stored — on European servers or abroad — nor can they obtain this information from Google.

    Getting a web analytics platform that allows you to keep data on your own servers or select specific Cloud locations is a great alternative. 

    Google also has been lax with its cookie consent policy and doesn’t properly inform consumers about data collection, storage or subsequent usage. Google Analytics 4 addresses this issue to an extent. 

    By default, GA4 relies on first-party cookies, instead of third-party ones — which is a step forward. But the user privacy controls are hard to configure without losing most of the GA4 functionality. Implementing user consent mode to different types of data collection also requires a heavy setup. 

    4. Strong Reliance on Sampled Data 

    To compensate for ditching third-party cookies, GA4 more heavily leans on sampled data and machine learning to fill the gaps in reporting. 

    In GA4 sampling automatically applies when you :

    • Perform advanced analysis such as cohort analysis, exploration, segment overlap or funnel analysis with not enough data 
    • Have over 10,000,000 data rows and generate any type of non-default report 

    Google also notes that data sampling can occur at lower thresholds when you are trying to get granular insights. If there’s not enough data or because Google thinks it’s too complex to retrieve. 

    In their words :

    Source : Google

    Data sampling adds “guesswork” to your reports, meaning you can’t be 100% sure of data accuracy. The divergence from actual data depends on the size and quality of sampled data. Again, this isn’t something you can control. 

    Unlike Google Analytics 4, Matomo applies no data sampling. Your reports are always accurate and fully representative of actual user behaviours. 

    5. No Proper Data Anonymization 

    Data anonymization allows you to collect basic analytics about users — visits, clicks, page views — but without personally identifiable information (or PII) such as geo-location, assigns tracking ID or other cookie-based data. 

    This reduced your ability to :

    • Remarket 
    • Identify repeating visitors
    • Do advanced conversion attribution 

    But you still get basic data from users who ignored or declined consent to data collection. 

    By default, Google Analytics 4 anonymizes all user IP addresses — an upgrade from UA. However, it still assigned a unique user ID to each user. These count as personal data under GDPR. 

    For comparison, Matomo provides more advanced privacy controls. You can anonymize :

    • Previously tracked raw data 
    • Visitor IP addresses
    • Geo-location information
    • User IDs 

    This can ensure compliance, especially if you operate in a sensitive industry — and delight privacy-mindful users ! 

    6. No Roll-Up Reporting

    Getting a bird’s-eye view of all your data is helpful when you need hotkey access to main sites — global traffic volume, user count or percentage of returning visitors.

    With Roll-Up Reporting, you can see global-performance metrics for multiple localised properties (.co.nz, .co.uk, .com, etc,) in one screen. Then zoom in on specific localised sites when you need to. 

    7. Report Processing Latency 

    The average data processing latency is 24-48 hours with Google Analytics. 

    Accounts with over 200,000 daily sessions get data refreshes only once a day. So you won’t be seeing the latest data on core metrics. This can be a bummer during one-day promo events like Black Friday or Cyber Monday when real-time information can prove to be game-changing ! 

    Matomo processes data with lower latency even for high-traffic websites. Currently, we have 6-24 hour latency for cloud deployments. On-premises web analytics can be refreshed even faster — within an hour or instantly, depending on the traffic volumes. 

    8. No Native Conversion Optimisation Features

    Google Analytics users have to use third-party tools to get deeper insights like how people are interacting with your webpage or call-to-action.

    You can use the free Google Optimize tool, but it comes with limits : 

    • No segmentation is available 
    • Only 10 simultaneous running experiments allowed 

    There isn’t a native integration between Google Optimize and Google Analytics 4. Instead, you have to manually link an Optimize Container to an analytics account. Also, you can’t select experiment dimensions in Google Analytics reports.

    What’s more, Google Optimize is a basic CRO tool, best suited for split testing (A/B testing) of copy, visuals, URLs and page layouts. If you want to get more advanced data, you need to pay for extra tools. 

    Matomo comes with a native set of built-in conversion optimization features : 

    • Heatmaps 
    • User session recording 
    • Sales funnel analysis 
    • A/B testing 
    • Form submission analytics 
    A/B test hypothesis testing on Matomo
    A/B test hypothesis testing on Matomo

    9. Deprecated Annotations

    Annotations come in handy when you need to provide extra context to other team members. For example, point out unusual traffic spikes or highlight a leak in the sales funnel. 

    This feature was available in Universal Analytics but is now gone in Google Analytics 4. But you can still quickly capture, comment and share knowledge with your team in Matomo. 

    You can add annotations to any graph that shows statistics over time including visitor reports, funnel analysis charts or running A/B tests. 

    10. No White Label Option 

    This might be a minor limitation of Google Analytics, but a tangible one for agency owners. 

    Offering an on-brand, embedded web analytics platform can elevate your customer experience. But white label analytics were never a thing with Google Analytics, unlike Matomo. 

    Wrap Up 

    Google set a high bar for web analytics. But Google Analytics inherent limitations around privacy, reporting and deployment options prompt more users to consider Google Analytics alternatives, like Matomo. 

    With Matomo, you can easily migrate your historical data records and store customer data locally or in a designated cloud location. We operate by a 100% unsampled data principle and provide an array of privacy controls for advanced compliance. 

    Start your 21-day free trial (no credit card required) to see how Matomo compares to Google Analytics ! 

  • Trying to get the current FPS and Frametime value into Matplotlib title

    16 juin 2022, par TiSoBr

    I try to turn an exported CSV with benchmark logs into an animated graph. Works so far, but I can't get the Titles on top of both plots with their current FPS and frametime in ms values animated.

    


    Thats the output I'm getting. Looks like he simply stores all values in there instead of updating them ?

    


    Screengrab of cli output
Screengrab of the final output (inverted)

    


    from __future__ import division
import sys, getopt
import time
import matplotlib
import numpy as np
import subprocess
import math
import re
import argparse
import os
import glob

import matplotlib.animation as animation
import matplotlib.pyplot as plt


def check_pos(arg):
    ivalue = int(arg)
    if ivalue <= 0:
        raise argparse.ArgumentTypeError("%s Not a valid positive integer value" % arg)
    return True
    
def moving_average(x, w):
    return np.convolve(x, np.ones(w), 'valid') / w
    

parser = argparse.ArgumentParser(
    description = "Example Usage python frame_scan.py -i mangohud -c '#fff' -o mymov",
    formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("-i", "--input", help = "Input data set from mangohud", required = True, nargs='+', type=argparse.FileType('r'), default=sys.stdin)
parser.add_argument("-o", "--output", help = "Output file name", required = True, type=str, default = "")
parser.add_argument("-r", "--framerate", help = "Set the desired framerate", required = False, type=float, default = 60)
parser.add_argument("-c", "--colors", help = "Colors for the line graphs; must be in quotes", required = True, type=str, nargs='+', default = 60)
parser.add_argument("--fpslength", help = "Configures how long the data will be shown on the FPS graph", required = False, type=float, default = 5)
parser.add_argument("--fpsthickness", help = "Changes the line width for the FPS graph", required = False, type=float, default = 3)
parser.add_argument("--frametimelength", help = "Configures how long the data will be shown on the frametime graph", required = False, type=float, default = 2.5)
parser.add_argument("--frametimethickness", help = "Changes the line width for the frametime graph", required = False, type=float, default = 1.5)
parser.add_argument("--graphcolor", help = "Changes all of the line colors on the graph; expects hex value", required = False, default = '#FFF')
parser.add_argument("--graphthicknes", help = "Changes the line width of the graph", required = False, type=float, default = 1)
parser.add_argument("-ts","--textsize", help = "Changes the the size of numbers marking the ticks", required = False, type=float, default = 23)
parser.add_argument("-fsM","--fpsmax", help = "Changes the the size of numbers marking the ticks", required = False, type=float, default = 180)
parser.add_argument("-fsm","--fpsmin", help = "Changes the the size of numbers marking the ticks", required = False, type=float, default = 0)
parser.add_argument("-fss","--fpsstep", help = "Changes the the size of numbers marking the ticks", required = False, type=float, default = 30)
parser.add_argument("-ftM","--frametimemax", help = "Changes the the size of numbers marking the ticks", required = False, type=float, default = 50)
parser.add_argument("-ftm","--frametimemin", help = "Changes the the size of numbers marking the ticks", required = False, type=float, default = 0)
parser.add_argument("-fts","--frametimestep", help = "Changes the the size of numbers marking the ticks", required = False, type=float, default = 10)

arg = parser.parse_args()
status = False


if arg.input:
    status = True
if arg.output:
    status = True
if arg.framerate:
    status = check_pos(arg.framerate)
if arg.fpslength:
    status = check_pos(arg.fpslength)
if arg.fpsthickness:
    status = check_pos(arg.fpsthickness)
if arg.frametimelength:
    status = check_pos(arg.frametimelength)
if arg.frametimethickness:
    status = check_pos(arg.frametimethickness)
if arg.colors:
    if len(arg.output) != len(arg.colors):
        for i in arg.colors:
            if re.match(r"^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$", i):
                status = True
            else:
                print('{} : Isn\'t a valid hex value!'.format(i))
                status = False
    else:
        print('You must have the same amount of colors as files in input!')
        status = False
if arg.graphcolor:
    if re.match(r"^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$", arg.graphcolor):
        status = True
    else:
        print('{} : Isn\'t a vaild hex value!'.format(arg.graphcolor))
        status = False
if arg.graphthicknes:
    status = check_pos(arg.graphthicknes)
if arg.textsize:
    status = check_pos(arg.textsize)
if not status:
    print("For a list of arguments try -h or --help") 
    exit()


# Empty output folder
files = glob.glob('/output/*')
for f in files:
    os.remove(f)


# We need to know the longest recording out of all inputs so we know when to stop the video
longest_data = 0

# Format the raw data into a list of tuples (fps, frame time in ms, time from start in micro seconds)
# The first three lines of our data are setup so we ignore them
data_formated = []
for li, i in enumerate(arg.input):
    t = 0
    sublist = []
    for line in i.readlines()[3:]:
        x = line[:-1].split(',')
        fps = float(x[0])
        frametime = int(x[1])/1000 # convert from microseconds to milliseconds
        elapsed = int(x[11])/1000 # convert from nanosecond to microseconds
        data = (fps, frametime, elapsed)
        sublist.append(data)
    # Compare last entry of each list with the 
    if sublist[-1][2] >= longest_data:
        longest_data = sublist[-1][2]
    data_formated.append(sublist)


max_blocksize = max(arg.fpslength, arg.frametimelength) * arg.framerate
blockSize = arg.framerate * arg.fpslength


# Get step time in microseconds
step = (1/arg.framerate) * 1000000 # 1000000 is one second in microseconds
frame_size_fps = (arg.fpslength * arg.framerate) * step
frame_size_frametime = (arg.frametimelength * arg.framerate) * step


# Total frames will have to be updated for more then one source
total_frames = int(int(longest_data) / step)


if True: # Gonna be honest, this only exists so I can collapse this block of code

    # Sets up our figures to be next to each other (horizontally) and with a ratio 3:1 to each other
    fig, (ax1, ax2) = plt.subplots(1, 2, gridspec_kw={'width_ratios': [3, 1]})

    # Size of whole output 1920x360 1080/3=360
    fig.set_size_inches(19.20, 3.6)

    # Make the background transparent
    fig.patch.set_alpha(0)


    # Loop through all active axes; saves a lot of lines in ax1.do_thing(x) ax2.do_thing(x)
    for axes in fig.axes:

        # Set all splines to the same color and width
        for loc, spine in axes.spines.items():
            axes.spines[loc].set_color(arg.graphcolor)
            axes.spines[loc].set_linewidth(arg.graphthicknes)

        # Make sure we don't render any data points as this will be our background
        axes.set_xlim(-(max_blocksize * step), 0)
        

        # Make both plots transparent as well as the background
        axes.patch.set_alpha(.5)
        axes.patch.set_color('#020202')

        # Change the Y axis info to be on the right side
        axes.yaxis.set_label_position("right")
        axes.yaxis.tick_right()

        # Add the white lines across the graphs; the location of the lines are based off set_{}ticks
        axes.grid(alpha=.8, b=True, which='both', axis='y', color=arg.graphcolor, linewidth=arg.graphthicknes)

        # Remove X axis info
        axes.set_xticks([])

    # Add a another Y axis so ticks are on both sides
    tmp_ax1 = ax1.secondary_yaxis("left")
    tmp_ax2 = ax2.secondary_yaxis("left")

    # Set both to the same values
    ax1.set_yticks(np.arange(arg.fpsmin, arg.fpsmax + 1, step=arg.fpsstep))
    ax2.set_yticks(np.arange(arg.frametimemin, arg.frametimemax + 1, step=arg.frametimestep))
    tmp_ax1.set_yticks(np.arange(arg.fpsmin , arg.fpsmax + 1, step=arg.fpsstep))
    tmp_ax2.set_yticks(np.arange(arg.frametimemin, arg.frametimemax + 1, step=arg.frametimestep))

    # Change the "ticks" to be white and correct size also change font size
    ax1.tick_params(axis='y', color=arg.graphcolor ,width=arg.graphthicknes, length=16, labelsize=arg.textsize, labelcolor=arg.graphcolor)
    ax2.tick_params(axis='y', color=arg.graphcolor ,width=arg.graphthicknes, length=16, labelsize=arg.textsize, labelcolor=arg.graphcolor)
    tmp_ax1.tick_params(axis='y', color=arg.graphcolor ,width=arg.graphthicknes, length=8, labelsize=0) # Label size of 0 disables the fps/frame numbers
    tmp_ax2.tick_params(axis='y', color=arg.graphcolor ,width=arg.graphthicknes, length=8, labelsize=0)


    # Limits Y scale
    ax1.set_ylim(arg.fpsmin,arg.fpsmax + 1)
    ax2.set_ylim(arg.frametimemin,arg.frametimemax + 1)

    # Add an empty plot
    line = ax1.plot([], lw=arg.fpsthickness)
    line2 = ax2.plot([], lw=arg.frametimethickness)

    # Sets all the data for our benchmark
    for benchmarks, color in zip(data_formated, arg.colors):
        y = moving_average([x[0] for x in benchmarks], 25)
        y2 = [x[1] for x in benchmarks]
        x = [x[2] for x in benchmarks]
        line += ax1.plot(x[12:-12],y, c=color, lw=arg.fpsthickness)
        line2 += ax2.step(x,y2, c=color, lw=arg.fpsthickness)
    
    # Add titles with values
    ax1.set_title("Avg. frames per second: {}".format(y2), color=arg.graphcolor, fontsize=20, fontweight='bold', loc='left')
    ax2.set_title("Frametime in ms: {}".format(y2), color=arg.graphcolor, fontsize=20, fontweight='bold', loc='left')  

    # Removes unwanted white space; also controls the space between the two graphs
    plt.tight_layout(pad=0, h_pad=0, w_pad=2.5)
    
    fig.canvas.draw()

    # Cache the background
    axbackground = fig.canvas.copy_from_bbox(ax1.bbox)
    ax2background = fig.canvas.copy_from_bbox(ax2.bbox)


# Create a ffmpeg instance as a subprocess we will pipe the finished frame into ffmpeg
# encoded in Apple QuickTime (qtrle) for small(ish) file size and alpha support
# There are free and opensource types that will also do this but with much larger sizes
canvas_width, canvas_height = fig.canvas.get_width_height()
outf = '{}.mov'.format(arg.output)
cmdstring = ('ffmpeg',
                '-stats', '-hide_banner', '-loglevel', 'error', # Makes ffmpeg less annoying / to much console output
                '-y', '-r', '60', # set the fps of the video
                '-s', '%dx%d' % (canvas_width, canvas_height), # size of image string
                '-pix_fmt', 'argb', # format cant be changed since this is what  `fig.canvas.tostring_argb()` outputs
                '-f', 'rawvideo',  '-i', '-', # tell ffmpeg to expect raw video from the pipe
                '-vcodec', 'qtrle', outf) # output encoding must support alpha channel
pipe = subprocess.Popen(cmdstring, stdin=subprocess.PIPE)

def render_frame(frame : int):

    # Set the bounds of the graph for each frame to render the correct data
    start = (frame * step) - frame_size_fps
    end = start + frame_size_fps
    ax1.set_xlim(start,end)
     
     
    start = (frame * step) - frame_size_frametime
    end = start + frame_size_frametime
    ax2.set_xlim(start,end)
    

    # Restore background
    fig.canvas.restore_region(axbackground)
    fig.canvas.restore_region(ax2background)

    # Redraw just the points will only draw points with in `axes.set_xlim`
    for i in line:
        ax1.draw_artist(i)
        
    for i in line2:
        ax2.draw_artist(i)

    # Fill in the axes rectangle
    fig.canvas.blit(ax1.bbox)
    fig.canvas.blit(ax2.bbox)
    
    fig.canvas.flush_events()

    # Converts the finished frame to ARGB
    string = fig.canvas.tostring_argb()
    return string




#import multiprocessing
#p = multiprocessing.Pool()
#for i, _ in enumerate(p.imap(render_frame, range(0, int(total_frames + max_blocksize))), 20):
#    pipe.stdin.write(_)
#    sys.stderr.write('\rdone {0:%}'.format(i/(total_frames + max_blocksize)))
#p.close()

#Signle Threaded not much slower then multi-threading
if __name__ == "__main__":
    for i , _ in enumerate(range(0, int(total_frames + max_blocksize))):
        render_frame(_)
        pipe.stdin.write(render_frame(_))
        sys.stderr.write('\rdone {0:%}'.format(i/(total_frames + max_blocksize)))


    


  • Decode MP4 h264 RTP Video Stream C++

    26 juin 2022, par laurrrr

    I want to send a mp4 video which is h264 encoded to another C++ Application and get raw video data.

    


    I'm sending rtp packets using ffmpeg using following command :

    


    ffmpeg -re -i video.mp4  -pix_fmt rgb24  -vcodec libx264 -b:v 10506k -bufsize 64000k -r 30.0 -f mp4 -f rtp rtp://192.168.1.101:4500?pkt_size=1316 


    


    and this is ffmpeg output after video has been played :

    


    Output #0, rtp, to 'rtp://192.168.1.101:4500?pkt_size=1316':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.29.100
    Stream #0:0(und): Video: h264 (libx264), yuv444p, 1280x720, q=-1--1, 10506 kb/s, 30 fps, 90k tbn, 30 tbc (default)
    Metadata:
      handler_name    : VideoHandler
      encoder         : Lavc58.54.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/10506000 buffer size: 64000000 vbv_delay: -1
SDP:
v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 192.168.1.101
t=0 0
a=tool:libavformat 58.29.100
m=video 4500 RTP/AVP 96
b=AS:10506
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1

frame= 1802 fps= 24 q=-1.0 Lsize=   78043kB time=00:00:59.96 bitrate=10661.4kbits/s speed=0.793x     
video:77209kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.080008%
[libx264 @ 0x55c75bcc0f00] frame I:8     Avg QP:20.85  size:175353
[libx264 @ 0x55c75bcc0f00] frame P:654   Avg QP:24.51  size: 68884
[libx264 @ 0x55c75bcc0f00] frame B:1140  Avg QP:30.52  size: 28604
[libx264 @ 0x55c75bcc0f00] consecutive B-frames: 12.9%  6.1%  6.7% 74.4%
[libx264 @ 0x55c75bcc0f00] mb I  I16..4: 20.2%  0.0% 79.8%
[libx264 @ 0x55c75bcc0f00] mb P  I16..4:  8.5%  0.0% 16.2%  P16..4: 31.2% 22.3% 11.2%  0.0%  0.0%    skip:10.7%
[libx264 @ 0x55c75bcc0f00] mb B  I16..4:  2.3%  0.0%  3.6%  B16..8: 42.1% 21.3%  6.3%  direct: 5.8%  skip:18.5%  L0:53.9% L1:27.7% BI:18.4%
[libx264 @ 0x55c75bcc0f00] coded y,u,v intra: 63.6% 18.5% 5.0% inter: 36.9% 3.5% 1.3%
[libx264 @ 0x55c75bcc0f00] i16 v,h,dc,p: 23% 30% 25% 22%
[libx264 @ 0x55c75bcc0f00] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 19% 23% 23%  6%  6%  5%  7%  4%  7%
[libx264 @ 0x55c75bcc0f00] Weighted P-Frames: Y:26.3% UV:10.4%
[libx264 @ 0x55c75bcc0f00] ref P L0: 67.4% 18.1% 10.9%  2.9%  0.7%
[libx264 @ 0x55c75bcc0f00] ref B L0: 97.4%  2.1%  0.5%
[libx264 @ 0x55c75bcc0f00] ref B L1: 98.8%  1.2%
[libx264 @ 0x55c75bcc0f00] kb/s:10529.89


    


    On my C++ Application I'm using a 3rd party rtp library for capturing rtp frames and this is what I get during video stream :

    


    TS = 4178129015 | RTP Payload = 96 | SeqNr = 618 | Len = 25
Payload Data : 
67 f4 0 20 91 9b 28 a 0 b7 42 0 0 3 0 2 0 0 3 0 
78 1e 30 63 2c 
TS = 4178129015 | RTP Payload = 96 | SeqNr = 618 | Len = 5
Payload Data : 
68 eb ec 44 80 
TS = 4178129015 | RTP Payload = 96 | SeqNr = 618 | Len = 760
Payload Data : 
6 5 ff ff f4 dc 45 e9 bd e6 d9 48 b7 96 2c d8 20 d9 23 ee 
ef 78 32 36 34 20 2d 20 63 6f 72 65 20 31 35 35 20 72 32 39 
31 37 20 30 61 38 34 64 39 38 20 2d 20 48 2e 32 36 34 2f 4d 
50 45 47 2d 34 20 41 56 43 20 63 6f 64 65 63 20 2d 20 43 6f 
70 79 6c 65 66 74 20 32 30 30 33 2d 32 30 31 38 20 2d 20 68 
74 74 70 3a 2f 2f 77 77 77 2e 76 69 64 65 6f 6c 61 6e 2e 6f 
72 67 2f 78 32 36 34 2e 68 74 6d 6c 20 2d 20 6f 70 74 69 6f 
6e 73 3a 20 63 61 62 61 63 3d 31 20 72 65 66 3d 33 20 64 65 
62 6c 6f 63 6b 3d 31 3a 30 3a 30 20 61 6e 61 6c 79 73 65 3d 
30 78 31 3a 30 78 31 31 31 20 6d 65 3d 68 65 78 20 73 75 62 
6d 65 3d 37 20 70 73 79 3d 31 20 70 73 79 5f 72 64 3d 31 2e 
30 30 3a 30 2e 30 30 20 6d 69 78 65 64 5f 72 65 66 3d 31 20 
6d 65 5f 72 61 6e 67 65 3d 31 36 20 63 68 72 6f 6d 61 5f 6d 
65 3d 31 20 74 72 65 6c 6c 69 73 3d 31 20 38 78 38 64 63 74 
3d 30 20 63 71 6d 3d 30 20 64 65 61 64 7a 6f 6e 65 3d 32 31 
2c 31 31 20 66 61 73 74 5f 70 73 6b 69 70 3d 31 20 63 68 72 
6f 6d 61 5f 71 70 5f 6f 66 66 73 65 74 3d 34 20 74 68 72 65 
61 64 73 3d 36 20 6c 6f 6f 6b 61 68 65 61 64 5f 74 68 72 65 
61 64 73 3d 31 20 73 6c 69 63 65 64 5f 74 68 72 65 61 64 73 
3d 30 20 6e 72 3d 30 20 64 65 63 69 6d 61 74 65 3d 31 20 69 
6e 74 65 72 6c 61 63 65 64 3d 30 20 62 6c 75 72 61 79 5f 63 
6f 6d 70 61 74 3d 30 20 63 6f 6e 73 74 72 61 69 6e 65 64 5f 
69 6e 74 72 61 3d 30 20 62 66 72 61 6d 65 73 3d 33 20 62 5f 
70 79 72 61 6d 69 64 3d 32 20 62 5f 61 64 61 70 74 3d 31 20 
62 5f 62 69 61 73 3d 30 20 64 69 72 65 63 74 3d 31 20 77 65 
69 67 68 74 62 3d 31 20 6f 70 65 6e 5f 67 6f 70 3d 30 20 77 
65 69 67 68 74 70 3d 32 20 6b 65 79 69 6e 74 3d 32 35 30 20 
6b 65 79 69 6e 74 5f 6d 69 6e 3d 32 35 20 73 63 65 6e 65 63 
75 74 3d 34 30 20 69 6e 74 72 61 5f 72 65 66 72 65 73 68 3d 
30 20 72 63 5f 6c 6f 6f 6b 61 68 65 61 64 3d 34 30 20 72 63 
3d 63 62 72 20 6d 62 74 72 65 65 3d 31 20 62 69 74 72 61 74 
65 3d 31 30 35 30 36 20 72 61 74 65 74 6f 6c 3d 31 2e 30 20 
71 63 6f 6d 70 3d 30 2e 36 30 20 71 70 6d 69 6e 3d 30 20 71 
70 6d 61 78 3d 36 39 20 71 70 73 74 65 70 3d 34 20 76 62 76 
5f 6d 61 78 72 61 74 65 3d 31 30 35 30 36 20 76 62 76 5f 62 
75 66 73 69 7a 65 3d 36 34 30 30 30 20 6e 61 6c 5f 68 72 64 
3d 6e 6f 6e 65 20 66 69 6c 6c 65 72 3d 30 20 69 70 5f 72 61 
74 69 6f 3d 31 2e 34 30 20 61 71 3d 31 3a 31 2e 30 30 0 80 
[rtplib][rtpPkt_Handler]Found a key frame at ts 4178129015

TS = 4178129015 | RTP Payload = 96 | SeqNr = 775 | Len = 203612
TS = 4178141015 | RTP Payload = 96 | SeqNr = 930 | Len = 201080
TS = 4178135015 | RTP Payload = 96 | SeqNr = 1021 | Len = 118373
TS = 4178132015 | RTP Payload = 96 | SeqNr = 1055 | Len = 44227
TS = 4178138015 | RTP Payload = 96 | SeqNr = 1102 | Len = 60864
TS = 4178153015 | RTP Payload = 96 | SeqNr = 1255 | Len = 198229
TS = 4178147015 | RTP Payload = 96 | SeqNr = 1350 | Len = 123610
TS = 4178144015 | RTP Payload = 96 | SeqNr = 1396 | Len = 59191
TS = 4178150015 | RTP Payload = 96 | SeqNr = 1442 | Len = 58868
TS = 4178165015 | RTP Payload = 96 | SeqNr = 1551 | Len = 141741
TS = 4178159015 | RTP Payload = 96 | SeqNr = 1614 | Len = 81817
TS = 4178156015 | RTP Payload = 96 | SeqNr = 1648 | Len = 43884
TS = 4178162015 | RTP Payload = 96 | SeqNr = 1681 | Len = 42230
TS = 4178177015 | RTP Payload = 96 | SeqNr = 1755 | Len = 95284
TS = 4178171015 | RTP Payload = 96 | SeqNr = 1792 | Len = 47881
TS = 4178168015 | RTP Payload = 96 | SeqNr = 1814 | Len = 28005
TS = 4178174015 | RTP Payload = 96 | SeqNr = 1834 | Len = 25660
TS = 4178189015 | RTP Payload = 96 | SeqNr = 1904 | Len = 90654
TS = 4178183015 | RTP Payload = 96 | SeqNr = 1939 | Len = 45065
TS = 4178180015 | RTP Payload = 96 | SeqNr = 1959 | Len = 25709
TS = 4178186015 | RTP Payload = 96 | SeqNr = 1978 | Len = 23450
TS = 4178201015 | RTP Payload = 96 | SeqNr = 2049 | Len = 91892
TS = 4178195015 | RTP Payload = 96 | SeqNr = 2084 | Len = 45078
TS = 4178192015 | RTP Payload = 96 | SeqNr = 2105 | Len = 26696
TS = 4178198015 | RTP Payload = 96 | SeqNr = 2124 | Len = 23850
TS = 4178213015 | RTP Payload = 96 | SeqNr = 2190 | Len = 85902
TS = 4178207015 | RTP Payload = 96 | SeqNr = 2224 | Len = 43719
TS = 4178204015 | RTP Payload = 96 | SeqNr = 2243 | Len = 24694
TS = 4178210015 | RTP Payload = 96 | SeqNr = 2262 | Len = 23765
TS = 4178225015 | RTP Payload = 96 | SeqNr = 2343 | Len = 104406
TS = 4178219015 | RTP Payload = 96 | SeqNr = 2392 | Len = 63009
TS = 4178216015 | RTP Payload = 96 | SeqNr = 2416 | Len = 31117
TS = 4178222015 | RTP Payload = 96 | SeqNr = 2434 | Len = 22376
TS = 4178237015 | RTP Payload = 96 | SeqNr = 2504 | Len = 90636
TS = 4178231015 | RTP Payload = 96 | SeqNr = 2538 | Len = 43938
TS = 4178228015 | RTP Payload = 96 | SeqNr = 2558 | Len = 25073
TS = 4178234015 | RTP Payload = 96 | SeqNr = 2577 | Len = 24516
TS = 4178249015 | RTP Payload = 96 | SeqNr = 2646 | Len = 88641
TS = 4178243015 | RTP Payload = 96 | SeqNr = 2681 | Len = 45242
TS = 4178240015 | RTP Payload = 96 | SeqNr = 2702 | Len = 26106
TS = 4178246015 | RTP Payload = 96 | SeqNr = 2721 | Len = 24228
TS = 4178261015 | RTP Payload = 96 | SeqNr = 2790 | Len = 89584
TS = 4178255015 | RTP Payload = 96 | SeqNr = 2826 | Len = 45774
TS = 4178252015 | RTP Payload = 96 | SeqNr = 2846 | Len = 25992
TS = 4178258015 | RTP Payload = 96 | SeqNr = 2865 | Len = 24716
TS = 4178273015 | RTP Payload = 96 | SeqNr = 2934 | Len = 89608
TS = 4178267015 | RTP Payload = 96 | SeqNr = 2971 | Len = 46979
TS = 4178264015 | RTP Payload = 96 | SeqNr = 2992 | Len = 27101
TS = 4178270015 | RTP Payload = 96 | SeqNr = 3012 | Len = 25055
TS = 4178285015 | RTP Payload = 96 | SeqNr = 3080 | Len = 87833
TS = 4178279015 | RTP Payload = 96 | SeqNr = 3116 | Len = 45751
TS = 4178276015 | RTP Payload = 96 | SeqNr = 3137 | Len = 26313
TS = 4178282015 | RTP Payload = 96 | SeqNr = 3156 | Len = 24665
TS = 4178291015 | RTP Payload = 96 | SeqNr = 3208 | Len = 66681
TS = 4178288015 | RTP Payload = 96 | SeqNr = 3229 | Len = 26074
TS = 4178303015 | RTP Payload = 96 | SeqNr = 3299 | Len = 90940
TS = 4178297015 | RTP Payload = 96 | SeqNr = 3337 | Len = 48731
TS = 4178294015 | RTP Payload = 96 | SeqNr = 3369 | Len = 41596
TS = 4178300015 | RTP Payload = 96 | SeqNr = 3390 | Len = 26159
TS = 4178315015 | RTP Payload = 96 | SeqNr = 3465 | Len = 96905
TS = 4178309015 | RTP Payload = 96 | SeqNr = 3511 | Len = 58885
TS = 4178306015 | RTP Payload = 96 | SeqNr = 3532 | Len = 26598
TS = 4178312015 | RTP Payload = 96 | SeqNr = 3550 | Len = 22520
TS = 4178327015 | RTP Payload = 96 | SeqNr = 3614 | Len = 82414
TS = 4178321015 | RTP Payload = 96 | SeqNr = 3648 | Len = 43939
TS = 4178318015 | RTP Payload = 96 | SeqNr = 3668 | Len = 25528
TS = 4178324015 | RTP Payload = 96 | SeqNr = 3686 | Len = 23091
TS = 4178339015 | RTP Payload = 96 | SeqNr = 3751 | Len = 84627
TS = 4178333015 | RTP Payload = 96 | SeqNr = 3785 | Len = 43869
TS = 4178330015 | RTP Payload = 96 | SeqNr = 3806 | Len = 26256
TS = 4178336015 | RTP Payload = 96 | SeqNr = 3825 | Len = 24184
TS = 4178351015 | RTP Payload = 96 | SeqNr = 3890 | Len = 83748
TS = 4178345015 | RTP Payload = 96 | SeqNr = 3924 | Len = 43836
TS = 4178342015 | RTP Payload = 96 | SeqNr = 3945 | Len = 26086
TS = 4178348015 | RTP Payload = 96 | SeqNr = 3963 | Len = 23001
TS = 4178363015 | RTP Payload = 96 | SeqNr = 4028 | Len = 84626
TS = 4178357015 | RTP Payload = 96 | SeqNr = 4063 | Len = 44595
TS = 4178354015 | RTP Payload = 96 | SeqNr = 4083 | Len = 25859
TS = 4178360015 | RTP Payload = 96 | SeqNr = 4101 | Len = 22622
TS = 4178375015 | RTP Payload = 96 | SeqNr = 4161 | Len = 78088
TS = 4178369015 | RTP Payload = 96 | SeqNr = 4195 | Len = 44047
TS = 4178366015 | RTP Payload = 96 | SeqNr = 4214 | Len = 24542
TS = 4178372015 | RTP Payload = 96 | SeqNr = 4232 | Len = 22894
TS = 4178381015 | RTP Payload = 96 | SeqNr = 4276 | Len = 56471
TS = 4178378015 | RTP Payload = 96 | SeqNr = 4295 | Len = 24404
TS = 4178384015 | RTP Payload = 96 | SeqNr = 4353 | Len = 75515
TS = 4178396015 | RTP Payload = 96 | SeqNr = 4415 | Len = 79455
TS = 4178390015 | RTP Payload = 96 | SeqNr = 4452 | Len = 47364
TS = 4178387015 | RTP Payload = 96 | SeqNr = 4474 | Len = 27695
TS = 4178393015 | RTP Payload = 96 | SeqNr = 4495 | Len = 27081
TS = 4178408015 | RTP Payload = 96 | SeqNr = 4569 | Len = 95325
TS = 4178402015 | RTP Payload = 96 | SeqNr = 4615 | Len = 59411
TS = 4178399015 | RTP Payload = 96 | SeqNr = 4647 | Len = 41437
TS = 4178405015 | RTP Payload = 96 | SeqNr = 4669 | Len = 28354
TS = 4178414015 | RTP Payload = 96 | SeqNr = 4720 | Len = 65840
TS = 4178411015 | RTP Payload = 96 | SeqNr = 4747 | Len = 34226
TS = 4178420015 | RTP Payload = 96 | SeqNr = 4802 | Len = 71528
TS = 4178417015 | RTP Payload = 96 | SeqNr = 4823 | Len = 26761
TS = 4178432015 | RTP Payload = 96 | SeqNr = 4888 | Len = 83339
TS = 4178426015 | RTP Payload = 96 | SeqNr = 4920 | Len = 40835
TS = 4178423015 | RTP Payload = 96 | SeqNr = 4939 | Len = 23688
TS = 4178429015 | RTP Payload = 96 | SeqNr = 4956 | Len = 21807
TS = 4178444015 | RTP Payload = 96 | SeqNr = 5022 | Len = 85391
TS = 4178438015 | RTP Payload = 96 | SeqNr = 5054 | Len = 41269
TS = 4178435015 | RTP Payload = 96 | SeqNr = 5073 | Len = 24672
TS = 4178441015 | RTP Payload = 96 | SeqNr = 5090 | Len = 21854
TS = 4178456015 | RTP Payload = 96 | SeqNr = 5154 | Len = 83320
TS = 4178450015 | RTP Payload = 96 | SeqNr = 5187 | Len = 42363
TS = 4178447015 | RTP Payload = 96 | SeqNr = 5206 | Len = 24737
TS = 4178453015 | RTP Payload = 96 | SeqNr = 5223 | Len = 22089
TS = 4178468015 | RTP Payload = 96 | SeqNr = 5282 | Len = 76070
TS = 4178462015 | RTP Payload = 96 | SeqNr = 5315 | Len = 42528
TS = 4178459015 | RTP Payload = 96 | SeqNr = 5334 | Len = 24044
TS = 4178465015 | RTP Payload = 96 | SeqNr = 5352 | Len = 23265
TS = 4178471015 | RTP Payload = 96 | SeqNr = 5412 | Len = 77301
TS = 4178483015 | RTP Payload = 96 | SeqNr = 5478 | Len = 85933
TS = 4178477015 | RTP Payload = 96 | SeqNr = 5515 | Len = 47230
TS = 4178474015 | RTP Payload = 96 | SeqNr = 5535 | Len = 25610
TS = 4178480015 | RTP Payload = 96 | SeqNr = 5552 | Len = 22000
TS = 4178495015 | RTP Payload = 96 | SeqNr = 5625 | Len = 94404
TS = 4178489015 | RTP Payload = 96 | SeqNr = 5675 | Len = 64617
TS = 4178486015 | RTP Payload = 96 | SeqNr = 5696 | Len = 26179
TS = 4178492015 | RTP Payload = 96 | SeqNr = 5714 | Len = 22167
TS = 4178507015 | RTP Payload = 96 | SeqNr = 5777 | Len = 80743
TS = 4178501015 | RTP Payload = 96 | SeqNr = 5812 | Len = 45236
TS = 4178498015 | RTP Payload = 96 | SeqNr = 5835 | Len = 28904
TS = 4178504015 | RTP Payload = 96 | SeqNr = 5854 | Len = 24198
TS = 4178513015 | RTP Payload = 96 | SeqNr = 5899 | Len = 57574
TS = 4178510015 | RTP Payload = 96 | SeqNr = 5919 | Len = 25511
TS = 4178516015 | RTP Payload = 96 | SeqNr = 5964 | Len = 58529
TS = 4178528015 | RTP Payload = 96 | SeqNr = 6019 | Len = 70689
TS = 4178522015 | RTP Payload = 96 | SeqNr = 6045 | Len = 33240
TS = 4178519015 | RTP Payload = 96 | SeqNr = 6060 | Len = 19501
TS = 4178525015 | RTP Payload = 96 | SeqNr = 6075 | Len = 19503
TS = 4178540015 | RTP Payload = 96 | SeqNr = 6135 | Len = 77926
TS = 4178534015 | RTP Payload = 96 | SeqNr = 6163 | Len = 35622
TS = 4178531015 | RTP Payload = 96 | SeqNr = 6181 | Len = 22316
TS = 4178537015 | RTP Payload = 96 | SeqNr = 6196 | Len = 19279
TS = 4178552015 | RTP Payload = 96 | SeqNr = 6257 | Len = 78483
TS = 4178546015 | RTP Payload = 96 | SeqNr = 6286 | Len = 37405
TS = 4178543015 | RTP Payload = 96 | SeqNr = 6303 | Len = 22036
TS = 4178549015 | RTP Payload = 96 | SeqNr = 6319 | Len = 19656
TS = 4178564015 | RTP Payload = 96 | SeqNr = 6379 | Len = 78060
TS = 4178558015 | RTP Payload = 96 | SeqNr = 6408 | Len = 37508
TS = 4178555015 | RTP Payload = 96 | SeqNr = 6426 | Len = 22218
TS = 4178561015 | RTP Payload = 96 | SeqNr = 6441 | Len = 18979
TS = 4178576015 | RTP Payload = 96 | SeqNr = 6500 | Len = 75989
TS = 4178570015 | RTP Payload = 96 | SeqNr = 6530 | Len = 38004
TS = 4178567015 | RTP Payload = 96 | SeqNr = 6547 | Len = 21787
TS = 4178573015 | RTP Payload = 96 | SeqNr = 6562 | Len = 18969
TS = 4178588015 | RTP Payload = 96 | SeqNr = 6627 | Len = 83366
TS = 4178582015 | RTP Payload = 96 | SeqNr = 6663 | Len = 46304
TS = 4178579015 | RTP Payload = 96 | SeqNr = 6684 | Len = 26835
TS = 4178585015 | RTP Payload = 96 | SeqNr = 6699 | Len = 19021
TS = 4178594015 | RTP Payload = 96 | SeqNr = 6752 | Len = 68186
TS = 4178591015 | RTP Payload = 96 | SeqNr = 6771 | Len = 24380
TS = 4178600015 | RTP Payload = 96 | SeqNr = 6831 | Len = 77136
TS = 4178597015 | RTP Payload = 96 | SeqNr = 6850 | Len = 24150
TS = 4178612015 | RTP Payload = 96 | SeqNr = 6922 | Len = 93448
TS = 4178606015 | RTP Payload = 96 | SeqNr = 6957 | Len = 44424
TS = 4178603015 | RTP Payload = 96 | SeqNr = 6978 | Len = 26159
TS = 4178609015 | RTP Payload = 96 | SeqNr = 6996 | Len = 22294
TS = 4178624015 | RTP Payload = 96 | SeqNr = 7068 | Len = 92843
TS = 4178618015 | RTP Payload = 96 | SeqNr = 7103 | Len = 44945
TS = 4178615015 | RTP Payload = 96 | SeqNr = 7123 | Len = 25716
TS = 4178621015 | RTP Payload = 96 | SeqNr = 7141 | Len = 23051
TS = 4178633015 | RTP Payload = 96 | SeqNr = 7202 | Len = 79105
TS = 4178627015 | RTP Payload = 96 | SeqNr = 7226 | Len = 31208
TS = 4178630015 | RTP Payload = 96 | SeqNr = 7245 | Len = 24539
TS = 4178645015 | RTP Payload = 96 | SeqNr = 7318 | Len = 94486
TS = 4178639015 | RTP Payload = 96 | SeqNr = 7354 | Len = 46353
TS = 4178636015 | RTP Payload = 96 | SeqNr = 7376 | Len = 27837
TS = 4178642015 | RTP Payload = 96 | SeqNr = 7391 | Len = 18464
TS = 4178657015 | RTP Payload = 96 | SeqNr = 7459 | Len = 87444
TS = 4178651015 | RTP Payload = 96 | SeqNr = 7492 | Len = 42915
TS = 4178648015 | RTP Payload = 96 | SeqNr = 7511 | Len = 24244
TS = 4178654015 | RTP Payload = 96 | SeqNr = 7529 | Len = 22765
TS = 4178669015 | RTP Payload = 96 | SeqNr = 7614 | Len = 109811
TS = 4178663015 | RTP Payload = 96 | SeqNr = 7654 | Len = 51149
TS = 4178660015 | RTP Payload = 96 | SeqNr = 7674 | Len = 25790
TS = 4178666015 | RTP Payload = 96 | SeqNr = 7698 | Len = 30557
TS = 4178681015 | RTP Payload = 96 | SeqNr = 7775 | Len = 100006
TS = 4178675015 | RTP Payload = 96 | SeqNr = 7818 | Len = 55775
TS = 4178672015 | RTP Payload = 96 | SeqNr = 7836 | Len = 22547
TS = 4178678015 | RTP Payload = 96 | SeqNr = 7861 | Len = 31820
TS = 4178687015 | RTP Payload = 96 | SeqNr = 7918 | Len = 74185
TS = 4178684015 | RTP Payload = 96 | SeqNr = 7939 | Len = 26901
TS = 4178696015 | RTP Payload = 96 | SeqNr = 8012 | Len = 94094
TS = 4178690015 | RTP Payload = 96 | SeqNr = 8043 | Len = 39379
TS = 4178693015 | RTP Payload = 96 | SeqNr = 8064 | Len = 26557
TS = 4178708015 | RTP Payload = 96 | SeqNr = 8149 | Len = 109681
TS = 4178702015 | RTP Payload = 96 | SeqNr = 8192 | Len = 54915
TS = 4178699015 | RTP Payload = 96 | SeqNr = 8216 | Len = 30514
TS = 4178705015 | RTP Payload = 96 | SeqNr = 8238 | Len = 27367
TS = 4178717015 | RTP Payload = 96 | SeqNr = 8308 | Len = 90131
TS = 4178711015 | RTP Payload = 96 | SeqNr = 8334 | Len = 32961
TS = 4178714015 | RTP Payload = 96 | SeqNr = 8355 | Len = 27081
TS = 4178729015 | RTP Payload = 96 | SeqNr = 8437 | Len = 106749
TS = 4178723015 | RTP Payload = 96 | SeqNr = 8478 | Len = 52274
TS = 4178720015 | RTP Payload = 96 | SeqNr = 8502 | Len = 30586
TS = 4178726015 | RTP Payload = 96 | SeqNr = 8524 | Len = 28276
TS = 4178738015 | RTP Payload = 96 | SeqNr = 8603 | Len = 101756
TS = 4178732015 | RTP Payload = 96 | SeqNr = 8632 | Len = 37331
TS = 4178735015 | RTP Payload = 96 | SeqNr = 8657 | Len = 31258
TS = 4178747015 | RTP Payload = 96 | SeqNr = 8736 | Len = 102742
TS = 4178741015 | RTP Payload = 96 | SeqNr = 8768 | Len = 41296
TS = 4178744015 | RTP Payload = 96 | SeqNr = 8794 | Len = 32827
TS = 4178750015 | RTP Payload = 96 | SeqNr = 8828 | Len = 43353
TS = 4178759015 | RTP Payload = 96 | SeqNr = 8932 | Len = 134339
TS = 4178753015 | RTP Payload = 96 | SeqNr = 8965 | Len = 42271
TS = 4178756015 | RTP Payload = 96 | SeqNr = 8992 | Len = 34494
TS = 4178771015 | RTP Payload = 96 | SeqNr = 9082 | Len = 117077
TS = 4178765015 | RTP Payload = 96 | SeqNr = 9132 | Len = 64136
TS = 4178762015 | RTP Payload = 96 | SeqNr = 9157 | Len = 31835
TS = 4178768015 | RTP Payload = 96 | SeqNr = 9183 | Len = 32990
TS = 4178774015 | RTP Payload = 96 | SeqNr = 9223 | Len = 51844
TS = 4178777015 | RTP Payload = 96 | SeqNr = 9263 | Len = 51143
TS = 4178789015 | RTP Payload = 96 | SeqNr = 9353 | Len = 116785
TS = 4178783015 | RTP Payload = 96 | SeqNr = 9405 | Len = 66992
TS = 4178780015 | RTP Payload = 96 | SeqNr = 9436 | Len = 39209
TS = 4178786015 | RTP Payload = 96 | SeqNr = 9462 | Len = 33617
TS = 4178801015 | RTP Payload = 96 | SeqNr = 9553 | Len = 117615
TS = 4178795015 | RTP Payload = 96 | SeqNr = 9605 | Len = 66893
TS = 4178792015 | RTP Payload = 96 | SeqNr = 9634 | Len = 37267
TS = 4178798015 | RTP Payload = 96 | SeqNr = 9662 | Len = 35443
TS = 4178813015 | RTP Payload = 96 | SeqNr = 9749 | Len = 112092
TS = 4178807015 | RTP Payload = 96 | SeqNr = 9797 | Len = 61440
TS = 4178804015 | RTP Payload = 96 | SeqNr = 9825 | Len = 36268
TS = 4178810015 | RTP Payload = 96 | SeqNr = 9853 | Len = 35378
TS = 4178825015 | RTP Payload = 96 | SeqNr = 9943 | Len = 116165
TS = 4178819015 | RTP Payload = 96 | SeqNr = 9994 | Len = 65623
TS = 4178816015 | RTP Payload = 96 | SeqNr = 10022 | Len = 36234
TS = 4178822015 | RTP Payload = 96 | SeqNr = 10051 | Len = 36878
TS = 4178837015 | RTP Payload = 96 | SeqNr = 10140 | Len = 115073
TS = 4178831015 | RTP Payload = 96 | SeqNr = 10192 | Len = 66763
TS = 4178828015 | RTP Payload = 96 | SeqNr = 10218 | Len = 33436
TS = 4178834015 | RTP Payload = 96 | SeqNr = 10244 | Len = 33796
TS = 4178849015 | RTP Payload = 96 | SeqNr = 10341 | Len = 125177
TS = 4178843015 | RTP Payload = 96 | SeqNr = 10401 | Len = 77900
TS = 4178840015 | RTP Payload = 96 | SeqNr = 10429 | Len = 35232
TS = 4178846015 | RTP Payload = 96 | SeqNr = 10459 | Len = 38179
TS = 4178858015 | RTP Payload = 96 | SeqNr = 10535 | Len = 98892
TS = 4178852015 | RTP Payload = 96 | SeqNr = 10563 | Len = 35531
TS = 4178855015 | RTP Payload = 96 | SeqNr = 10596 | Len = 41990
TS = 4178864015 | RTP Payload = 96 | SeqNr = 10665 | Len = 88820
TS = 4178861015 | RTP Payload = 96 | SeqNr = 10704 | Len = 49955
TS = 4178867015 | RTP Payload = 96 | SeqNr = 10762 | Len = 74508
TS = 4178870015 | RTP Payload = 96 | SeqNr = 10803 | Len = 52987
TS = 4178876015 | RTP Payload = 96 | SeqNr = 10860 | Len = 73161
TS = 4178873015 | RTP Payload = 96 | SeqNr = 10893 | Len = 42383
TS = 4178879015 | RTP Payload = 96 | SeqNr = 10894 | Len = 25
Payload Data : 
67 f4 0 20 91 9b 28 a 0 b7 42 0 0 3 0 2 0 0 3 0 
78 1e 30 63 2c 
TS = 4178879015 | RTP Payload = 96 | SeqNr = 10894 | Len = 5
Payload Data : 
68 eb ec 44 80 
TS = 4178879015 | RTP Payload = 96 | SeqNr = 11034 | Len = 182277

...
TS = 4179620015 | RTP Payload = 96 | SeqNr = 19953 | Len = 17574
TS = 4179626015 | RTP Payload = 96 | SeqNr = 19954 | Len = 25
Payload Data : 
67 f4 0 20 91 9b 28 a 0 b7 42 0 0 3 0 2 0 0 3 0 
78 1e 30 63 2c 
TS = 4179626015 | RTP Payload = 96 | SeqNr = 19954 | Len = 5
Payload Data : 
68 eb ec 44 80 
TS = 4179626015 | RTP Payload = 96 | SeqNr = 20034 | Len = 103235
TS = 4179638015 | RTP Payload = 96 | SeqNr = 20099 | Len = 83915
TS = 4179632015 | RTP Payload = 96 | SeqNr = 20136 | Len = 47878
...
TS = 4180367015 | RTP Payload = 96 | SeqNr = 28375 | Len = 74904
TS = 4180364015 | RTP Payload = 96 | SeqNr = 28397 | Len = 28493
TS = 4180373015 | RTP Payload = 96 | SeqNr = 28439 | Len = 54554
TS = 4180370015 | RTP Payload = 96 | SeqNr = 28459 | Len = 25420
TS = 4180376015 | RTP Payload = 96 | SeqNr = 28460 | Len = 25
Payload Data : 
67 f4 0 20 91 9b 28 a 0 b7 42 0 0 3 0 2 0 0 3 0 
78 1e 30 63 2c 
TS = 4180376015 | RTP Payload = 96 | SeqNr = 28460 | Len = 5
Payload Data : 
68 eb ec 44 80 
TS = 4180376015 | RTP Payload = 96 | SeqNr = 28560 | Len = 129431
TS = 4180388015 | RTP Payload = 96 | SeqNr = 28630 | Len = 90901
TS = 4180382015 | RTP Payload = 96 | SeqNr = 28675 | Len = 57964
TS = 4180379015 | RTP Payload = 96 | SeqNr = 28703 | Len = 35260
...
TS = 4183529015 | RTP Payload = 96 | SeqNr = 62224 | Len = 34771

Total Bytes Received = 79054651
Total Packets  = 1819


    


    After streaming starts I get 1 rtp packet len 25 , 1 rtp packet len 5 and 1 rtp packet len 760. After I received the packet with len 760 I get this message :

    


    [rtplib][rtpPkt_Handler]Found a key frame at ts 4178129015


    


    Can someone please explain to me what this rtp messages with len 25,5 and 760 means and what key frame means in this context ?

    


    Also I have rtp packets of size 5 and 25 in the middle of transmission.

    


    As you can see ffmpeg is saying 1802 frames were sent and Total packets received in C++ Application is 1819 because I receive 8 rtp packets of len 25, 8 rtp packets of len 5 and 1 rtp packet of size 760. If we substract this, it's exactly 1802 frames.

    


    My questions would be :

    


    How to get frame raw pixel data based on rtp packets payload data I receive ? eg. 1280x720 3 Channels ( thats the mp4 video resolution )

    


    Can someone tell me what those packets of len 25,5,760 on the beggining means and packets of len 25,5 in the middle of transmission means ?

    


    Thanks in advance !!!