Recherche avancée

Médias (91)

Autres articles (51)

  • Les vidéos

    21 avril 2011, par

    Comme les documents de type "audio", Mediaspip affiche dans la mesure du possible les vidéos grâce à la balise html5 .
    Un des inconvénients de cette balise est qu’elle n’est pas reconnue correctement par certains navigateurs (Internet Explorer pour ne pas le nommer) et que chaque navigateur ne gère en natif que certains formats de vidéos.
    Son avantage principal quant à lui est de bénéficier de la prise en charge native de vidéos dans les navigateur et donc de se passer de l’utilisation de Flash et (...)

  • Installation en mode ferme

    4 février 2011, par

    Le mode ferme permet d’héberger plusieurs sites de type MediaSPIP en n’installant qu’une seule fois son noyau fonctionnel.
    C’est la méthode que nous utilisons sur cette même plateforme.
    L’utilisation en mode ferme nécessite de connaïtre un peu le mécanisme de SPIP contrairement à la version standalone qui ne nécessite pas réellement de connaissances spécifique puisque l’espace privé habituel de SPIP n’est plus utilisé.
    Dans un premier temps, vous devez avoir installé les mêmes fichiers que l’installation (...)

  • Websites made ​​with MediaSPIP

    2 mai 2011, par

    This page lists some websites based on MediaSPIP.

Sur d’autres sites (3961)

  • Catching dropped FFMPEG frames in iOS ?

    30 juin 2020, par jbeu425

    I'm developing an iOS app which streams RTSP over a WiFi connection. I need to be able to inform the user if the connection is not good, and I'd like to know if there is some way to catch dropped FFMPEG frames in some way ?

    


    My frames are decoded using the method below, is there somewhere here I can tap into to catch an issue with the frame being decoded ? There is currently an NSLog which says "decode video error !" about half way down this method, but running network link conditioner set to "very poor network" never reaches this line even though the stream is very choppy.

    


    All I'm after really is some sort of line that I can breakpoint when the stream loses quality because of a bad connection.

    


    - (NSArray *) decodeFrames: (CGFloat) minDuration
{
NSMutableArray *result = [NSMutableArray array];

@synchronized (lock) {
    
    if([_reading integerValue] != 1){
        
        _reading = [NSNumber numberWithInt:1];
        
        @synchronized (_seekPosition) {
            if([_seekPosition integerValue] != -1 && _seekPosition){
                [self seekDecoder:[_seekPosition longLongValue]];
                _seekPosition = [NSNumber numberWithInt:-1];
            }
        }
        
        if (_videoStream == -1 &&
            _audioStream == -1)
            return nil;
        
        AVPacket packet;
        
        CGFloat decodedDuration = 0;
        
        CGFloat totalDuration = [TimeHelper calculateTimeDifference];
        CGFloat timeStampAtEntry = av_frame_get_best_effort_timestamp(_videoFrame) * _videoTimeBase;
        NSDate *timeAtEntry = [NSDate date];
        BOOL catchUp = totalDuration > 0;
        do {
        BOOL finished = NO;
        
        while (!finished) {
            
                NSDate* snap1 = [NSDate date];
            if (av_read_frame(_formatCtx, &packet) < 0) {
                _isEOF = YES;
                    catchUp = NO;
                [self endOfFileReached];
                break;
            }
            
            [self frameRead];
            
                if ([[NSDate date] timeIntervalSinceDate:snap1] > 3) {
                    _isEOF = YES;
                    catchUp = NO;
                    [self endOfFileReached];
                    break;
                }
            if (packet.stream_index ==_videoStream) {
                
                int pktSize = packet.size;
                

                while (pktSize > 0) {
                    
                    int gotframe = 0;
                    int len = avcodec_decode_video2(_videoCodecCtx,
                                                    _videoFrame,
                                                    &gotframe,
                                                    &packet);
                    
                    if (len < 0) {
                        LoggerVideo(0, @"decode video error, skip packet");
                        NSLog(@"decode video error!");
                        break;
                    }
                    
                    if (gotframe) {
                        
                            if (catchUp ) {
                                CGFloat timeStamp = av_frame_get_best_effort_timestamp(_videoFrame) * _videoTimeBase;
                                catchUp = totalDuration > (timeStamp - timeStampAtEntry);
                                if (!catchUp) {
                                    CGFloat nextTotalDuration = [[NSDate date] timeIntervalSinceDate:timeAtEntry];
                                    if (nextTotalDuration < totalDuration && nextTotalDuration > 0.5) {
                                        totalDuration = nextTotalDuration;
                                        timeAtEntry = [NSDate date];
                                        timeStampAtEntry = timeStamp;                                            
                                        catchUp = true;
                                    }
                                }
                                if ([configuration.recordStream intValue] == 1) {
                                    [self writeToFile: packet];
                                }
                                
                            } else {
                                
                        if (!_disableDeinterlacing &&
                            _videoFrame->interlaced_frame) {
                            
                            avpicture_deinterlace((AVPicture*)_videoFrame,
                                                  (AVPicture*)_videoFrame,
                                                  _videoCodecCtx->pix_fmt,
                                                  _videoCodecCtx->width,
                                                  _videoCodecCtx->height);
                        }
                        
                        KxVideoFrame *frame = [self handleVideoFrame];
                        if (frame) {
                            
                            [result addObject:frame];
                            _position = frame.position;
                            decodedDuration += frame.duration;
                            if (decodedDuration > minDuration)
                                finished = YES;
                        }
                                

                                if ([configuration.recordStream intValue] == 1) {
                                    [self writeToFile: packet];
                                }
                                
                                
                                
                            }
                        }
                        
                        if (0 == len)
                        break;
                    
                    pktSize -= len;
                    }
                }
                
                
                
                
                av_free_packet(&packet);
        }
        } while (catchUp);
        _reading = [NSNumber numberWithInt:0];
        [TimeHelper resetTimeEnteredForeground];
        [TimeHelper resetTimeEnteredBackground];
        
        return result;
    }
    
    }

    return result;

    }


    


  • Revision 109790 : - Suite à un problème de sécu concernant facteur, je monte la version ...

    3 avril 2018, par spip.franck@… — Log

    - Suite à un problème de sécu concernant facteur, je monte la version mini des necessites pour réduire le risque que les gens aient une version de facteur à risque.
    - Je monte aussi la version mini des utilises, ce qui aura pour incidence une désactivation de facteur si les gens ne le mettent pas également à jour ( à voir si c’est une bonne idée), je pars du principe que le mieux, c’est une désactivation, plutôt que d’avoir un plug à problème
    - A savoir que je n’ai fait la mise à jour que pour la version de facteur qui est pour spip 3.0.0 mini
    https://zone.spip.org/trac/spip-zone/changeset/109788

  • Revision 109790 : - Suite à un problème de sécu concernant facteur, je monte la version ...

    11 juin 2018, par spip.franck@… — Log

    - Suite à un problème de sécu concernant facteur, je monte la version mini des necessites pour réduire le risque que les gens aient une version de facteur à risque.
    - Je monte aussi la version mini des utilises, ce qui aura pour incidence une désactivation de facteur si les gens ne le mettent pas également à jour ( à voir si c’est une bonne idée), je pars du principe que le mieux, c’est une désactivation, plutôt que d’avoir un plug à problème
    - A savoir que je n’ai fait la mise à jour que pour la version de facteur qui est pour spip 3.0.0 mini
    https://zone.spip.org/trac/spip-zone/changeset/109788