
Recherche avancée
Médias (91)
-
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
-
Echoplex
26 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
Discipline
26 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
Letting You
26 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
Autres articles (57)
-
Keeping control of your media in your hands
13 avril 2011, parThe vocabulary used on this site and around MediaSPIP in general, aims to avoid reference to Web 2.0 and the companies that profit from media-sharing.
While using MediaSPIP, you are invited to avoid using words like "Brand", "Cloud" and "Market".
MediaSPIP is designed to facilitate the sharing of creative media online, while allowing authors to retain complete control of their work.
MediaSPIP aims to be accessible to as many people as possible and development is based on expanding the (...) -
Personnaliser les catégories
21 juin 2013, parFormulaire de création d’une catégorie
Pour ceux qui connaissent bien SPIP, une catégorie peut être assimilée à une rubrique.
Dans le cas d’un document de type catégorie, les champs proposés par défaut sont : Texte
On peut modifier ce formulaire dans la partie :
Administration > Configuration des masques de formulaire.
Dans le cas d’un document de type média, les champs non affichés par défaut sont : Descriptif rapide
Par ailleurs, c’est dans cette partie configuration qu’on peut indiquer le (...) -
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
Sur d’autres sites (11671)
-
Error in video streaming using libavformat : VBV buffer size not set, muxing may fail
18 octobre 2017, par Blue SkyI stream a video using libavformat as follows :
static AVStream *add_stream(AVFormatContext *oc, AVCodec **codec,
enum AVCodecID codec_id)
{
AVCodecContext *c;
AVStream *st;
/* find the encoder */
*codec = avcodec_find_encoder(codec_id);
if (!(*codec)) {
fprintf(stderr, "Could not find encoder for '%s'\n",
avcodec_get_name(codec_id));
exit(1);
}
st = avformat_new_stream(oc, *codec);
if (!st) {
fprintf(stderr, "Could not allocate stream\n");
exit(1);
}
st->id = oc->nb_streams-1;
c = st->codec;
switch ((*codec)->type) {
case AVMEDIA_TYPE_AUDIO:
c->sample_fmt = (*codec)->sample_fmts ?
(*codec)->sample_fmts[0] : AV_SAMPLE_FMT_FLTP;
c->bit_rate = 64000;
c->sample_rate = 44100;
c->channels = 2;
break;
case AVMEDIA_TYPE_VIDEO:
c->codec_id = codec_id;
c->bit_rate = 400000;
/* Resolution must be a multiple of two. */
c->width = outframe_width;
c->height = outframe_height;
/* timebase: This is the fundamental unit of time (in seconds) in terms
* of which frame timestamps are represented. For fixed-fps content,
* timebase should be 1/framerate and timestamp increments should be
* identical to 1. */
c->time_base.den = STREAM_FRAME_RATE;
c->time_base.num = 1;
c->gop_size = 12; /* emit one intra frame every twelve frames at most */
c->pix_fmt = STREAM_PIX_FMT;
if (c->codec_id == AV_CODEC_ID_MPEG2VIDEO) {
/* just for testing, we also add B frames */
c->max_b_frames = 2;
}
if (c->codec_id == AV_CODEC_ID_MPEG1VIDEO) {
/* Needed to avoid using macroblocks in which some coeffs overflow.
* This does not happen with normal video, it just happens here as
* the motion of the chroma plane does not match the luma plane. */
c->mb_decision = 2;
}
break;
default:
break;
}
/* Some formats want stream headers to be separate. */
if (oc->oformat->flags & AVFMT_GLOBALHEADER)
c->flags |= CODEC_FLAG_GLOBAL_HEADER;
return st;
}But when I run this code, I get the following error/warning :
[mpeg @ 01f3f040] VBV buffer size not set, muxing may fail
Do you know how I can set the VBV buffer size in the code ? In fact, when I use ffplay to display the streamed video, ffplay doesn’t show anything for short videos but for long videos, it start displaying the video immediately. So, it looks like ffplay needs a buffer to be filled up by some amount so that it can start displaying the stream. Am I right ?
-
ffmpeg / libav encoding 264 from YUV420P [on hold]
4 janvier 2017, par MrSmithI am having issues getting this thing to encode correctly. Either I get the container wrong or the content it seems.
This code encodes a file just fine, but viewing it with VLC or Totem will just yield the first picture, not the remaining 100 frames.
This is a step up from before as I dont get warnings that my container (mp4) is borked, however now the video wont play at all.. at least it played before :).If someone could put a finger somewhere on this code and call me a dumbass, that would be nice :)
void encode_video(char *carrarr[]){
av_log_set_level(AV_LOG_DEBUG);
av_register_all();
avcodec_register_all();
AVCodec *codec = avcodec_find_encoder(AV_CODEC_ID_H264);
AVOutputFormat * outputFormat = av_guess_format("mp4", NULL, NULL);
int test = avformat_alloc_output_context2(&outFmtCtx, outputFormat, NULL, NULL);
if(test<0) exit(-1);
AVStream * outStrm = avformat_new_stream(outFmtCtx, codec);
avcodec_get_context_defaults3(outStrm->codec, codec);
outStrm->codec->codec_id = AV_CODEC_ID_H264;
outStrm->codec->coder_type = AVMEDIA_TYPE_VIDEO;
outStrm->codec->bit_rate = 400000;
outStrm->codec->width = 320;
outStrm->codec->height = 240;
outStrm->codec->time_base= (AVRational){1,25};
outStrm->time_base=(AVRational){1,25};
outStrm->codec->gop_size = 10; // emit one intra frame every ten frames
outStrm->codec->max_b_frames=1;
outStrm->codec->pix_fmt = AV_PIX_FMT_YUV420P;
outStrm->codec->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
// FOR H264 ONLY
test = av_opt_set(outStrm->codec->priv_data, "preset", "slow", 0);
if(test<0) exit(-2);
test = avcodec_open2(outStrm->codec, codec, NULL);
if(test<0) exit(-3);
test = avio_open2(&outFmtCtx->pb, "myoutputfile.avi", AVIO_FLAG_WRITE, NULL, NULL);
if(test<0) exit(-4);
test = avformat_write_header(outFmtCtx, NULL);
if(test<0) exit(-5);
AVFrame * frame = avcodec_alloc_frame();
if (!frame) exit(-6);
frame->format = outStrm->codec->pix_fmt;
frame->width = outStrm->codec->width;
frame->height = outStrm->codec->height;
ret = av_image_alloc(frame->data, frame->linesize, frame->width, frame->height, outStrm->codec->pix_fmt, 32);
if (ret < 0) exit(-7);
av_init_packet(&pkt);
pkt.data = NULL;
pkt.size = 0;
int yrange = 240*320;
int vrange = 240*320*0.25;
for(int i=0;i<100;i++){
char *carr = carrarr[i];
char* Y = carr;
char* U = carr+yrange;
char* V = carr+yrange+vrange;
frame->data[0] = (uint8_t*)Y;
frame->data[1] = (uint8_t*)U;
frame->data[2] = (uint8_t*)V;
frame->pts = i;
ret = avcodec_encode_video2(outStrm->codec, &pkt, frame, &got_output);
if (ret < 0) {
fprintf(stderr, "Error encoding frame\n");
exit (EXIT_FAILURE);
}
if (got_output) {
printf("Write frame %3d (size=%5d)\n", i, pkt.size);
//fwrite(pkt.data, 1, pkt.size, file_encoded_video);
av_interleaved_write_frame(outFmtCtx, &pkt);
av_free_packet(&pkt);
}
}
av_write_trailer(outFmtCtx);
avio_close(outFmtCtx->pb);
}carrarr is holding 100 frames of nice valid YUV420P data, I know this cause I’ve encoded it before AND I can output it to screen with SDL.
Any ideas welcome. Thanks !
-
ffmpeg create RTP stream
27 novembre 2016, par DankMemesI’m trying to encode and stream using ffmpeg (libavcodec/libavformat - MSVC x64 with Zeranoe builds)
Here is my code, largely adapted from the encoding example, error handling removed
#include "stdafx.h"
extern "C" {
#include <libavformat></libavformat>avformat.h>
#include <libavcodec></libavcodec>avcodec.h>
#include <libavutil></libavutil>opt.h>
#include <libavutil></libavutil>channel_layout.h>
#include <libavutil></libavutil>common.h>
#include <libavutil></libavutil>imgutils.h>
#include <libavutil></libavutil>mathematics.h>
#include <libavutil></libavutil>samplefmt.h>
}
#pragma comment(lib, "avformat.lib")
#pragma comment(lib, "avutil.lib")
#pragma comment(lib, "avcodec.lib")
int main() {
avcodec_register_all();
av_register_all();
avformat_network_init();
AVCodecID codec_id = AV_CODEC_ID_H264;
AVCodec *codec;
AVCodecContext *c = NULL;
int i, ret, x, y, got_output;
AVFrame *frame;
AVPacket pkt;
codec = avcodec_find_encoder(codec_id);
c = avcodec_alloc_context3(codec);
c->bit_rate = 400000;
c->width = 352;
c->height = 288;
c->time_base.num = 1;
c->time_base.den = 25;
c->gop_size = 25;
c->max_b_frames = 1;
c->pix_fmt = AV_PIX_FMT_YUV420P;
c->codec_type = AVMEDIA_TYPE_VIDEO;
c->flags = CODEC_FLAG_GLOBAL_HEADER;
if (codec_id == AV_CODEC_ID_H264) {
ret = av_opt_set(c->priv_data, "preset", "ultrafast", 0);
ret = av_opt_set(c->priv_data, "tune", "zerolatency", 0);
}
avcodec_open2(c, codec, NULL)
frame = av_frame_alloc();
frame->format = c->pix_fmt;
frame->width = c->width;
frame->height = c->height;
ret = av_image_alloc(frame->data, frame->linesize, c->width, c->height,
c->pix_fmt, 32);
AVFormatContext* avfctx;
AVOutputFormat* fmt = av_guess_format("rtp", NULL, NULL);
ret = avformat_alloc_output_context2(&avfctx, fmt, fmt->name,
"rtp://127.0.0.1:49990");
printf("Writing to %s\n", avfctx->filename);
avio_open(&avfctx->pb, avfctx->filename, AVIO_FLAG_WRITE)
struct AVStream* stream = avformat_new_stream(avfctx, codec);
stream->codecpar->bit_rate = 400000;
stream->codecpar->width = 352;
stream->codecpar->height = 288;
stream->codecpar->codec_id = AV_CODEC_ID_H264;
stream->codecpar->codec_type = AVMEDIA_TYPE_VIDEO;
stream->time_base.num = 1;
stream->time_base.den = 25;
avformat_write_header(avfctx, NULL);
char buf[200000];
AVFormatContext *ac[] = { avfctx };
av_sdp_create(ac, 1, buf, 20000);
printf("sdp:\n%s\n", buf);
FILE* fsdp;
fopen_s(&fsdp, "test.sdp", "w");
fprintf(fsdp, "%s", buf);
fclose(fsdp);
system("PAUSE");
system("start "" \"C:\\Program Files (x86)\\VideoLAN\\VLC\\vlc.exe\" test.sdp");
int j = 0;
for (i = 0; i < 10000; i++) {
av_init_packet(&pkt);
pkt.data = NULL; // packet data will be allocated by the encoder
pkt.size = 0;
fflush(stdout);
/* prepare a dummy image */
/* Y */
for (y = 0; y < c->height; y++) {
for (x = 0; x < c->width; x++) {
frame->data[0][y * frame->linesize[0] + x] = x + y + i * 3;
}
}
/* Cb and Cr */
for (y = 0; y < c->height / 2; y++) {
for (x = 0; x < c->width / 2; x++) {
frame->data[1][y * frame->linesize[1] + x] = 128 + y + i * 2;
frame->data[2][y * frame->linesize[2] + x] = 64 + x + i * 5;
}
}
frame->pts = i;
/* encode the image */
ret = avcodec_send_frame(c, frame);
ret = avcodec_receive_packet(c, &pkt);
if (ret == AVERROR_EOF) {
got_output = false;
printf("Stream EOF\n");
} else if(ret == AVERROR(EAGAIN)) {
got_output = false;
printf("Stream EAGAIN\n");
} else {
got_output = true;
}
if (got_output) {
printf("Write frame %3d (size=%5d)\n", j++, pkt.size);
av_interleaved_write_frame(avfctx, &pkt);
av_packet_unref(&pkt);
}
Sleep(40);
}
// end
ret = avcodec_send_frame(c, NULL);
/* get the delayed frames */
for (; ; i++) {
fflush(stdout);
ret = avcodec_receive_packet(c, &pkt);
if (ret == AVERROR_EOF) {
printf("Stream EOF\n");
break;
} else if (ret == AVERROR(EAGAIN)) {
printf("Stream EAGAIN\n");
got_output = false;
} else {
got_output = true;
}
if (got_output) {
printf("Write frame %3d (size=%5d)\n", j++, pkt.size);
av_interleaved_write_frame(avfctx, &pkt);
av_packet_unref(&pkt);
}
}
avcodec_close(c);
av_free(c);
av_freep(&frame->data[0]);
av_frame_free(&frame);
printf("\n");
system("pause");
return 0;
}However VLC (opened with the generated SDP file) isn’t able to play the stream. Messages has this
core error: ES_OUT_RESET_PCR called
followed by repeated
packetizer_h264 warning: waiting for SPS/PPS
core debug: Buffering <some percent="percent">%
</some>What am I doing wrong ?