Recherche avancée

Médias (17)

Mot : - Tags -/wired

Autres articles (60)

  • Participer à sa traduction

    10 avril 2011

    Vous pouvez nous aider à améliorer les locutions utilisées dans le logiciel ou à traduire celui-ci dans n’importe qu’elle nouvelle langue permettant sa diffusion à de nouvelles communautés linguistiques.
    Pour ce faire, on utilise l’interface de traduction de SPIP où l’ensemble des modules de langue de MediaSPIP sont à disposition. ll vous suffit de vous inscrire sur la liste de discussion des traducteurs pour demander plus d’informations.
    Actuellement MediaSPIP n’est disponible qu’en français et (...)

  • Publier sur MédiaSpip

    13 juin 2013

    Puis-je poster des contenus à partir d’une tablette Ipad ?
    Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir

  • 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 (...)

Sur d’autres sites (7191)

  • Anomalie #3209 : Permettre de supprimer les fusions (group by) explicitement

    29 juin 2016, par RastaPopoulos ♥

    Bon, 2 ans que je l’utilise régulièrement de temps à autre, je l’ai ajouté à Bonux pour le moment, du coup :
    http://zone.spip.org/trac/spip-zone/changeset/98598

  • H264 streamed video stutter and freeze with MediaCodec, Android 4.1.2

    5 mars 2015, par Wajih

    I have been trying my heart out to remove the stutter from an android RTSP client.
    Here is my setup

    1. FFMPEG server streams a live video on Win7. The video is 1200x900 in size. The video streamed is in H264 format.
    2. I receive the video packets on android (4.1.2) clinet under JNI which pushes the packet to java - Device is a Samsung Tab4
    3. Packets are decoded using MediaCodec. Once call from JNI to push the packets into MediaCodec, another thread in Java tries to de-queue the data and display them to a SurfaceView (its a GLSurfaceView)

    Despite my efforts of using queue to buffer the packets, changing wait times to 0,-1, 1000000, i am unable to get a clean streamed video. I understand that there is some packet loss (1% to 10%), but I am getting a broken video, with stutter (some call it even jitter). Green patches, pink screens, gray slices. You name it, it is there, the problem seems to be exaggerated when there is a fast movement in the video.
    At the moment I am not sure where the problem lies, I tried a windows version of the client (with ffmpeg decoding) and it works smoothly despite the packet loss.

    What am I doing wrong ? Any guidance is appreciated.
    Below is the client end code for Android and the server end FFMPEG settings I read from a config file.

    // Function called from JNI
       public int decodeVideo(byte[] data, int size, long presentationTimeUs, boolean rtpMarker, int flag)
           {
               if(vdecoder == null)
                   return -1;
               if(currVInbufIdx == -1) {
                   vdecoderInbufIdx = vdecoder.dequeueInputBuffer(1000000); //1000000/*1s*/
                   if(vdecoderInbufIdx < 0) {
                       Log.d("log","decodeVideo@1: frame dropped");
                       vdecoderRet = -1;
                       return vdecoderRet;
                   }
                   currVInbufIdx = vdecoderInbufIdx;
                   currVPts = presentationTimeUs;
                   currVFlag = flag;
                   inputVBuffers[currVInbufIdx].clear();
               }

               vdecoderPos = inputVBuffers[currVInbufIdx].position();
               vdecoderRemaining = inputVBuffers[currVInbufIdx].remaining();
               if(flag==currVFlag && vdecoderRemaining >= size && currVPts == presentationTimeUs
                       && rtpMarker == false
                       /*&&(pos < vbufferLevel || vbufferLevel<=0)*/)
               {
                   /* Queue without decoding */
                   inputVBuffers[currVInbufIdx].put(data, 0,size);
               }
               else
               {

                   if(flag==currVFlag && vdecoderRemaining >= size && currVPts == presentationTimeUs
                           && rtpMarker)
                   {
                       inputVBuffers[currVInbufIdx].put(data, 0, size);
                       queued = true;
                   }
                   Log.d("log", "decodeVideo: submit,"
                           + " pts=" + Long.toString(currVPts)
                           + " position="+inputVBuffers[currVInbufIdx].position()
                           + " capacity="+inputVBuffers[currVInbufIdx].capacity()
                           + " VBIndex="+currVInbufIdx
                           );
                   vdecoder.queueInputBuffer(currVInbufIdx, 0, inputVBuffers[currVInbufIdx].position(), currVPts, currVFlag);

                   //
                   vdecoderInbufIdx = vdecoder.dequeueInputBuffer(1000000);//1000000/*1s*/
                   if(vdecoderInbufIdx >= 0)
                   {
                       currVInbufIdx = vdecoderInbufIdx;
                       currVPts = presentationTimeUs;
                       currVFlag = flag;
                       inputVBuffers[currVInbufIdx].clear();
                       //if(queued == false)
                       {
                           inputVBuffers[vdecoderInbufIdx].put(data, 0, size);

                       }

                   }
                   else
                   {
                       currVInbufIdx = -1;
                       currVPts = -1;
                       vdecoderRet = -1;
                       Log.d("log","decodeVideo@2: frame dropped");                        
                   }
               }              
               return vdecoderRet;
           }

    And here we have the thread that calls for a render

    // Function at android. Called by a separate thread.
       private void videoRendererThreadProc() {

               if(bufinfo == null)
                   bufinfo = new MediaCodec.BufferInfo();
               videoRendered = false;

               Log.d("log", "videoRenderer started.");

               while(!Thread.interrupted() && !quitVideoRenderer)
               {

                   Log.d("log", "videoRendererThreadProc");

                   outbufIdx = vdecoder.dequeueOutputBuffer(bufinfo,1000000);//500000
                   switch (outbufIdx)
                   {
                   case MediaCodec.INFO_OUTPUT_BUFFERS_CHANGED:
                       Log.d("log", "decodeVideo: output buffers changed.");
                       // outputBuffers = vdecoder.getOutputBuffers();
                       break;
                   case MediaCodec.INFO_OUTPUT_FORMAT_CHANGED:
                       Log.d("log", "decodeVideo: format changed - " + vdecoder.getOutputFormat());
                       break;
                   case MediaCodec.INFO_TRY_AGAIN_LATER:
                       // Log.d("log", "decodeVideo: try again later.");
                       break;
                   default:

                       // decoded or rendered
                       videoRendered = true;
                       vdecoder.releaseOutputBuffer(outbufIdx, true);
                       //Log.d("log", "decodeVideo: Rendering...!!!.");    
                   }
               }

               // flush decoder
               //vdecoder.queueInputBuffer(0, 0, 0, 0, MediaCodec.BUFFER_FLAG_END_OF_STREAM);

               outbufIdx = vdecoder.dequeueOutputBuffer(bufinfo, 1000000);//10000
               if(outbufIdx >= 0)
               {
                   vdecoder.releaseOutputBuffer(outbufIdx, true);      
               }  
               bufinfo = null;
               videoRendered = false;
               //
               Log.d("log", "videoRenderer terminated.");
           }

    And the ffmpeg setting at server at as follows.

    [slices] =  4       # --slices
    [threads] = 4       # --threads  
    [profile] = high        # --profile main|baseline
    [preset] = faster       # --preset faster|ultrafast
    [tune] = zerolatency    # --tune
  • Evolution #3818 (Fermé) : Redirection sur le formulaire d’inscription

    16 août 2016, par phe nix

    Hello,

    Il serait agréable d’avoir une option "redirect" (ou "redirect_validation" ?) sur le formulaire d’inscription. Cette redirection ce ferai au moment ou l’utilisateur valide son inscription.
    C’est assez systématique, lorsqu’une personne s’inscrit sur le site, on a envie de la rediriger quelque part : une page de bienvenue, son panier/commande en cours, etc.