
Recherche avancée
Médias (21)
-
1,000,000
27 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
Demon Seed
26 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
The Four of Us are Dying
26 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
Corona Radiata
26 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
Lights in the Sky
26 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
Head Down
26 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
Autres articles (41)
-
Publier sur MédiaSpip
13 juin 2013Puis-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 -
Les tâches Cron régulières de la ferme
1er décembre 2010, parLa gestion de la ferme passe par l’exécution à intervalle régulier de plusieurs tâches répétitives dites Cron.
Le super Cron (gestion_mutu_super_cron)
Cette tâche, planifiée chaque minute, a pour simple effet d’appeler le Cron de l’ensemble des instances de la mutualisation régulièrement. Couplée avec un Cron système sur le site central de la mutualisation, cela permet de simplement générer des visites régulières sur les différents sites et éviter que les tâches des sites peu visités soient trop (...) -
Emballe Médias : Mettre en ligne simplement des documents
29 octobre 2010, parLe plugin emballe médias a été développé principalement pour la distribution mediaSPIP mais est également utilisé dans d’autres projets proches comme géodiversité par exemple. Plugins nécessaires et compatibles
Pour fonctionner ce plugin nécessite que d’autres plugins soient installés : CFG Saisies SPIP Bonux Diogène swfupload jqueryui
D’autres plugins peuvent être utilisés en complément afin d’améliorer ses capacités : Ancres douces Légendes photo_infos spipmotion (...)
Sur d’autres sites (7465)
-
Is there any problem in my FFMPEG encoder client code ?
29 janvier 2024, par kyhnzI am trying to write code have function of capture video stream, encode as hevc265 and send to server as UDP :


// There can some unnecessary library imports, rule 1: If it is ok, don't touch it!

#include <iostream>
#include <sys></sys>types.h>
#include 
#include <cstring>
#include <sys></sys>socket.h>
#include <arpa></arpa>inet.h>
#include <netinet></netinet>in.h> 
#include <string>
#include <cstdlib>
#include <cstdio>

extern "C"
{
#include <libavutil></libavutil>frame.h>
#include <libavdevice></libavdevice>avdevice.h>
#include <libavformat></libavformat>avformat.h>
#include <libavcodec></libavcodec>avcodec.h>
#include <libavutil></libavutil>imgutils.h>
#include <libavcodec></libavcodec>packet.h>
#include <libavcodec></libavcodec>codec_id.h>
#include <libavutil></libavutil>error.h>
#include <libavutil></libavutil>error.h>
#include <libavutil></libavutil>opt.h>
}

#define PORT 9999
#define IP_ADDRESS "127.0.0.1"

using namespace std;

int main(){
 const int width = 1080;
 const int height = 720;
 const int fps = 18; 
 const auto resulation = "1080x720";
 const auto device = "/dev/video0";
 const auto format = "v4l2";
 const AVCodecID codec_id = AV_CODEC_ID_H265;

 avdevice_register_all();
 avformat_network_init();
 AVFormatContext *formatContext = nullptr;

 AVDictionary *format_opts = nullptr;
 av_dict_set(&format_opts, "framerate", "18", 0);;
 av_dict_set(&format_opts, "video_size", resulation, 0);
 
 const AVInputFormat *inputFormat = av_find_input_format(format);
 if (!inputFormat)
 {
 cerr << "Unknown input format: " << format << endl;
 return 1;
 }
 cout << "Input format: "<< format << endl;

 const AVCodec *codec = avcodec_find_encoder(codec_id);
 if (!codec) {
 cerr << "Codec can't find "<< codec_id << endl;
 return 1;
 }
 cout << "Found codec: "<< codec_id << endl;

 AVCodecContext *avctx = avcodec_alloc_context3(codec);
 if (!avctx) {
 cerr << "Error: Could not create encoder!" << endl;
 return 1;
 }
 cout << "Create encoder. " << endl;


 avctx->bit_rate = 1000000;
 avctx->width = width; 
 avctx->height = height; 
 avctx->pix_fmt = AV_PIX_FMT_YUV420P; 
 avctx->time_base = (AVRational){1, fps};
 avctx->framerate = (AVRational){fps, 1};
 avctx->gop_size = fps*2;
 avctx->refs = 3;

 av_opt_set(avctx->priv_data, "preset", "medium", 0);
 av_opt_set(avctx->priv_data, "crf", "18", 0);
 av_opt_set(avctx->priv_data, "tune", "zerolatency", 0);

 if (avcodec_open2(avctx, codec, nullptr) < 0) {
 cerr << "Error: Couldn't open codec" << endl;
 return 1;
 }
 cout << "Open codec succesfully." << endl;

 int open_input = avformat_open_input(&formatContext, device,
 const_cast<avinputformat>(inputFormat), &format_opts);
 if (open_input != 0)
 {
 cerr << "Device cant open " << device << endl;
 return 1;
 }
 cout << "Device active: " << device <width = avctx->width;
 frame->height = avctx->height;
 frame->format = avctx->pix_fmt;

 if(av_frame_get_buffer(frame, 0) != 0){
 cerr << "Error: video frame " << endl;
 return 1;
 }cout << "Video frame has been created." << endl;

 if(av_frame_make_writable(frame) != 0){
 cerr << "Error: frame is not writable" << endl;
 return 1;
 }

 AVPacket *packet= av_packet_alloc();
 if (!packet) {
 cerr << "error: has not been created packet" << endl;
 }

 av_dump_format(formatContext, 0, device, 0);
 av_dict_free(&format_opts);
 
 int socket_client = socket(AF_INET, SOCK_DGRAM, 0);
 if (socket_client == -1) {
 cerr << "Error: socket!" << endl;
 exit(EXIT_FAILURE);
 }
 cout << "Socket has been created" << endl;

 struct sockaddr_in serverAddr = {0};
 serverAddr.sin_family = AF_INET;
 serverAddr.sin_port = htons(PORT);
 serverAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS);

 while (true) {
 if (av_read_frame(formatContext, packet) != 0) {
 cerr << "Error" << endl;
 av_packet_unref(packet);
 continue;
 }

 frame->data[7] = packet->data; 
 frame->linesize[7] = packet->size;

 if (avcodec_send_frame(avctx, frame) != 0){
 cerr << "Error: Frame sending is missing ---> "<< &av_strerror << endl;
 av_packet_unref(packet);
 continue;
 }

 if (avcodec_receive_packet(avctx, packet) != 0){
 cerr << "Error: Packet giving is missing! ---> " << &av_strerror << endl;
 av_packet_unref(packet);
 continue;
 }

 ssize_t snd = sendto(socket_client, packet->data, packet->size,
 MSG_CONFIRM, (struct sockaddr *)&serverAddr,
 sizeof(serverAddr));

 if(snd == -1){
 cerr << "Error: Data sending failed !" << endl;
 av_packet_unref(packet);
 continue;
 }else {
 cout << "Data sending succesfully" << endl;
 }

 av_packet_unref(packet);
 av_frame_unref(frame);
 }

 av_frame_free(&frame);
 av_packet_free(&packet);
 close(socket_client);
 avformat_free_context(formatContext);
 avformat_close_input(&formatContext);
 avformat_network_deinit();

 return 0;
}
</avinputformat></cstdio></cstdlib></string></cstring></iostream>


There is such an output, I do not understand the reason yet :


[video4linux2,v4l2 @ 0x643732e80b40] The V4L2 driver changed the video from 1080x720 to 1280x720
[video4linux2,v4l2 @ 0x643732e80b40] The V4L2 driver changed the video from 1280x720 to 640x480
[video4linux2,v4l2 @ 0x643732e80b40] The driver changed the time per frame from 1/18 to 1/30



Is there any problem in my encoder client code ?


In addition, i can't send datas to server.


-
Motion : Raspian webcam Unable to find a compatible palette format
25 juin 2018, par mrtumnusI am trying to get a Creative Live ! Motion webcam working on a Raspberry Pi 3 B+.
fswebcam
andmotion
both give an error, "Unable to find a compatible palette format".ffmpeg
, on the other hand, is able to easily capture video from the webcam.Device info :
$ lsusb
Bus 001 Device 004: ID 041e:4041 Creative Technology, Ltd Webcam Live! Motion`
$ v4l2-ctl --all
Driver Info (not using libv4l2):
Driver name : sq930x
Card type : Creative WebCam Live! Motion
Bus info : usb-3f980000.usb-1.2
Driver version: 4.14.34
Capabilities : 0x85200001
Video Capture
Read/Write
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x05200001
Video Capture
Read/Write
Streaming
Extended Pix Format
Priority: 2
Video input : 0 (sq930x: ok)
Format Video Capture:
Width/Height : 640/480
Pixel Format : 'RGGB'
Field : None
Bytes per Line : 640
Size Image : 307200
Colorspace : sRGB
Transfer Function : Default
YCbCr/HSV Encoding: Default
Quantization : Default
Flags :
Streaming Parameters Video Capture:
Frames per second: invalid (0/0)
Read buffers : 2
User Controls
exposure (int) : min=1 max=4095 step=1 default=854 value=854
gain (int) : min=1 max=255 step=1 default=141 value=141Log of
motion
failure to open device :$ cat /var/log/motion/motion.log
[0:motion] [NTC] [ALL] [Jun 24 16:16:42] motion_startup: Using log type (ALL) log level (NTC)
[0:motion] [NTC] [ENC] [Jun 24 16:16:42] ffmpeg_init: ffmpeg libavcodec version 57.48.101 libavformat version 57.41.100
[0:motion] [NTC] [ALL] [Jun 24 16:16:42] main: Motion running in setup mode.
[0:motion] [NTC] [ALL] [Jun 24 16:16:42] main: Camera 0 is from /etc/motion/motion.conf
[0:motion] [NTC] [ALL] [Jun 24 16:16:42] main: Camera 0 is device: /dev/video0 input -1
[0:motion] [NTC] [ALL] [Jun 24 16:16:42] main: Stream port 8081
[0:motion] [NTC] [ALL] [Jun 24 16:16:42] main: Waiting for threads to finish, pid: 12067
[0:web_control] [NTC] [STR] [Jun 24 16:16:42] http_bindsock: listening on 127.0.0.1 port 8080
[1:ml1] [NTC] [ALL] [Jun 24 16:16:42] motion_init: Camera 0 started: motion detection Enabled
[0:web_control] [NTC] [STR] [Jun 24 16:16:42] httpd_run: Started motion-httpd server on port 8080 (auth Disabled)
[1:ml1] [NTC] [VID] [Jun 24 16:16:42] vid_v4lx_start: Using videodevice /dev/video0 and input -1
[1:ml1] [NTC] [VID] [Jun 24 16:16:42] v4l2_get_capability:
------------------------
cap.driver: "sq930x"
cap.card: "Creative WebCam Live! Motion"
cap.bus_info: "usb-3f980000.usb-1.2"
cap.capabilities=0x85200001
------------------------
[1:ml1] [NTC] [VID] [Jun 24 16:16:42] v4l2_get_capability: - VIDEO_CAPTURE
[1:ml1] [NTC] [VID] [Jun 24 16:16:42] v4l2_get_capability: - READWRITE
[1:ml1] [NTC] [VID] [Jun 24 16:16:42] v4l2_get_capability: - STREAMING
[1:ml1] [NTC] [VID] [Jun 24 16:16:42] v4l2_select_input: name = "sq930x", type 0x00000002, status 00000000
[1:ml1] [NTC] [VID] [Jun 24 16:16:42] v4l2_select_input: - CAMERA
[1:ml1] [WRN] [VID] [Jun 24 16:16:42] v4l2_select_input: Device doesn't support VIDIOC_G_STD
[1:ml1] [NTC] [VID] [Jun 24 16:16:42] v4l2_set_pix_format: Config palette index 17 (YU12) doesn't work.
[1:ml1] [NTC] [VID] [Jun 24 16:16:42] v4l2_set_pix_format: Supported palettes:
[1:ml1] [NTC] [VID] [Jun 24 16:16:42] v4l2_set_pix_format: (0) RGGB (8-bit Bayer RGRG/GBGB)
[1:ml1] [NTC] [VID] [Jun 24 16:16:42] v4l2_set_pix_format: 0 - 8-bit Bayer RGRG/GBGB (compressed : 0) (0x42474752)
[1:ml1] [ERR] [VID] [Jun 24 16:16:42] v4l2_set_pix_format: Unable to find a compatible palette format.
[1:ml1] [NTC] [VID] [Jun 24 16:16:42] vid_v4lx_start: Using V4L1
[1:ml1] [NTC] [ALL] [Jun 24 16:16:42] image_ring_resize: Resizing pre_capture buffer to 1 items
[1:ml1] [ERR] [ALL] [Jun 24 16:16:52] motion_init: Error capturing first image
[1:ml1] [NTC] [STR] [Jun 24 16:16:52] http_bindsock: listening on 127.0.0.1 port 8081
[1:ml1] [NTC] [ALL] [Jun 24 16:16:52] motion_init: Started motion-stream server on port 8081 (auth Disabled)
[1:ml1] [ERR] [ALL] [Jun 24 16:16:52] motion_loop: Video device fatal error - Closing video device
[1:ml1] [NTC] [VID] [Jun 24 16:16:52] vid_close: Closing video device /dev/video0Successful
ffmpeg
recording :$ ffmpeg -i /dev/video0 test.mp4
ffmpeg version 3.2.10-1~deb9u1+rpt1 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 6.3.0 (Raspbian 6.3.0-18+rpi1) 20170516
configuration: --prefix=/usr --extra-version='1~deb9u1+rpt1' --toolchain=hardened --libdir=/usr/lib/arm-linux-gnueabihf --incdir=/usr/include/arm-linux-gnueabihf --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libebur128 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx-rpi --enable-mmal --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
libavutil 55. 34.101 / 55. 34.101
libavcodec 57. 64.101 / 57. 64.101
libavformat 57. 56.101 / 57. 56.101
libavdevice 57. 1.100 / 57. 1.100
libavfilter 6. 65.100 / 6. 65.100
libavresample 3. 1. 0 / 3. 1. 0
libswscale 4. 2.100 / 4. 2.100
libswresample 2. 3.100 / 2. 3.100
libpostproc 54. 1.100 / 54. 1.100
[video4linux2,v4l2 @ 0x16035c0] Time per frame unknown
Input #0, video4linux2,v4l2, from '/dev/video0':
Duration: N/A, start: 2523.746120, bitrate: N/A
Stream #0:0: Video: rawvideo ([186]RG[8] / 0x84752BA), bayer_rggb8, 640x480, 25.42 tbr, 1000k tbn, 1000k tbcRelated questions :
-
avcodec/v4l2 : set sizeimage param for non-raw buffers [fixes #6716]
4 octobre 2017, par Jorge Ramirez-Ortizavcodec/v4l2 : set sizeimage param for non-raw buffers [fixes #6716]
Some V4L2 drivers fail to allocate buffers when sizeimage is not set
to a max value. This is indeed the case for s5p-mfc [1]Most drivers should be able to calculate this value from the frame
dimensions and format - or at least have their own default.However since this work around should not impact those drivers doing
the "right thing" this commit just provides such a default.The calculations were extracted from the v4l2 driver used to develop
the ffmpeg v4l2_m2m support [2]. See venc.c and vdec.c[1] linux.git/drivers/media/platform/s5p-mfc
[2] linux.git/drivers/media/platform/qcom/venus/