Recherche avancée

Médias (0)

Mot : - Tags -/clipboard

Aucun média correspondant à vos critères n’est disponible sur le site.

Autres articles (47)

  • La file d’attente de SPIPmotion

    28 novembre 2010, par

    Une file d’attente stockée dans la base de donnée
    Lors de son installation, SPIPmotion crée une nouvelle table dans la base de donnée intitulée spip_spipmotion_attentes.
    Cette nouvelle table est constituée des champs suivants : id_spipmotion_attente, l’identifiant numérique unique de la tâche à traiter ; id_document, l’identifiant numérique du document original à encoder ; id_objet l’identifiant unique de l’objet auquel le document encodé devra être attaché automatiquement ; objet, le type d’objet auquel (...)

  • Contribute to documentation

    13 avril 2011

    Documentation is vital to the development of improved technical capabilities.
    MediaSPIP welcomes documentation by users as well as developers - including : critique of existing features and functions articles contributed by developers, administrators, content producers and editors screenshots to illustrate the above translations of existing documentation into other languages
    To contribute, register to the project users’ mailing (...)

  • Use, discuss, criticize

    13 avril 2011, par

    Talk to people directly involved in MediaSPIP’s development, or to people around you who could use MediaSPIP to share, enhance or develop their creative projects.
    The bigger the community, the more MediaSPIP’s potential will be explored and the faster the software will evolve.
    A discussion list is available for all exchanges between users.

Sur d’autres sites (7015)

  • Shows improper/corrupted TS segments from Opencv webcam and FFmpeg

    30 juin 2020, par playmaker420

    Im experimenting with opencv and ffmpeg to create a live hls stream from the webcam using some scripts

    


    The ffmpeg version i use is 3.4

    


    frame-detection.py

    


    import numpy as np
import cv2
import sys


cap = cv2.VideoCapture(0)

while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()
    framestring = frame.tostring()
    sys.stdout.write(str(framestring))

    # Display the resulting frame
    cv2.imshow('frame', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()


    


    hlslive_generator.sh

    


    #!/bin/bash

# Create folder from args
mkdir -p $1

# Get into the folder
cd $1

# Start running FFmpeg HLS Live streaming
python frame-detection.py | ffmpeg  \
  -f rawvideo \
  -framerate 10 \
  -video_size 640x480 \
  -i - foo.mp4  \
  -vcodec libx264 \
  -acodec copy \
  -pix_fmt yuv420p \
  -color_range 2 \
  -hls_time 1 \
  -hls_list_size 5 \
  -hls_flags delete_segments \
  -use_localtime 1 \
  -hls_segment_filename '%Y%m%d-%s.ts' \
  ./playlist.m3u8


    


    I used the following commands to run the scripts and it creates a folder and generate ts segments in it

    


    ./hlslive_generator.sh hlssegments


    


    The issue i face here is with the created ts files, on playing these segments with the video player it shows improper/corrupted segments.enter image description here

    


    Can someone help me to identify the issue ? Thanks in advance

    


  • fftools/ffmpeg : use a bsf list instead of individual bsfs

    17 avril 2020, par Marton Balint
    fftools/ffmpeg : use a bsf list instead of individual bsfs
    

    Signed-off-by : Marton Balint <cus@passwd.hu>

    • [DH] fftools/ffmpeg.c
    • [DH] fftools/ffmpeg.h
    • [DH] fftools/ffmpeg_opt.c
  • How to HLS-live-stream incoming batches of individual frames, "appending" to a m3u8 playlist in real time, with ffmpeg ?

    20 novembre 2024, par Rob

    My overall goal :

    &#xA;&#xA;

    Server-side :

    &#xA;&#xA;

      &#xA;
    • I have batches of sequential, JPEG-encoded frames (8-16) arriving from time to time, generated at roughly 2 FPS.
    • &#xA;

    • I would like to host an HLS live stream, where, when a new batch of frames arrives, I encode those new frames as h264 .ts segments with ffmpeg, and have the new .ts segments automatically added to an HLS stream (e.g. .m3u8 file).
    • &#xA;

    &#xA;&#xA;

    Client/browser-side :

    &#xA;&#xA;

      &#xA;
    • When the .m3u8 is updated, I would like the video stream being watched to simply "continue", advancing from the point where new .ts segments have been added.
    • &#xA;

    • I do not need the user to scrub backwards in time, the client just needs to support live observation of the stream.
    • &#xA;

    &#xA;&#xA;

    &#xA;&#xA;

    My current approach :

    &#xA;&#xA;

    Server-side :

    &#xA;&#xA;

    To generate the "first" few segments of the stream, I'm attempting the below (just command-line for now to get ffmpeg working right, but ultimately will be automated via a Python script) :

    &#xA;&#xA;

    For reference, I'm using ffmpeg version 3.4.6-0ubuntu0.18.04.1.

    &#xA;&#xA;

    ffmpeg -y -framerate 2 -i /frames/batch1/frame_%d.jpg \&#xA;       -c:v libx264 -crf 21 -preset veryfast -g 2 \&#xA;       -f hls -hls_time 4 -hls_list_size 4 -segment_wrap 4 -segment_list_flags &#x2B;live video/stream.m3u8&#xA;

    &#xA;&#xA;

    where the /frames/batch1/ folder contains a sequence of frames (e.g. frame_01.jpg, frame_02.jpg, etc...). This already doesn't appear to work correctly, because it keeps adding #EXT-X-ENDLIST to the end of the .m3u8 file, which as I understand is not correct for a live HLS stream - here's what that generates :

    &#xA;&#xA;

    #EXTM3U&#xA;#EXT-X-VERSION:3&#xA;#EXT-X-TARGETDURATION:4&#xA;#EXT-X-MEDIA-SEQUENCE:0&#xA;#EXTINF:4.000000,&#xA;stream0.ts&#xA;#EXTINF:4.000000,&#xA;stream1.ts&#xA;#EXTINF:2.000000,&#xA;stream2.ts&#xA;#EXT-X-ENDLIST&#xA;

    &#xA;&#xA;

    I can't figure out how to suppress #EXT-X-ENDLIST here - this is problem #1.

    &#xA;&#xA;

    Then, to generate subsequent segments (e.g. when new frames become available), I'm trying this :

    &#xA;&#xA;

    ffmpeg -y -framerate 2 -start_number 20 -i /frames/batch2/frame_%d.jpg \&#xA;       -c:v libx264 -crf 21 -preset veryfast -g 2 \&#xA;       -f hls -hls_time 4 -hls_list_size 4 -segment_wrap 4 -segment_list_flags &#x2B;live video/stream.m3u8&#xA;

    &#xA;&#xA;

    Unfortunately, this does not work the way I want it to. It simply overwrites stream.m3u8, does and does not advance #EXT-X-MEDIA-SEQUENCE, it does not index the new .ts files correctly, and it also includes the undesirable #EXT-X-ENDLIST - this is the output of that command :

    &#xA;&#xA;

    #EXTM3U&#xA;#EXT-X-VERSION:3&#xA;#EXT-X-TARGETDURATION:4&#xA;#EXT-X-MEDIA-SEQUENCE:0&#xA;#EXTINF:4.000000,&#xA;stream0.ts&#xA;#EXTINF:4.000000,&#xA;stream1.ts&#xA;#EXTINF:3.000000,&#xA;stream2.ts&#xA;#EXT-X-ENDLIST&#xA;

    &#xA;&#xA;

    Fundamentally, I can't figure out how to "append" to an existing .m3u8 in a way that makes sense for HLS live streaming. That's essentially problem #2.

    &#xA;&#xA;

    For hosting the stream, I'm using a simple Flask app - which appears to be working the way I intend - here's what I'm doing for reference :

    &#xA;&#xA;

    @app.route(&#x27;/video/&#x27;)&#xA;def stream(file_name):&#xA;    video_dir = &#x27;./video&#x27;&#xA;    return send_from_directory(directory=video_dir, filename=file_name)&#xA;

    &#xA;&#xA;

    Client-side :

    &#xA;&#xA;

    I'm trying HLS.js in Chrome - basically boils down to this :

    &#xA;&#xA;

    <video></video>&#xA;&#xA;...&#xA;&#xA;<code class="echappe-js">&lt;script src=&quot;https://cdn.jsdelivr.net/npm/hls.js@latest&quot;&gt;&lt;/script&gt;&#xA;&lt;script&gt;&amp;#xA;   var video = document.getElementById(&amp;#x27;video1&amp;#x27;);&amp;#xA;   if (Hls.isSupported()) {&amp;#xA;     var hls = new Hls();&amp;#xA;     hls.loadSource(&amp;#x27;/video/stream.m3u8&amp;#x27;);&amp;#xA;     hls.attachMedia(video);&amp;#xA;     hls.on(Hls.Events.MANIFEST_PARSED, function() {&amp;#xA;       video.play();&amp;#xA;     });&amp;#xA;   }&amp;#xA;   else if (video.canPlayType(&amp;#x27;application/vnd.apple.mpegurl&amp;#x27;)) {&amp;#xA;     video.src = &amp;#x27;/video/stream.m3u8&amp;#x27;;&amp;#xA;     video.addEventListener(&amp;#x27;loadedmetadata&amp;#x27;, function() {&amp;#xA;       video.play();&amp;#xA;     });&amp;#xA;   }&amp;#xA;&lt;/script&gt;   &#xA;

    &#xA;&#xA;

    I'd like to think that what I'm trying to do doesn't require a more complex approach than what I'm trying above, but since what I'm trying to far definitely isn't working, I'm starting to think I need to come at this from a different angle. Any ideas on what I'm missing ?

    &#xA;&#xA;

    Edit :

    &#xA;&#xA;

    I've also attempted the same (again in Chrome) with video.js, and am seeing similar behavior - in particular, when I manually update the backing stream.m3u8 (with no #EXT-X-ENDLIST tag), videojs never picks up the new changes to the live stream, and just buffers/hangs indefinitely.

    &#xA;&#xA;

    <video class="video-js vjs-default-skin" muted="muted" controls="controls">&#xA;    <source type="application/x-mpegURL" src="/video/stream.m3u8">&#xA;</source></video>&#xA;&#xA;...&#xA;&#xA;<code class="echappe-js">&lt;script&gt;&amp;#xA;    var player = videojs(&amp;#x27;video1&amp;#x27;);&amp;#xA;    player.play();&amp;#xA;&lt;/script&gt;&#xA;

    &#xA;&#xA;

    For example, if I start with this initial version of stream.m3u8 :

    &#xA;&#xA;

    #EXTM3U&#xA;#EXT-X-PLAYLIST-TYPE:EVENT&#xA;#EXT-X-VERSION:3&#xA;#EXT-X-TARGETDURATION:8&#xA;#EXT-X-MEDIA-SEQUENCE:0&#xA;#EXTINF:4.000000,&#xA;stream0.ts&#xA;#EXTINF:4.000000,&#xA;stream1.ts&#xA;#EXTINF:2.000000,&#xA;stream2.ts&#xA;

    &#xA;&#xA;

    and then manually update it server-side to this :

    &#xA;&#xA;

    #EXTM3U&#xA;#EXT-X-PLAYLIST-TYPE:EVENT&#xA;#EXT-X-VERSION:3&#xA;#EXT-X-TARGETDURATION:8&#xA;#EXT-X-MEDIA-SEQUENCE:3&#xA;#EXTINF:4.000000,&#xA;stream3.ts&#xA;#EXTINF:4.000000,&#xA;stream4.ts&#xA;#EXTINF:3.000000,&#xA;stream5.ts&#xA;

    &#xA;&#xA;

    the video.js control just buffers indefinitely after only playing the first 3 segments (stream*.ts 0-2), which isn't what I'd expect to happen (I'd expect it to continue playing stream*.ts 3-5 once stream.m3u8 is updated and video.js makes a request for the latest version of the playlist).

    &#xA;