Recherche avancée

Médias (1)

Mot : - Tags -/ticket

Autres articles (47)

  • HTML5 audio and video support

    13 avril 2011, par

    MediaSPIP uses HTML5 video and audio tags to play multimedia files, taking advantage of the latest W3C innovations supported by modern browsers.
    The MediaSPIP player used has been created specifically for MediaSPIP and can be easily adapted to fit in with a specific theme.
    For older browsers the Flowplayer flash fallback is used.
    MediaSPIP allows for media playback on major mobile platforms with the above (...)

  • De l’upload à la vidéo finale [version standalone]

    31 janvier 2010, par

    Le chemin d’un document audio ou vidéo dans SPIPMotion est divisé en trois étapes distinctes.
    Upload et récupération d’informations de la vidéo source
    Dans un premier temps, il est nécessaire de créer un article SPIP et de lui joindre le document vidéo "source".
    Au moment où ce document est joint à l’article, deux actions supplémentaires au comportement normal sont exécutées : La récupération des informations techniques des flux audio et video du fichier ; La génération d’une vignette : extraction d’une (...)

  • Librairies et binaires spécifiques au traitement vidéo et sonore

    31 janvier 2010, par

    Les logiciels et librairies suivantes sont utilisées par SPIPmotion d’une manière ou d’une autre.
    Binaires obligatoires FFMpeg : encodeur principal, permet de transcoder presque tous les types de fichiers vidéo et sonores dans les formats lisibles sur Internet. CF ce tutoriel pour son installation ; Oggz-tools : outils d’inspection de fichiers ogg ; Mediainfo : récupération d’informations depuis la plupart des formats vidéos et sonores ;
    Binaires complémentaires et facultatifs flvtool2 : (...)

Sur d’autres sites (8108)

  • CMSampleBuffer from Replay Kit after encoding to Mpeg-TS Video is normal, Audio is corrupted

    18 avril 2019, par Sos A

    I am trying to stream AAC encoded audio data received as CMSampleBuffer. AudioConverterFillComplexBuffer returns 0 status code.
    But after passing this data to my FFMPEG HLSWriter audio is not correctly saved (short truncated signals).
    Below is the sample code.

    static OSStatus inInputDataProc(AudioConverterRef inAudioConverter,
                                       UInt32 *ioNumberDataPackets,
                                       AudioBufferList *ioData,
                                       AudioStreamPacketDescription **outDataPacketDescription,
                                       void *inUserData)
       {
           KFAACEncoder *encoder = (__bridge KFAACEncoder *)(inUserData);
           UInt32 requestedPackets = *ioNumberDataPackets;

           if(requestedPackets > encoder.cycledBuffer.size / 2)
           {
               //NSLog(@"PCM buffer isn't full enough!");
               *ioNumberDataPackets = 0;
               return  -1;
           }

           static size_t staticBuffSize = 4096;
           static void* staticBuff = nil;

           if(!staticBuff)
           {
               staticBuff = malloc(staticBuffSize);
           }

           size_t outputBytesSize = requestedPackets * 2;
           [encoder.cycledBuffer popToBuffer:staticBuff bytes: outputBytesSize];
           ioData->mBuffers[0].mData = staticBuff;
           ioData->mBuffers[0].mDataByteSize = (int)outputBytesSize;

           *ioNumberDataPackets = ioData->mBuffers[0].mDataByteSize / 2;

           return noErr;
       }

       - (void) encodeSampleBuffer:(CMSampleBufferRef)sampleBuffer
           {
               CFRetain(sampleBuffer);
               dispatch_async(self.encoderQueue,
                              ^{

                                  if (!_audioConverter)
                                  {
                                      [self setupAACEncoderFromSampleBuffer:sampleBuffer];
                                  }

                                  CMBlockBufferRef blockBuffer = CMSampleBufferGetDataBuffer(sampleBuffer);
                                  CMTime pts = CMSampleBufferGetPresentationTimeStamp(sampleBuffer);
                                  CFRetain(blockBuffer);

                                  size_t pcmBufferSize = 0;
                                  void* pcmBuffer = nil;
                                  OSStatus status = CMBlockBufferGetDataPointer(blockBuffer, 0, NULL, &pcmBufferSize, &pcmBuffer);

                                  [_cycledBuffer push:pcmBuffer size:pcmBufferSize];

                                  NSError *error = nil;

                                  if (status != kCMBlockBufferNoErr)
                                  {
                                      error = [NSError errorWithDomain:NSOSStatusErrorDomain code:status userInfo:nil];
                                  }

                                  memset(_aacBuffer, 0, _aacBufferSize);
                                  AudioBufferList outAudioBufferList = {0};
                                  outAudioBufferList.mNumberBuffers = 1;
                                  outAudioBufferList.mBuffers[0].mNumberChannels = 1;
                                  outAudioBufferList.mBuffers[0].mDataByteSize = _aacBufferSize;
                                  outAudioBufferList.mBuffers[0].mData = _aacBuffer;
       AudioStreamPacketDescription *outPacketDescription = NULL;
                                  UInt32 ioOutputDataPacketSize = 1;
                                  status = AudioConverterFillComplexBuffer(_audioConverter,
                                                                           inInputDataProc,
                                                                           (__bridge void *)(self),
                                                                           &ioOutputDataPacketSize,
                                                                           &outAudioBufferList,
                                                                           NULL);



        NSData *data = nil;
                              if (status == 0)
                              {
                                  NSData *rawAAC = [NSData dataWithBytes:outAudioBufferList.mBuffers[0].mData length:outAudioBufferList.mBuffers[0].mDataByteSize];
                                  if (_addADTSHeader) {
                                      NSData *adtsHeader = [self adtsDataForPacketLength:rawAAC.length];
                                      NSMutableData *fullData = [NSMutableData dataWithData:adtsHeader];
                                      [fullData appendData:rawAAC];
                                      data = fullData;
                                  } else {
                                      data = rawAAC;
                                  }
                              } else {
                                  error = [NSError errorWithDomain:NSOSStatusErrorDomain code:status userInfo:nil];
                              }
                              if (self.delegate) {
                                  KFFrame *frame = [[KFFrame alloc] initWithData:data pts:pts];
                                  NSLog(@"Bytes of data %lu", (unsigned long)data.length);
                                  dispatch_async(self.callbackQueue, ^{
                                      [self.delegate encoder:self encodedFrame:frame];
                                  });
                              }
                              CFRelease(sampleBuffer);
                              CFRelease(blockBuffer);
                          });
           }
  • Anomalie #4343 : L’installation d’un plugin réussi alors que la table n’est pas créée

    8 mars 2021

    Pas sûr que #4504 qui cause d’opcache soit en lien avec ce ticket.
    C’est #4342 qui est en lien.

    Mais ce ticket est plus spécifique à SVP : SVP ne sait pas que les tables n’ont pas été créées et indique le plugin comme installé.

  • Révision 20494 : Articles virtuels : faire une redirection propre via la fonction redirige_par_en...

    7 mai 2013, par cedric -

    La constante _STATUS_REDIRECTION_VIRTUEL permet par ailleurs de personaliser ce status en le passant en 301 systématique par exemple.