Recherche avancée

Médias (91)

Autres articles (45)

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

  • Support audio et vidéo HTML5

    10 avril 2011

    MediaSPIP utilise les balises HTML5 video et audio pour la lecture de documents multimedia en profitant des dernières innovations du W3C supportées par les navigateurs modernes.
    Pour les navigateurs plus anciens, le lecteur flash Flowplayer est utilisé.
    Le lecteur HTML5 utilisé a été spécifiquement créé pour MediaSPIP : il est complètement modifiable graphiquement pour correspondre à un thème choisi.
    Ces technologies permettent de distribuer vidéo et son à la fois sur des ordinateurs conventionnels (...)

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

  • tests/api/api-codec-param-test : Do not directly access caps_internal

    16 juin 2016, par Michael Niedermayer
    tests/api/api-codec-param-test : Do not directly access caps_internal
    

    The caps_internal field has moved without major bump and direct
    access causes crashes, found when testing 3.1

    Signed-off-by : Michael Niedermayer <michael@niedermayer.cc>

    • [DH] tests/api/api-codec-param-test.c
  • avcodec/videotoolboxenc : Fix concurrent access to CVPixelBufferRef

    7 juillet 2024, par Zhao Zhili
    avcodec/videotoolboxenc : Fix concurrent access to CVPixelBufferRef
    

    For a frame comes from AV_HWDEVICE_TYPE_VIDEOTOOLBOX, it's
    CVPixelBufferRef is maintained by a pool. CVPixelBufferRef returned
    to the pool when frame buffer reference reached to zero. However,
    VTCompressionSessionEncodeFrame also hold a reference to the
    CVPixelBufferRef. So a new frame get from av_hwframe_get_buffer
    may access a CVPixelBufferRef which still used by the encoder.
    It's only after vtenc_output_callback that we can make sure
    CVPixelBufferRef has been released by the encoder.

    The issue can be tested with sample from trac #10884.
    ffmpeg -hwaccel videotoolbox \
    -hwaccel_output_format videotoolbox_vld \
    -i input.mp4 \
    -c:v hevc_videotoolbox \
    -profile:v main \
    -b:v 3M \
    -vf scale_vt=w=iw/2:h=ih/2:color_matrix=bt709:color_primaries=bt709:color_transfer=bt709 \
    -c:a copy \
    -tag:v hvc1 \
    output.mp4

    Withtout the patch, there are some out of order images in output.mp4.

    Signed-off-by : Zhao Zhili <zhilizhao@tencent.com>

    • [DH] libavcodec/videotoolboxenc.c
  • Google App Engine - Access file after uploaded to bucket

    28 mai 2021, par jessiPP

    I have uploaded a file using my google app engine backend to my storage bucket but now I cannot access the file to pass in into ffmpeg. I am getting this error message from the try-catch : "The input file does not exist". I can see that the file was uploaded because I checked my developer console under the storage bucket. I am using the boilerplate code provided by google but added the ffmpeg for testing. I am trying to access the path to the uploaded file using, but it is incorrect, though I am getting the bucket.name value and the blob.name value. I am using the "flex" environment for this.

    &#xA;

    const originalFilePath = `gs://${bucket.name}/${blob.name}`; &#xA;

    &#xA;

    here is the full code :

    &#xA;

    const process = require(&#x27;process&#x27;); // Required to mock environment variables&#xA;const express = require(&#x27;express&#x27;);&#xA;const helpers = require(&#x27;./helpers/index&#x27;);&#xA;const Multer = require(&#x27;multer&#x27;);&#xA;const bodyParser = require(&#x27;body-parser&#x27;);&#xA;const ffmpeg = require("ffmpeg"); //https://www.npmjs.com/package/ffmpeg&#xA;const {Storage} = require(&#x27;@google-cloud/storage&#x27;);&#xA;&#xA;// Instantiate a storage client&#xA;const storage = new Storage();&#xA;&#xA;const app = express();&#xA;app.set(&#x27;view engine&#x27;, &#x27;pug&#x27;);&#xA;app.use(bodyParser.json());&#xA;&#xA;// Multer is required to process file uploads and make them available via&#xA;// req.files.&#xA;const multer = Multer({&#xA;storage: Multer.memoryStorage(),&#xA; limits: {&#xA;  fileSize: 5 * 1024 * 1024, // no larger than 5mb, you can change as needed.&#xA; },&#xA;});&#xA;&#xA;// A bucket is a container for objects (files).&#xA;const bucket = storage.bucket(process.env.GCLOUD_STORAGE_BUCKET);&#xA;&#xA;// Display a form for uploading files.&#xA;app.get(&#x27;/&#x27;, (req, res) => {&#xA; res.render(&#x27;form.pug&#x27;);&#xA;});&#xA;&#xA;// Process the file upload and upload to Google Cloud Storage.&#xA;app.post(&#x27;/upload&#x27;, multer.single(&#x27;file&#x27;), (req, res, next) => {&#xA;&#xA;if (!req.file) {&#xA; res.status(400).send(&#x27;No file uploaded.&#x27;);&#xA; return;&#xA;}&#xA;&#xA;// Create a new blob in the bucket and upload the file data.&#xA;const blob = bucket.file(req.file.originalname);&#xA;const blobStream = blob.createWriteStream({&#xA; resumable: false,&#xA;});&#xA;&#xA;blobStream.on(&#x27;error&#x27;, err => {&#xA; next(err);&#xA;});&#xA;&#xA;blobStream.on(&#x27;finish&#x27;, () => {&#xA;&#xA;const audioFile = helpers.replaceAllExceptNumbersAndLetters(new Date());&#xA;&#xA;// this path is incorrect but I cannot find correct way to do it&#xA;const originalFilePath = `gs://${bucket.name}/${blob.name}`; &#xA;&#xA;const filePathOutput = `gs://${bucket.name}/${audioFile}.mp3`;&#xA;&#xA;try {&#xA; const process = new ffmpeg(originalFilePath);&#xA; process.then(function (video) {&#xA; // Callback mode&#xA; video.fnExtractSoundToMP3(filePathOutput, (error, file) => {&#xA; if (!error)&#xA;  res.send(`audio file: ${file}`);&#xA; });&#xA;}, (error) => {&#xA; res.send(`process error: ${error}`);&#xA;&#xA;});&#xA;} catch (e) {&#xA; res.send(`try catch error: ${JSON.stringify(e)} | bucket: ${JSON.stringify(bucket)} | &#xA; blob: : ${JSON.stringify(blob)}`);&#xA;}  &#xA;&#xA;&#xA;});&#xA;&#xA;blobStream.end(req.file.buffer);&#xA;&#xA;});&#xA;&#xA;const PORT = process.env.PORT || 8080;&#xA;app.listen(PORT, () => {&#xA; console.log(`App listening on port ${PORT}`);&#xA; console.log(&#x27;Press Ctrl&#x2B;C to quit.&#x27;);&#xA;});&#xA;&#xA;&#xA;module.exports = app;&#xA;

    &#xA;