
Recherche avancée
Médias (1)
-
Richard Stallman et le logiciel libre
19 octobre 2011, par
Mis à jour : Mai 2013
Langue : français
Type : Texte
Autres articles (60)
-
Participer à sa traduction
10 avril 2011Vous 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 (...) -
Des sites réalisés avec MediaSPIP
2 mai 2011, parCette 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. -
Les autorisations surchargées par les plugins
27 avril 2010, parMediaspip core
autoriser_auteur_modifier() afin que les visiteurs soient capables de modifier leurs informations sur la page d’auteurs
Sur d’autres sites (7487)
-
How to send ffmpeg AVPacket through WebRTC (using libdatachannel)
14 novembre 2022, par mikeI'm encoding a video frame with the
ffmpeg
libraries, generating anAVPacket
with compressed data.

Thanks to some recent advice here on S/O, I am trying to send that frame over a network using the
WebRTC
librarylibdatachannel
, specifically by adapting the example here :

https://github.com/paullouisageneau/libdatachannel/tree/master/examples/streamer


I am seeing problems inside
h264rtppacketizer.cpp
(part of the library, not the example) which are almost certainly to do with how I'm providing the sample data.
(I don't think that this is anything to do with libdatachannel specifically, it will be an issue with what I'm sending)

The example code reads each encoded frame from a file, and populates a
sample
by setting the content of the file to the contents of the file :

sample = *reinterpret_cast *>(&fileContents);


sample
is just astd::vector<byte>;</byte>


I have naively copied the contents of an
AVPacket->data
pointer into thesample
vector :

sample.resize(pkt->size);
memcpy(sample.data(), pkt->data, pkt->size * sizeof(std::byte)); 



but the packetizer is falling over when trying to get length values out of that data.
Specifically, in the following code, the first iteration gets a length of 1, but the second, looking up index 5, gives 1119887324. This is way too big for my data, which is only 3526 bytes (the whole frame is a single colour so likely to be small once encoded) :


while (index < message->size()) {
assert(index + 4 < message->size());
auto lengthPtr = (uint32_t *)(message->data() + index);
uint32_t length = ntohl(*lengthPtr);
auto naluStartIndex = index + 4;
auto naluEndIndex = naluStartIndex + length;
assert(naluEndIndex <= message->size()); 
 
auto begin = message->begin() + naluStartIndex;
auto end = message->begin() + naluEndIndex;
nalus->push_back(std::make_shared<nalunit>(begin, end));
index = naluEndIndex;
}
</nalunit>


Here is a dump of


uint32_t length = ntohl(*lengthPtr);



for the first few elements of the message (
*lengthPtr
in parentheses) :

[2022-03-29 15:12:01.182] [info] index 0: 1 (16777216)
[2022-03-29 15:12:01.183] [info] index 1: 359 (1728118784)
[2022-03-29 15:12:01.184] [info] index 2: 91970 (1114046720)
[2022-03-29 15:12:01.186] [info] index 3: 23544512 (3225577217)
[2022-03-29 15:12:01.186] [info] index 4: 1732427807 (532693607)
[2022-03-29 15:12:01.187] [info] index 5: 1119887324 (3693068354)
[2022-03-29 15:12:01.188] [info] index 6: 3223313413 (98312128)
[2022-03-29 15:12:01.188] [info] index 7: 534512896 (384031)
[2022-03-29 15:12:01.188] [info] index 8: 3691315291 (1526728156)
[2022-03-29 15:12:01.189] [info] index 9: 83909537 (2707095557)
[2022-03-29 15:12:01.189] [info] index 10: 6004992 (10574592)
[2022-03-29 15:12:01.190] [info] index 11: 1537277952 (41307)
[2022-03-29 15:12:01.190] [info] index 12: 2701131779 (50331809)
[2022-03-29 15:12:01.192] [info] index 13: 768 (196608)



(I know I should post a complete sample, I am working on it)


- 

-
I am fairly sure I am just missing something basic. E.g. am I supposed to do something with the
AVPacket
side_data
, does AVPacket have or miss some header info ?

-
If I just
fwrite
thepkt->data
for a single frame to disk, I can read the codec information withffprobe
:







Input #0, h264, from 'encodedOut.h264':
Duration: N/A, bitrate: N/A
Stream #0:0: Video: h264 (Constrained Baseline), yuv420p(progressive), 1280x720, 30 tbr, 1200k tbn



Update : This issue is solved by changing the
H264RtpPacketizer
separator setting fromH264RtpPacketizer::Separator::Length
toH264RtpPacketizer::Separator::LongStartSequence
, many thanks to author of libdatachannel paullouisageneau (see answer below)

I have issues related to settings for the
libx264
encoder, but can happily encode withh264_nvenc
andh264_mf


-
-
Padding thumbnail with color
I know, it’s been a while since I last blogged. This is because a lot of things are happening in my personal life. I recently relocated to London from Finland and started a new job. Things are quite busy but I will try to post an example now and then. In the meanwhile I would like to hear about sites using Imagick, so if your project is not super secret please post an url and maybe a small explanation what you’re doing with Imagick on the site. This is purely for my personal interest.
Anyway, to the point. Today’s example originates from a question asked by a user. How do I thumbnail the image inside given dimensions proportionally and fill the “blank” areas with a color ? Well, the answer is here
The code is for Imagick 2.1.0 but adapting to older versions should not be hard.
-
< ?php
-
/* Define width and height of the thumbnail */
-
$width = 100 ;
-
$height = 100 ;
-
-
/* Instanciate and read the image in */
-
$im = new Imagick( "test.png" ) ;
-
-
/* Fit the image into $width x $height box
-
The third parameter fits the image into a "bounding box" */
-
$im->thumbnailImage( $width, $height, true ) ;
-
-
/* Create a canvas with the desired color */
-
$canvas = new Imagick() ;
-
$canvas->newImage( $width, $height, ’pink’, ’png’ ) ;
-
-
/* Get the image geometry */
-
$geometry = $im->getImageGeometry() ;
-
-
/* The overlay x and y coordinates */
-
$x = ( $width - $geometry[’width’] ) / 2 ;
-
$y = ( $height - $geometry[’height’] ) / 2 ;
-
-
/* Composite on the canvas */
-
$canvas->compositeImage( $im, imagick: :COMPOSITE_OVER, $x, $y ) ;
-
-
/* Output the image*/
-
header( "Content-Type : image/png" ) ;
-
echo $canvas ;
-
-
?>
-
-
How to extract anamorphic video frame correctly using ffmpeg ?
12 mai 2019, par user10246830I can extract the frames using below ffmpeg but it comes out 720x576 square pixel instead of anamorphic non-square 1024x576. How do I output 720x576 rectangle pixel as shown on TV ?
How do i deinterlace the frames as output is interlaced ?
ffmpeg -i Midnight.vob -vf fps=1,setdar=16:9 -q:v 2 Midnight%06d.jpg
How do i deal with this below in ffmpeg.
[swscaler @ 0000000002a8ec40] deprecated pixel format used, make sure
you did set range correctly. Video : mjpeg, yuvj420p(pc).Am I to understand that the video colour format is out of date and that (pc) is the range 0-255 for colours ?
ffmpeg -i Midnight.vob -vf fps=1,setdar=16:9 -q:v 2 Midnight%06d.jpg ffmpeg version N-93828-g68bac50604 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 8.3.1 (GCC) 20190414 configuration: --enable-gpl
--enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt libavutil 56. 26.101 / 56. 26.101 libavcodec 58. 52.101 / 58.
52.101 libavformat 58. 27.103 / 58. 27.103 libavdevice 58. 7.100 / 58. 7.100 libavfilter 7. 50.100 / 7. 50.100 libswscale 5. 4.100 / 5. 4.100 libswresample 3. 4.100 / 3. 4.100 libpostproc 55. 4.100 / 55. 4.100 Input #0, mpeg, from 'Midnight.vob': Duration: 00:42:04.58, start: 0.287267, bitrate: 5829 kb/s
Stream #0:0[0x1bf]: Data: dvd_nav_packet
Stream #0:1[0x1e0]: Video: mpeg2video (Main), yuv420p(tv, top first), 720x576 [SAR 64:45 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
Stream #0:2[0x80]: Audio: ac3, 48000 Hz, 5.1(side), fltp, 384 kb/s
Stream #0:3[0x81]: Audio: ac3, 48000 Hz, 5.1(side), fltp, 384 kb/s
Stream #0:4[0x82]: Audio: ac3, 48000 Hz, mono, fltp, 192 kb/s
Stream #0:5[0x22]: Subtitle: dvd_subtitle
Stream #0:6[0x24]: Subtitle: dvd_subtitle
Stream #0:7[0x25]: Subtitle: dvd_subtitle
Stream #0:8[0x26]: Subtitle: dvd_subtitle
Stream #0:9[0x28]: Subtitle: dvd_subtitle
Stream #0:10[0x21]: Subtitle: dvd_subtitle
Stream #0:11[0x23]: Subtitle: dvd_subtitle Stream mapping: Stream #0:1 -> #0:0 (mpeg2video (native) -> mjpeg (native)) Press [q] to stop, [?] for help [swscaler @ 000000000295ec40] deprecated pixel format used, make sure you did set range correctly Output #0, image2, to 'Midnight%06d.jpg': Metadata:
encoder : Lavf58.27.103
Stream #0:0: Video: mjpeg, yuvj420p(pc), 720x576 [SAR 36:5 DAR 9:1], q=2-31, 200 kb/s, 1 fps, 1 tbn, 1 tbc
Metadata:
encoder : Lavc58.52.101 mjpeg
Side data:
cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1 [mpeg @ 0000000000400340] New subtitle stream 0:12 at pos:7458830 and DTS:12.4873s [mpeg @ 0000000000400340] New subtitle stream 0:13 at pos:7475214 and DTS:12.4873s frame= 951 fps=115 q=2.0 Lsize=N/A time=00:15:51.00 bitrate=N/A speed= 115x
video:49190kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknownSettled on for large jpg to render then shrink to 1024x576. If deinterlace remove yadif=1.
ffmpeg -i input.vob -vf yadif=1,scale=4096x2304,setdar=16:9 -qmin 1 -q:v 1 output%06d.jpg
Jpg is original size 1024x576 square pixel.
ffmpeg -i input.vob -vf yadif=1,fps=1,scale=iw*sar:ih,setsar=1 -qmin 1 -q:v 1 output%06d.jpg
Png gives better quality over jpg.
Thanks for your contributions.