Recherche avancée

Médias (2)

Mot : - Tags -/kml

Autres articles (25)

  • Librairies et logiciels spécifiques aux médias

    10 décembre 2010, par

    Pour un fonctionnement correct et optimal, plusieurs choses sont à prendre en considération.
    Il est important, après avoir installé apache2, mysql et php5, d’installer d’autres logiciels nécessaires dont les installations sont décrites dans les liens afférants. Un ensemble de librairies multimedias (x264, libtheora, libvpx) utilisées pour l’encodage et le décodage des vidéos et sons afin de supporter le plus grand nombre de fichiers possibles. Cf. : ce tutoriel ; FFMpeg avec le maximum de décodeurs et (...)

  • MediaSPIP v0.2

    21 juin 2013, par

    MediaSPIP 0.2 is the first MediaSPIP stable release.
    Its official release date is June 21, 2013 and is announced here.
    The zip file provided here only contains the sources of MediaSPIP in its standalone version.
    To get a working installation, you must manually install all-software dependencies on the server.
    If you want to use this archive for an installation in "farm mode", you will also need to proceed to other manual (...)

  • Pas question de marché, de cloud etc...

    10 avril 2011

    Le vocabulaire utilisé sur ce site essaie d’éviter toute référence à la mode qui fleurit allègrement
    sur le web 2.0 et dans les entreprises qui en vivent.
    Vous êtes donc invité à bannir l’utilisation des termes "Brand", "Cloud", "Marché" etc...
    Notre motivation est avant tout de créer un outil simple, accessible à pour tout le monde, favorisant
    le partage de créations sur Internet et permettant aux auteurs de garder une autonomie optimale.
    Aucun "contrat Gold ou Premium" n’est donc prévu, aucun (...)

Sur d’autres sites (6570)

  • TCP connection refused with FFMPEG

    2 février 2017, par Samul

    OFFICIAL EDIT :

    I thank you so much for your help but I am still encountering problems.

    My ffserver.conf file is like this :

    # Port on which the server is listening. You must select a different
    # port from your standard HTTP web server if it is running on the same
    # computer.
    HTTPPort 8090

    # Address on which the server is bound. Only useful if you have
    # several network interfaces.
    HTTPBindAddress 0.0.0.0

    # Number of simultaneous HTTP connections that can be handled. It has
    # to be defined *before* the MaxClients parameter, since it defines the
    # MaxClients maximum limit.
    MaxHTTPConnections 2000

    # Number of simultaneous requests that can be handled. Since FFServer
    # is very fast, it is more likely that you will want to leave this high
    # and use MaxBandwidth, below.
    MaxClients 1000

    # This the maximum amount of kbit/sec that you are prepared to
    # consume when streaming to clients.
    MaxBandwidth 1000

    # Access log file (uses standard Apache log file format)
    # '-' is the standard output.
    CustomLog -

    ##################################################################
    # Definition of the live feeds. Each live feed contains one video
    # and/or audio sequence coming from an ffmpeg encoder or another
    # ffserver. This sequence may be encoded simultaneously with several
    # codecs at several resolutions.

    <feed>

    # You must use 'ffmpeg' to send a live feed to ffserver. In this
    # example, you can type:
    #
    # ffmpeg http://localhost:8090/feed1.ffm

    # ffserver can also do time shifting. It means that it can stream any
    # previously recorded live stream. The request should contain:
    # "http://xxxx?date=[YYYY-MM-DDT][[HH:]MM:]SS[.m...]".You must specify
    # a path where the feed is stored on disk. You also specify the
    # maximum size of the feed, where zero means unlimited. Default:
    # File=/tmp/feed_name.ffm FileMaxSize=5M
    File /tmp/feed1.ffm
    FileMaxSize 200K

    # You could specify
    # ReadOnlyFile /saved/specialvideo.ffm
    # This marks the file as readonly and it will not be deleted or updated.

    # Specify launch in order to start ffmpeg automatically.
    # First ffmpeg must be defined with an appropriate path if needed,
    # after that options can follow, but avoid adding the http:// field
    #Launch ffmpeg

    # Only allow connections from localhost to the feed.
    #ACL allow 127.0.0.1
    #ACL allow 189.34.0.158
    </feed>


    ##################################################################
    # Now you can define each stream which will be generated from the
    # original audio and video stream. Each format has a filename (here
    # 'test1.mpg'). FFServer will send this stream when answering a
    # request containing this filename.

    <stream>

    # coming from live feed 'feed1'
    Feed feed1.ffm

    # Format of the stream : you can choose among:
    # mpeg       : MPEG-1 multiplexed video and audio
    # mpegvideo  : only MPEG-1 video
    # mp2        : MPEG-2 audio (use AudioCodec to select layer 2 and 3 codec)
    # ogg        : Ogg format (Vorbis audio codec)
    # rm         : RealNetworks-compatible stream. Multiplexed audio and video.
    # ra         : RealNetworks-compatible stream. Audio only.
    # mpjpeg     : Multipart JPEG (works with Netscape without any plugin)
    # jpeg       : Generate a single JPEG image.
    # asf        : ASF compatible streaming (Windows Media Player format).
    # swf        : Macromedia Flash compatible stream
    # avi        : AVI format (MPEG-4 video, MPEG audio sound)
    Format mpeg

    # Bitrate for the audio stream. Codecs usually support only a few
    # different bitrates.
    AudioBitRate 32

    # Number of audio channels: 1 = mono, 2 = stereo
    AudioChannels 1

    # Sampling frequency for audio. When using low bitrates, you should
    # lower this frequency to 22050 or 11025. The supported frequencies
    # depend on the selected audio codec.
    AudioSampleRate 44100

    # Bitrate for the video stream
    VideoBitRate 64

    # Ratecontrol buffer size
    VideoBufferSize 40

    # Number of frames per second
    VideoFrameRate 3

    # Size of the video frame: WxH (default: 160x128)
    # The following abbreviations are defined: sqcif, qcif, cif, 4cif, qqvga,
    # qvga, vga, svga, xga, uxga, qxga, sxga, qsxga, hsxga, wvga, wxga, wsxga,
    # wuxga, woxga, wqsxga, wquxga, whsxga, whuxga, cga, ega, hd480, hd720,
    # hd1080
    VideoSize 160x128

    # Transmit only intra frames (useful for low bitrates, but kills frame rate).
    #VideoIntraOnly

    # If non-intra only, an intra frame is transmitted every VideoGopSize
    # frames. Video synchronization can only begin at an intra frame.
    VideoGopSize 12

    # More MPEG-4 parameters
    # VideoHighQuality
    # Video4MotionVector

    # Choose your codecs:
    #AudioCodec mp2
    #VideoCodec mpeg1video

    # Suppress audio
    #NoAudio

    # Suppress video
    #NoVideo

    #VideoQMin 3
    #VideoQMax 31

    # Set this to the number of seconds backwards in time to start. Note that
    # most players will buffer 5-10 seconds of video, and also you need to allow
    # for a keyframe to appear in the data stream.
    #Preroll 15

    # ACL:

    # You can allow ranges of addresses (or single addresses)
    #ACL ALLOW <first address="address"> <last address="address">

    # You can deny ranges of addresses (or single addresses)
    #ACL DENY <first address="address"> <last address="address">

    # You can repeat the ACL allow/deny as often as you like. It is on a per
    # stream basis. The first match defines the action. If there are no matches,
    # then the default is the inverse of the last ACL statement.
    #
    # Thus 'ACL allow localhost' only allows access from localhost.
    # 'ACL deny 1.0.0.0 1.255.255.255' would deny the whole of network 1 and
    # allow everybody else.

    </last></first></last></first></stream>


    ##################################################################
    # Example streams


    # Multipart JPEG

    #<stream>
    #Feed feed1.ffm
    #Format mpjpeg
    #VideoFrameRate 2
    #VideoIntraOnly
    #NoAudio
    #Strict -1
    #</stream>


    # Single JPEG

    #<stream>
    #Feed feed1.ffm
    #Format jpeg
    #VideoFrameRate 2
    #VideoIntraOnly
    ##VideoSize 352x240
    #NoAudio
    #Strict -1
    #</stream>


    # Flash

    #<stream>
    #Feed feed1.ffm
    #Format swf
    #VideoFrameRate 2
    #VideoIntraOnly
    #NoAudio
    #</stream>


    # ASF compatible

    <stream>
    Feed feed1.ffm
    Format asf
    VideoFrameRate 15
    VideoSize 352x240
    VideoBitRate 256
    VideoBufferSize 40
    VideoGopSize 30
    AudioBitRate 64
    StartSendOnKey
    </stream>


    # MP3 audio

    #<stream>
    #Feed feed1.ffm
    #Format mp2
    #AudioCodec mp3
    #AudioBitRate 64
    #AudioChannels 1
    #AudioSampleRate 44100
    #NoVideo
    #</stream>


    # Ogg Vorbis audio

    #<stream>
    #Feed feed1.ffm
    #Metadata title "Stream title"
    #AudioBitRate 64
    #AudioChannels 2
    #AudioSampleRate 44100
    #NoVideo
    #</stream>


    # Real with audio only at 32 kbits

    #<stream>
    #Feed feed1.ffm
    #Format rm
    #AudioBitRate 32
    #NoVideo
    #NoAudio
    #</stream>


    # Real with audio and video at 64 kbits

    #<stream>
    #Feed feed1.ffm
    #Format rm
    #AudioBitRate 32
    #VideoBitRate 128
    #VideoFrameRate 25
    #VideoGopSize 25
    #NoAudio
    #</stream>


    ##################################################################
    # A stream coming from a file: you only need to set the input
    # filename and optionally a new format. Supported conversions:
    #    AVI -> ASF

    #<stream>
    #File "/usr/local/httpd/htdocs/tlive.rm"
    #NoAudio
    #</stream>

    #<stream>
    #File "/usr/local/httpd/htdocs/test.asf"
    #NoAudio
    #Metadata author "Me"
    #Metadata copyright "Super MegaCorp"
    #Metadata title "Test stream from disk"
    #Metadata comment "Test comment"
    #</stream>


    ##################################################################
    # RTSP examples
    #
    # You can access this stream with the RTSP URL:
    #   rtsp://localhost:5454/test1-rtsp.mpg
    #
    # A non-standard RTSP redirector is also created. Its URL is:
    #   http://localhost:8090/test1-rtsp.rtsp

    #<stream>
    #Format rtp
    #File "/usr/local/httpd/htdocs/test1.mpg"
    #</stream>


    # Transcode an incoming live feed to another live feed,
    # using libx264 and video presets

    #<stream>
    #Format rtp
    #Feed feed1.ffm
    #VideoCodec libx264
    #VideoFrameRate 24
    #VideoBitRate 100
    #VideoSize 480x272
    #AVPresetVideo default
    #AVPresetVideo baseline
    #AVOptionVideo flags +global_header
    #
    #AudioCodec libfaac
    #AudioBitRate 32
    #AudioChannels 2
    #AudioSampleRate 22050
    #AVOptionAudio flags +global_header
    #</stream>

    ##################################################################
    # SDP/multicast examples
    #
    # If you want to send your stream in multicast, you must set the
    # multicast address with MulticastAddress. The port and the TTL can
    # also be set.
    #
    # An SDP file is automatically generated by ffserver by adding the
    # 'sdp' extension to the stream name (here
    # http://localhost:8090/test1-sdp.sdp). You should usually give this
    # file to your player to play the stream.
    #
    # The 'NoLoop' option can be used to avoid looping when the stream is
    # terminated.

    #<stream>
    #Format rtp
    #File "/usr/local/httpd/htdocs/test1.mpg"
    #MulticastAddress 224.124.0.1
    #MulticastPort 5000
    #MulticastTTL 16
    #NoLoop
    #</stream>


    ##################################################################
    # Special streams

    # Server status

    <stream>
    Format status

    # Only allow local people to get the status
    ACL allow localhost
    ACL allow 192.168.0.0 192.168.255.255

    #FaviconURL http://pond1.gladstonefamily.net:8080/favicon.ico
    </stream>


    # Redirect index.html to the appropriate site

    <redirect>
    URL http://www.ffmpeg.org/
    </redirect>

    I started my server and executed :

    ffserver -d -f /usr/share/doc/ffmpeg-2.6.8/ffserver.conf

    No error message and everything looks fine.

    After that I execute this (in your answer, I think you forgot the port number) :

    ffmpeg -i "rtsp://200.180.90.95:554/onvif1" -r 25 -s 640x480 -c:v libx264 -flags +global_header -f flv "http://45.79.207.38:8090/feed1.ffm"

    Then I get this log :

     libavutil      54. 20.100 / 54. 20.100
     libavcodec     56. 26.100 / 56. 26.100
     libavformat    56. 25.101 / 56. 25.101
     libavdevice    56.  4.100 / 56.  4.100
     libavfilter     5. 11.102 /  5. 11.102
     libavresample   2.  1.  0 /  2.  1.  0
     libswscale      3.  1.101 /  3.  1.101
     libswresample   1.  1.100 /  1.  1.100
     libpostproc    53.  3.100 / 53.  3.100
    [h264 @ 0x1a23580] RTP: missed 1 packets
    [pcm_alaw @ 0x1a24360] RTP: missed 2 packets
    [h264 @ 0x1a23580] RTP: missed 1 packets
    Invalid UE golomb code
    [h264 @ 0x1a23580] cbp too large (3199971767) at 76 33
    [h264 @ 0x1a23580] error while decoding MB 76 33
    [h264 @ 0x1a23580] Cannot use next picture in error concealment
    [h264 @ 0x1a23580] concealing 933 DC, 933 AC, 933 MV errors in P frame
    [h264 @ 0x1a23580] RTP: missed 1 packets
    [h264 @ 0x1a23580] cbp too large (62) at 50 24
    [h264 @ 0x1a23580] error while decoding MB 50 24
    [h264 @ 0x1a23580] Cannot use next picture in error concealment
    [h264 @ 0x1a23580] concealing 1679 DC, 1679 AC, 1679 MV errors in P frame
    [h264 @ 0x1a23580] RTP: missed 2 packets
    [h264 @ 0x1a23580] Cannot use next picture in error concealment
    [h264 @ 0x1a23580] concealing 1965 DC, 1965 AC, 1965 MV errors in P frame
    [pcm_alaw @ 0x1a24360] RTP: missed 1 packets
       Last message repeated 1 times
    [h264 @ 0x1a23580] RTP: missed 3 packets
    [h264 @ 0x1a23580] mb_type 49 in P slice too large at 74 25
    [h264 @ 0x1a23580] error while decoding MB 74 25
    [h264 @ 0x1a23580] Cannot use next picture in error concealment
    [h264 @ 0x1a23580] concealing 1575 DC, 1575 AC, 1575 MV errors in P frame
    [h264 @ 0x1a23580] RTP: missed 2 packets
    [h264 @ 0x1a23580] P sub_mb_type 29 out of range at 30 26
    [h264 @ 0x1a23580] error while decoding MB 30 26
    [h264 @ 0x1a23580] Cannot use next picture in error concealment
    [h264 @ 0x1a23580] concealing 1539 DC, 1539 AC, 1539 MV errors in P frame
    [h264 @ 0x1a23580] RTP: missed 1 packets
    [h264 @ 0x1a23580] out of range intra chroma pred mode at 72 29
    [h264 @ 0x1a23580] error while decoding MB 72 29
    [h264 @ 0x1a23580] Cannot use next picture in error concealment
    [h264 @ 0x1a23580] concealing 1257 DC, 1257 AC, 1257 MV errors in P frame
    [h264 @ 0x1a23580] RTP: missed 3 packets
    [h264 @ 0x1a23580] negative number of zero coeffs at 48 5
    [h264 @ 0x1a23580] error while decoding MB 48 5
    [h264 @ 0x1a23580] Cannot use next picture in error concealment
    [h264 @ 0x1a23580] concealing 3201 DC, 3201 AC, 3201 MV errors in P frame
    [pcm_alaw @ 0x1a24360] RTP: missed 1 packets
    [rtsp @ 0x1a20ee0] decoding for stream 0 failed
    Guessed Channel Layout for  Input Stream #0.1 : mono
    Input #0, rtsp, from 'rtsp://200.180.90.95:554/onvif1':
     Metadata:
       title           : H.264 Video, RtspServer_0.0.0.2
     Duration: N/A, start: 0.000000, bitrate: N/A
       Stream #0:0: Video: h264 (Baseline), yuv420p, 1280x720, 90k tbr, 90k tbn, 180k tbc
       Stream #0:1: Audio: pcm_alaw, 8000 Hz, 1 channels, s16, 64 kb/s
    [libx264 @ 0x1b728a0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX AVX2 FMA3 LZCNT BMI2
    [libx264 @ 0x1b728a0] profile High, level 3.0
    [libx264 @ 0x1b728a0] 264 - core 142 r2495 6a301b6 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=1 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
    [flv @ 0x1a66300] FLV does not support sample rate 8000, choose from (44100, 22050, 11025)
    [flv @ 0x1a66300] Audio codec mp3 not compatible with flv
    Output #0, flv, to 'http://45.79.207.38:8090/feed1.ffm':
     Metadata:
       title           : H.264 Video, RtspServer_0.0.0.2
       encoder         : Lavf56.25.101
       Stream #0:0: Video: h264 (libx264) ([7][0][0][0] / 0x0007), yuv420p, 640x480, q=-1--1, 25 fps, 1k tbn, 25 tbc
       Metadata:
         encoder         : Lavc56.26.100 libx264
       Stream #0:1: Audio: mp3 (libmp3lame) ([2][0][0][0] / 0x0002), 8000 Hz, mono, s16p
       Metadata:
         encoder         : Lavc56.26.100 libmp3lame
    Stream mapping:
     Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
     Stream #0:1 -> #0:1 (pcm_alaw (native) -> mp3 (libmp3lame))
    Could not write header for output file #0 (incorrect codec parameters ?): Function not implemented

    I am doing this in a clean install of CENTOS, no customization. Could you please helpe me ?

  • Understanding The Dreamcast GD-ROM Layout

    24 mars 2022, par Multimedia Mike — Sega Dreamcast

    I’m finally completing something I set out to comprehend over a decade ago. I wanted to understand how data is actually laid out on a Sega Dreamcast GD-ROM drive. I’m trying to remember why I even still care. There was something about how I wanted to make sure the contents of a set of Dreamcast demo discs was archived for study.


    Lot of 9 volumes of the Official Sega Dreamcast Magazine

    I eventually figured it out. Read on, if you are interested in the technical details. Or, if you would like to examine the fruits of this effort, check out the Dreamcast demo discs that I took apart and uploaded to the Internet Archive.

    If you care to read some geeky technical details of some of the artifacts on these sampler discs, check out this followup post on Dreamcast Finds.

    Motivation
    Why do I still care about this ? Well, see the original charter of this blog above. It’s mostly about studying multimedia formats, as well as the general operation of games and their non-multimedia data formats. It’s also something that has nagged at me ever since I extracted a bunch of Dreamcast discs years ago and tried to understand why the tracks were arranged the way they were, and how I could systematically split the files out of the filesystem. This turns out not to be as easy as it might sound, even if you can get past the obstacle of getting at the raw data.

    CD/CD-ROM Refresher
    As I laid out in my Grand Unified Theory of Compact Disc, every compact disc can be viewed conceptually as a string of sectors, where each sector is 2352 bytes long. The difference among the various CD types (audio CDs, various CD-ROM types) boils down to the format of contents of the 2352-byte sectors. For an audio CD, every sector’s 2352 bytes represents 1/75 of a second of CD-quality audio samples.

    Meanwhile, there are various sector layouts for different CD-ROM modes, useful for storing computer data. This post is most interested in “mode 1/form 1”, which uses 2048 of the 2352 bytes for data, while using the remaining bytes for error detection and correction codes. A filesystem (usually ISO-9660) is overlaid on these 2048-byte sectors in order to create data structures for organizing strings of sectors into files.

    A CD has between 1 and 99 tracks. A pure CD-ROM will have a single data track. Pure audio CDs tend to have numerous audio tracks, usually 1 per song. Mixed CDs are common. For software, this usually manifests as the first track being data and containing an ISO-9660 filesystem, followed by a series of audio tracks, sometimes for in-game music. For audio CDs, there is occasionally a data track at the end of the disc with some extra media types.

    GD-ROM Refresher
    The Dreamcast used optical discs called GD-ROMs, where the GD stands for “gigadisc”. These discs were designed to hold about 1 gigabyte of data, vs. the usual 650-700MB offered by standard CD solutions, while using the same laser unit as is used for CDs. I’m not sure how it achieved this exactly. I always assumed it was some sort of “double density” sector scheme. According to Wikipedia, the drive read the disc at a slower rate which allowed it to read more data (presumably the “pits” vs. “lands” which comprise the surface of an optical disc). This might be equivalent to my theory.

    The GD-ROM discs cannot be read in a standard optical drive. It is necessary to get custom software onto the Dreamcast which will ask the optical hardware to extract the sectors and exfiltrate them off of the unit somehow. There are numerous methods for this. Alternatively, just find rips that are increasingly plentiful around the internet. However, just because you might be able to find the data for a given disc does not mean that you can easily explore the contents.

    Typical Layout Patterns
    Going back to my study of the GD-ROM track layouts, 2 clear patterns emerge :

    All of the game data is packed into track 3 :


    GD-ROM Layout Type 1

    Track 3 has data, the last track has data, and the tracks in between contain standard CD audio :


    GD-ROM Layout Type 2

    Also, the disc is always, always 100% utilized.

    Track 1 always contains an ISO-9660 filesystem and can be read by any standard CD-ROM drive. And it usually has nothing interesting. Track 3 also contains what appears to be an ISO-9660 filesystem. However, if you have a rip of the track and try to mount the image with standard tools, it will not work. In the second layout, the data follows no obvious format.

    Cracking The Filesystem Code
    I figured out quite a few years ago that in the case of the consolidated data track 3, that’s simply a standard ISO-9660 filesystem that would work fine with standard ISO-9660 reading software… if the data track were located beginning at sector 45000. The filesystem data structures contain references to absolute sector numbers. Thus, if it were possible to modify some ISO-9660 software to assume the first sector is 45000, it ought to have no trouble interpreting the data.


    ISO-9660 In A Single Track

    How about the split data track format ? Actually, it works the same way. If all the data were sitting on its original disc, track 3 would have data structures pointing to strings of contiguous sectors (extents) in the final track, and those are the files.

    To express more succinctly : track 3 contains the filesystem root structure and the directory structures, while the final track contains the actual file data. How is the filesystem always 100% full ? Track 3 gets padded out with 0-sectors until the beginning of any audio sectors.


    ISO-9660 Spread Across 2 Tracks

    Why Lay Things Out Like This ?
    Why push the data as far out on the disc as possible ? A reasonable explanation for this would be for read performance. Compact discs operate on Constant Linear Velocity (CLV), vs. Constant Angular Velocity (CAV). The implication of this is that data on the outside of the disc is read faster than data on the inside. I once profiled this characteristic in order to prove it to myself, using both PC CD drives as well as a Dreamcast. By pushing the data to the outer sectors, graphical data gets loaded into RAM faster, and full motion videos, which require a certain minimum bitrate for a good experience, have a better guarantee that playback will be smooth.

    Implications For Repacking
    Once people figured out how to boot burned CDs in the Dreamcast, they had a new problem : Squeeze as much as 1 gigabyte down to around 650 megabytes at the most. It looks like the most straightforward strategy was to simply rework the filesystem to remove the often enormous amount of empty space in track 3.

    My understanding is that another major strategy is to re-encode certain large assets. Full motion video (FMV) assets are a good target here since the prevailing FMV middleware format used on Sega Dreamcast games was Sofdec, which is basically just MPEG-1 video. There is ample opportunity to transcode these files to lower bitrate settings to squeeze some bits (and a lot of visual quality) out of them.

    Further, if you don’t really care about the audio tracks, you could just replace them with brief spurts of silence.

    Making A Tool
    So I could make a tool that would process these collections of files representing a disc. I could also adapt it for various forms that a Dreamcast rip might take (I have found at least 3 so far). I could eventually expand it to handle lots of other disc formats (you know, something like Aaru does these days). And that would have been my modus operandi perhaps 10 or more years ago. And of course, the ambitious tool would have never seen daylight as I got distracted by other ideas.

    I wanted to get a solution up and running as quickly as possible this time. Here was my initial brainstorm : assemble all the tracks into a single, large disc while pretending the audio tracks consist of 2048-byte sectors. In doing so, I ought to be able to use fuseiso to mount the giant image, with a modification to look for the starting sector at a somewhat nonstandard location.

    To achieve the first part I wrote a quick Python script that processed the contents of a GDI file, which was stored alongside the ISO (data) and RAW (audio) track track rips from when I extracted the disc. The GDI is a very matter-of-fact listing of the tracks and their properties, e.g. :

    5
    1 0 4 2048 track01.iso 0
    2 721 0 2352 track02.raw 0
    3 45000 4 2048 track03.iso 0
    4 338449 0 2352 track04.raw 0
    5 349096 4 2048 track05.iso 0
    

    track number / starting sector / track type (4=data, 0=audio) / bytes per sector / filename / ??

    The script skips the first 2 filenames, instead writing 45000 zero sectors in order to simulate the CD-compatible area. Then, for each file, if it’s an ISO, append the data to the final data file ; if it’s audio, compute the number of sectors occupied, and then append that number of 2048-byte zero sectors to the final data file.

    Finally, to interpret the filesystem, I used an old tool that I’ve relied upon for a long time– fuseiso. This is a program that leverages Filesystem in Userspace (FUSE) to mount ISO-9660 filesystems as part of the local filesystem, without needing root privileges. The original source hasn’t been updated for 15 years, but I found a repo that attempts to modernize it slightly. I forked a version which fixes a few build issues.

    Anyway, I just had to update a table to ask it to start looking for the root ISO-9660 filesystem at a different location than normal. Suddenly, after so many years, I was able to freely browse a GD-ROM filesystem directly under Linux !

    Conclusion And Next Steps
    I had to hack the fuseiso3 tool a bit in order to make this work. I don’t think it’s especially valuable to make sure anyone can run with the same modifications since the tool assumes that a GD-ROM rip has been processed through the exact pipeline I described above.

    I have uploaded all of the North American Dreamcast demo discs to archive.org. See this post for a more granular breakdown of what this entails. In the course of this exercise, I also found some European demo discs that could use the same extraction.

    What else ? Should I perform the same extraction experiment for all known Dreamcast games ? Would anyone care ? Maybe if there’s a demand for it.

    Here is a followup on the interesting and weird things I have found on these discs so far.

    The post Understanding The Dreamcast GD-ROM Layout first appeared on Breaking Eggs And Making Omelettes.

  • Is Google Analytics Accurate ? 6 Important Caveats

    8 novembre 2022, par Erin

    It’s no secret that accurate website analytics is crucial for growing your online business — and Google Analytics is often the go-to source for insights. 

    But is Google Analytics data accurate ? Can you fully trust the provided numbers ? Here’s a detailed explainer.

    How Accurate is Google Analytics ? A Data-Backed Answer 

    When properly configured, Google Analytics (Universal Analytics and Google Analytics 4) is moderately accurate for global traffic collection. That said : Google Analytics doesn’t accurately report European traffic. 

    According to GDPR provisions, sites using GA products must display a cookie consent banner. This consent is required to collect third-party cookies — a tracking mechanism for identifying users across web properties.

    Google Analytics (GA) cannot process data about the user’s visit if they rejected cookies. In such cases, your analytics reports will be incomplete.

    Cookie rejection refers to visitors declining or blocking cookies from ever being collected by a specific website (or within their browser). It immediately affects the accuracy of all metrics in Google Analytics.

    Google Analytics is not accurate in locations where cookie consent to tracking is legally required. Most consumers don’t like disruptive cookie banners or harbour concerns about their privacy — and chose to reject tracking. 

    This leaves businesses with incomplete data, which, in turn, results in : 

    • Lower traffic counts as you’re not collecting 100% of the visitor data. 
    • Loss of website optimisation capabilities. You can’t make data-backed decisions due to inconsistent reporting

    For the above reasons, many companies now consider cookieless website tracking apps that don’t require consent screen displays. 

    Why is Google Analytics Not Accurate ? 6 Causes and Solutions 

    A high rejection rate of cookie banners is the main reason for inaccurate Google Analytics reporting. In addition, your account settings can also hinder Google Analytics’ accuracy.

    If your analytics data looks wonky, check for these six Google Analytics accuracy problems. 

    You Need to Secure Consent to Cookies Collection 

    To be GDPR-compliant, you must display a cookie consent screen to all European users. Likewise, other jurisdictions and industries require similar measures for user data collection. 

    This is a nuisance for many businesses since cookie rejection undermines their remarketing capabilities. Hence, some try to maximise cookie acceptance rates with dark patterns. For example : hide the option to decline tracking or make the texts too small. 

    Cookie consent banner examples
    Banner on the left doesn’t provide an evident option to reject all cookies and nudges the user to accept tracking. Banner on the right does a better job explaining the purpose of data collection and offers a straightforward yes/no selection

    Sadly, not everyone’s treating users with respect. A joint study by German and American researchers found that only 11% of US websites (from a sample of 5,000+) use GDPR-compliant cookie banners.

    As a result, many users aren’t aware of the background data collection to which they have (or have not) given consent. Another analysis of 200,000 cookies discovered that 70% of third-party marketing cookies transfer user data outside of the EU — a practice in breach of GDPR.

    Naturally, data regulators and activities are after this issue. In April 2022, Google was pressured to introduce a ‘reject all’ cookies button to all of its products (a €150 million compliance fine likely helped with that). Whereas, noyb has lodged over 220 complaints against individual websites with deceptive cookie consent banners.

    The takeaway ? Messing up with the cookie consent mechanism can get you in legal trouble. Don’t use sneaky banners as there are better ways to collect website traffic statistics. 

    Solution : Try Matomo GDPR-Friendly Analytics 

    Fill in the gaps in your traffic analytics with Matomo – a fully GDPR-compliant product that doesn’t rely on third-party cookies for tracking web visitors. Because of how it is designed, the French data protection authority (CNIL) confirmed that Matomo can be used to collect data without tracking consent.

    With Matomo, you can track website users without asking for cookie consent. And when you do, we supply you with a compact, compliant, non-disruptive cookie banner design. 

    Your Google Tag Isn’t Embedded Correctly 

    Google Tag (gtag.js) is a web tracking script that sends data to your Google Analytics, Google Ads and Google Marketing Platform.

    A corrupted gtag.js installation can create two accuracy issues : 

    • Duplicate page tracking 
    • Missing script installation 

    Is there a way to tell if you’re affected ?

    Yes. You may have duplicate scripts installed if you have a very low bounce rate on most website pages (below 15% – 20%). The above can happen if you’re using a WordPress GA plugin and additionally embed gtag.js straight in your website code. 

    A tell-tale sign of a missing script on some pages is low/no traffic stats. Google alerts you about this with a banner : 

    Google Analytics alerts

    Solution : Use Available Troubleshooting Tools 

    Use Google Analytics Debugger extension to analyse pages with low bounce rates. Use the search bar to locate duplicate code-tracking elements. 

    Alternatively, you can use Google Tag Assistant for diagnosing snippet install and troubleshooting issues on individual pages. 

    If the above didn’t work, re-install your analytics script

    Machine Learning and Blended Data Are Applied

    Google Analytics 4 (GA4) relies a lot on machine learning and algorithmic predictions.

    By applying Google’s advanced machine learning models, the new Analytics can automatically alert you to significant trends in your data. [...] For example, it calculates churn probability so you can more efficiently invest in retaining customers.

    On the surface, the above sounds exciting. In practice, Google’s application of predictive algorithms means you’re not seeing actual data. 

    To offer a variation of cookieless tracking, Google algorithms close the gaps in reporting by creating models (i.e., data-backed predictions) instead of reporting on actual user behaviours. Therefore, your GA4 numbers may not be accurate.

    For bigger web properties (think websites with 1+ million users), Google also relies on data sampling — a practice of extrapolating data analytics, based on a data subset, rather than the entire dataset. Once again, this can lead to inconsistencies in reporting with some numbers (e.g., average conversion rates) being inflated or downplayed. 

    Solution : Try an Alternative Website Analytics App 

    Unlike GA4, Matomo reports consist of 100% unsampled data. All the aggregated reporting you see is based on real user data (not guesstimation). 

    Moreover, you can migrate from Universal Analytics (UA) to Matomo without losing access to your historical records. GA4 doesn’t yet have any backward compatibility.

    Spam and Bot Traffic Isn’t Filtered Out 

    Surprise ! 42% of all Internet traffic is generated by bots, of which 27.7% are bad ones.

    Good bots (aka crawlers) do essential web “housekeeping” tasks like indexing web pages. Bad bots distribute malware, spam contact forms, hack user accounts and do other nasty stuff. 

    A lot of such spam bots are designed specifically for web analytics apps. The goal ? Flood your dashboard with bogus data in hopes of getting some return action from your side. 

    Types of Google Analytics Spam :

    • Referral spam. Spambots hijack the referrer, displayed in your GA referral traffic report to indicate a page visit from some random website (which didn’t actually occur). 
    • Event spam. Bots generate fake events with free language entries enticing you to visit their website. 
    • Ghost traffic spam. Malicious parties can also inject fake pageviews, containing URLs that they want you to click. 

    Obviously, such spammy entities distort the real website analytics numbers. 

    Solution : Set Up Bot/Spam Filters 

    Google Analytics 4 has automatic filtering of bot traffic enabled for all tracked Web and App properties. 

    But if you’re using Universal Analytics, you’ll have to manually configure spam filtering. First, create a new view and then set up a custom filter. Program it to exclude :

    • Filter Field : Request URI
    • Filter Pattern : Bot traffic URL

    Once you’ve configured everything, validate the results using Verify this filter feature. Then repeat the process for other fishy URLs, hostnames and IP addresses. 

    You Don’t Filter Internal Traffic 

    Your team(s) spend a lot of time on your website — and their sporadic behaviours can impair your traffic counts and other website metrics.

    To keep your data “employee-free”, exclude traffic from : 

    • Your corporate IPs addresses 
    • Known personal IPs of employees (for remote workers) 

    If you also have a separate stage version of your website, you should also filter out all traffic coming from it. Your developers, contractors and marketing people spend a lot of time fiddling with your website. This can cause a big discrepancy in average time on page and engagement rates. 

    Solution : Set Internal Traffic Filters 

    Google provides instructions for excluding internal traffic from your reports using IPv4/IPv6 address filters. 

    Google Analytics IP filters

    Session Timeouts After 30 Minutes 

    After 30 minutes of inactivity, Google Analytics tracking sessions start over. Inactivity means no recorded interaction hits during this time. 

    Session timeouts can be a problem for some websites as users often pin a tab to check it back later. Because of this, you can count the same user twice or more — and this leads to skewed reporting. 

    Solution : Programme Custom Timeout Sessions

    You can codify custom cookie timeout sessions with the following code snippets : 

    Final Thoughts 

    Thanks to its scale and longevity, Google Analytics has some strong sides, but its data accuracy isn’t 100% perfect.

    The inability to capture analytics data from users who don’t consent to cookie tracking and data sampling applied to bigger web properties may be a deal-breaker for your business. 

    If that’s the case, try Matomo — a GDPR-compliant, accurate web analytics solution. Start your 21-day free trial now. No credit card required.