
Recherche avancée
Médias (91)
-
#3 The Safest Place
16 octobre 2011, par
Mis à jour : Février 2013
Langue : English
Type : Audio
-
#4 Emo Creates
15 octobre 2011, par
Mis à jour : Février 2013
Langue : English
Type : Audio
-
#2 Typewriter Dance
15 octobre 2011, par
Mis à jour : Février 2013
Langue : English
Type : Audio
-
#1 The Wires
11 octobre 2011, par
Mis à jour : Février 2013
Langue : English
Type : Audio
-
ED-ME-5 1-DVD
11 octobre 2011, par
Mis à jour : Octobre 2011
Langue : English
Type : Audio
-
Revolution of Open-source and film making towards open film making
6 octobre 2011, par
Mis à jour : Juillet 2013
Langue : English
Type : Texte
Autres articles (78)
-
Mise à jour de la version 0.1 vers 0.2
24 juin 2013, parExplications des différents changements notables lors du passage de la version 0.1 de MediaSPIP à la version 0.3. Quelles sont les nouveautés
Au niveau des dépendances logicielles Utilisation des dernières versions de FFMpeg (>= v1.2.1) ; Installation des dépendances pour Smush ; Installation de MediaInfo et FFprobe pour la récupération des métadonnées ; On n’utilise plus ffmpeg2theora ; On n’installe plus flvtool2 au profit de flvtool++ ; On n’installe plus ffmpeg-php qui n’est plus maintenu au (...) -
Personnaliser en ajoutant son logo, sa bannière ou son image de fond
5 septembre 2013, parCertains thèmes prennent en compte trois éléments de personnalisation : l’ajout d’un logo ; l’ajout d’une bannière l’ajout d’une image de fond ;
-
Ecrire une actualité
21 juin 2013, parPrésentez les changements dans votre MédiaSPIP ou les actualités de vos projets sur votre MédiaSPIP grâce à la rubrique actualités.
Dans le thème par défaut spipeo de MédiaSPIP, les actualités sont affichées en bas de la page principale sous les éditoriaux.
Vous pouvez personnaliser le formulaire de création d’une actualité.
Formulaire de création d’une actualité Dans le cas d’un document de type actualité, les champs proposés par défaut sont : Date de publication ( personnaliser la date de publication ) (...)
Sur d’autres sites (14139)
-
FFmpeg RTP streaming
19 juillet 2016, par JohnnylinCan anyone show me an example code of how to use FFmpeg to encode a ".mp4" video and then output to network stream using RTP(rtp ://127.0.0.1:6666). I have searched for it on google but most of them are just command line. Thanks very much.
UPDATED :
extern "C"{
#include <libavcodec></libavcodec>avcodec.h>
#include <libavformat></libavformat>avformat.h>
#include <libswscale></libswscale>swscale.h>
#include <libavutil></libavutil>avutil.h>
#include <libavutil></libavutil>opt.h>
#include <libavutil></libavutil>time.h>
}
#include
#include <iostream>
#include <string>
using namespace std;
// compatibility with newer API
#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(55,28,1)
#define av_frame_alloc avcodec_alloc_frame
#define av_frame_free avcodec_free_frame
#endif
#define RNDTO2(X) ( ( (X) & 0xFFFFFFFE ))
#define RNDTO32(X) ( ( (X) % 32 ) ? ( ( (X) + 32 ) & 0xFFFFFFE0 ) : (X) )
//avcodec_alloc_frame is an old name
int main(int argc, char *argv[]) {
// Initalizing these to NULL prevents segfaults!
AVFormatContext *pFormatCtx = NULL;
int i, videoStream;
AVCodecContext *pCodecCtxOrig = NULL;
AVCodecContext *pCodecCtx = NULL;
AVCodec *pCodec = NULL;
AVFrame *pFrame = NULL;
AVPacket packet;
int frameFinished;
int numBytes;
struct SwsContext *sws_ctx = NULL;
int frame_index=0;
if(argc < 2) {
printf("Please provide a movie file\n");
return -1;
}
// Register all formats and codecs
av_register_all();
//initialize network video
avformat_network_init();
int errorStatus = 0;
char errorLog[128] = { 0 };
av_log_set_level(AV_LOG_TRACE);
//------------------ This is for local video file --------------
// Open video file
if(avformat_open_input(&pFormatCtx, argv[1], NULL, NULL)!=0)
return -1; // Couldn't open file
// Retrieve stream information
if(avformat_find_stream_info(pFormatCtx, NULL)<0)
return -1; // Couldn't find stream information
// Find the first video stream
videoStream=-1;
for(i=0; inb_streams; i++)
if(pFormatCtx->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO) {
videoStream=i;
break;
}
// Dump information about file onto standard error
av_dump_format(pFormatCtx, 0, argv[1], 0);
if(videoStream==-1)
return -1; // Didn't find a video stream
// Get a pointer to the codec context for the video stream
pCodecCtxOrig=pFormatCtx->streams[videoStream]->codec;
// Find the decoder for the video stream
pCodec=avcodec_find_decoder(pCodecCtxOrig->codec_id);
if(pCodec==NULL) {
fprintf(stderr, "Unsupported codec!\n");
return -1; // Codec not found
}
// Copy context
pCodecCtx = avcodec_alloc_context3(pCodec);
if(avcodec_copy_context(pCodecCtx, pCodecCtxOrig) != 0) {
fprintf(stderr, "Couldn't copy codec context");
return -1; // Error copying codec context
}
// Open codec
if(avcodec_open2(pCodecCtx, pCodec, NULL)<0)
return -1; // Could not open codec
// Allocate video frame
pFrame=av_frame_alloc();
// use nvidia codec
AVCodec* en_codec = avcodec_find_encoder_by_name("nvenc");
//AVCodec* en_codec = avcodec_find_encoder(AV_CODEC_ID_H264);
AVCodecContext* nv_codec_context = avcodec_alloc_context3(en_codec);
nv_codec_context->bit_rate = 1244179;
nv_codec_context->width = 1920;
nv_codec_context->height = 1080;
nv_codec_context->time_base.num = 1;
nv_codec_context->time_base.den = 30;
nv_codec_context->gop_size = 10;
nv_codec_context->max_b_frames = 1;
nv_codec_context->keyint_min = 1;
nv_codec_context->i_quant_factor = (float)0.71;
nv_codec_context->b_frame_strategy = 20;
nv_codec_context->qcompress = (float)0.6;
nv_codec_context->qmin = 20;
nv_codec_context->qmax = 51;
nv_codec_context->max_qdiff = 4;
nv_codec_context->refs = 4;
nv_codec_context->trellis = 1;
nv_codec_context->pix_fmt = AV_PIX_FMT_YUV420P;
//nv_codec_context->codec_id = AV_CODEC_ID_H264;
//nv_codec_context->codec_type = AVMEDIA_TYPE_VIDEO;
if (avcodec_open2(nv_codec_context, en_codec,NULL) < 0) {
fprintf(stderr, "Could not open codec\n");
exit(1);
}else printf("\nH264 codec opened\n");
/******stream*******/
string m_output("rtp://147.8.179.229:6666");
AVFormatContext* m_formatContext = NULL;
AVStream* m_stream = NULL;
if (avformat_alloc_output_context2(&m_formatContext, NULL, "H264", m_output.c_str()) < 0) {
cerr << "Cannot allocate output context: "
<< av_make_error_string(errorLog, 128, errorStatus) << endl;
return -1;
}
//AVCodec* tmp_codec = avcodec_find_encoder(AV_CODEC_ID_H264);
m_stream = avformat_new_stream(m_formatContext, en_codec);
if (!m_stream) {
cerr << "Cannot create a new stream: "
<< av_make_error_string(errorLog, 128, errorStatus) << endl;
return -1;
}
av_dump_format(m_formatContext, 0, m_output.c_str(), 1);
m_stream->codec->pix_fmt = AV_PIX_FMT_YUV420P;
m_stream->codec->width = 1920;
m_stream->codec->height = 1080;
//m_stream->codec->codec_id = AV_CODEC_ID_H264;
m_stream->codec->bit_rate = 40000;
m_stream->codec->time_base.den = 30;
m_stream->codec->time_base.num = 1;
m_stream->time_base.den = 30;
m_stream->time_base.num = 1;
m_stream->codec->codec_tag = 0;
if (m_formatContext->oformat->flags & AVFMT_GLOBALHEADER)
m_stream->codec->flags |= CODEC_FLAG_GLOBAL_HEADER;
if (!(m_formatContext->oformat->flags & AVFMT_NOFILE))
errorStatus = avio_open(&m_formatContext->pb, m_output.c_str(), AVIO_FLAG_WRITE);
if ((errorStatus) < 0) {
cerr << "Cannot open output: "
<< av_make_error_string(errorLog, 128, errorStatus) << endl;
return -1;
}
if (avformat_write_header(m_formatContext, NULL) < 0) {
cerr << "Cannot write header to stream: "
<< av_make_error_string(errorLog, 128, errorStatus) << endl;
return -1;
}
/******stream*******/
FILE *fp_yuv = NULL;
fp_yuv=fopen("output.yuv","wb+");
// Read frames and save first five frames to disk
i=0;
while(av_read_frame(pFormatCtx, &packet)>=0) {
// Is this a packet from the video stream?
if(packet.stream_index==videoStream) {
// Decode video frame
avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet);
// Did we get a video frame?
if(frameFinished) {
AVPacket Outpacket;
int got_packet_ptr;
av_init_packet(&Outpacket);
Outpacket.data = NULL;
Outpacket.size = 0;
int out_size = avcodec_encode_video2(nv_codec_context, &Outpacket, pFrame, &got_packet_ptr);
Outpacket.pts = av_rescale_q(pFrame->pts, m_stream->codec->time_base, m_stream->time_base);
fwrite(Outpacket.data,1,Outpacket.size,fp_yuv);
//av_write_frame(m_formatContext, &Outpacket);
av_interleaved_write_frame(m_formatContext, &Outpacket);
//Free the packet that was allocated by encoder
av_packet_unref(&Outpacket);
}
}
// Free the packet that was allocated by av_read_frame
av_packet_unref(&packet);
}
fclose(fp_yuv);
// Free the YUV frame
av_frame_free(&pFrame);
// Close the codecs
avcodec_close(pCodecCtx);
avcodec_close(pCodecCtxOrig);
avcodec_close(m_stream->codec);
avformat_free_context(m_formatContext);
// Close the video file
avformat_close_input(&pFormatCtx);
return 0;
}
</string></iostream>Above is my code for decoding a .mp4 file, outputting to a network stream through RTP. But it does not work. On the client side, I call VLC library to decode the stream ( VlcMedia(url, _instance) where url is rtp/h264 ://@147.8.179.229:6666 ). When I change the protocal to UDP, it works. However, it is not stable. The frames jumps and probably the frame lost or something wrong with the pts setting ?
Can anyone help ? Thanks very much.
-
FFmpeg RTP example code
20 juillet 2016, par JohnnylinCan anyone show me an example code of how to use FFmpeg to encode a ".mp4" video and then output to network stream using RTP(rtp ://127.0.0.1:6666). I have searched for it on google but most of them are just command line. Thanks very much.
UPDATED :
extern "C"{
#include <libavcodec></libavcodec>avcodec.h>
#include <libavformat></libavformat>avformat.h>
#include <libswscale></libswscale>swscale.h>
#include <libavutil></libavutil>avutil.h>
#include <libavutil></libavutil>opt.h>
#include <libavutil></libavutil>time.h>
}
#include
#include <iostream>
#include <string>
using namespace std;
// compatibility with newer API
#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(55,28,1)
#define av_frame_alloc avcodec_alloc_frame
#define av_frame_free avcodec_free_frame
#endif
#define RNDTO2(X) ( ( (X) & 0xFFFFFFFE ))
#define RNDTO32(X) ( ( (X) % 32 ) ? ( ( (X) + 32 ) & 0xFFFFFFE0 ) : (X) )
//avcodec_alloc_frame is an old name
int main(int argc, char *argv[]) {
// Initalizing these to NULL prevents segfaults!
AVFormatContext *pFormatCtx = NULL;
int i, videoStream;
AVCodecContext *pCodecCtxOrig = NULL;
AVCodecContext *pCodecCtx = NULL;
AVCodec *pCodec = NULL;
AVFrame *pFrame = NULL;
AVPacket packet;
int frameFinished;
int numBytes;
struct SwsContext *sws_ctx = NULL;
int frame_index=0;
if(argc < 2) {
printf("Please provide a movie file\n");
return -1;
}
// Register all formats and codecs
av_register_all();
//initialize network video
avformat_network_init();
int errorStatus = 0;
char errorLog[128] = { 0 };
av_log_set_level(AV_LOG_TRACE);
//------------------ This is for local video file --------------
// Open video file
if(avformat_open_input(&pFormatCtx, argv[1], NULL, NULL)!=0)
return -1; // Couldn't open file
// Retrieve stream information
if(avformat_find_stream_info(pFormatCtx, NULL)<0)
return -1; // Couldn't find stream information
// Find the first video stream
videoStream=-1;
for(i=0; inb_streams; i++)
if(pFormatCtx->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO) {
videoStream=i;
break;
}
// Dump information about file onto standard error
av_dump_format(pFormatCtx, 0, argv[1], 0);
if(videoStream==-1)
return -1; // Didn't find a video stream
// Get a pointer to the codec context for the video stream
pCodecCtxOrig=pFormatCtx->streams[videoStream]->codec;
// Find the decoder for the video stream
pCodec=avcodec_find_decoder(pCodecCtxOrig->codec_id);
if(pCodec==NULL) {
fprintf(stderr, "Unsupported codec!\n");
return -1; // Codec not found
}
// Copy context
pCodecCtx = avcodec_alloc_context3(pCodec);
if(avcodec_copy_context(pCodecCtx, pCodecCtxOrig) != 0) {
fprintf(stderr, "Couldn't copy codec context");
return -1; // Error copying codec context
}
// Open codec
if(avcodec_open2(pCodecCtx, pCodec, NULL)<0)
return -1; // Could not open codec
// Allocate video frame
pFrame=av_frame_alloc();
// use nvidia codec
AVCodec* en_codec = avcodec_find_encoder_by_name("nvenc");
//AVCodec* en_codec = avcodec_find_encoder(AV_CODEC_ID_H264);
AVCodecContext* nv_codec_context = avcodec_alloc_context3(en_codec);
nv_codec_context->bit_rate = 1244179;
nv_codec_context->width = 1920;
nv_codec_context->height = 1080;
nv_codec_context->time_base.num = 1;
nv_codec_context->time_base.den = 30;
nv_codec_context->gop_size = 10;
nv_codec_context->max_b_frames = 1;
nv_codec_context->keyint_min = 1;
nv_codec_context->i_quant_factor = (float)0.71;
nv_codec_context->b_frame_strategy = 20;
nv_codec_context->qcompress = (float)0.6;
nv_codec_context->qmin = 20;
nv_codec_context->qmax = 51;
nv_codec_context->max_qdiff = 4;
nv_codec_context->refs = 4;
nv_codec_context->trellis = 1;
nv_codec_context->pix_fmt = AV_PIX_FMT_YUV420P;
//nv_codec_context->codec_id = AV_CODEC_ID_H264;
//nv_codec_context->codec_type = AVMEDIA_TYPE_VIDEO;
if (avcodec_open2(nv_codec_context, en_codec,NULL) < 0) {
fprintf(stderr, "Could not open codec\n");
exit(1);
}else printf("\nH264 codec opened\n");
/******stream*******/
string m_output("rtp://147.8.179.229:6666");
AVFormatContext* m_formatContext = NULL;
AVStream* m_stream = NULL;
if (avformat_alloc_output_context2(&m_formatContext, NULL, "H264", m_output.c_str()) < 0) {
cerr << "Cannot allocate output context: "
<< av_make_error_string(errorLog, 128, errorStatus) << endl;
return -1;
}
//AVCodec* tmp_codec = avcodec_find_encoder(AV_CODEC_ID_H264);
m_stream = avformat_new_stream(m_formatContext, en_codec);
if (!m_stream) {
cerr << "Cannot create a new stream: "
<< av_make_error_string(errorLog, 128, errorStatus) << endl;
return -1;
}
av_dump_format(m_formatContext, 0, m_output.c_str(), 1);
m_stream->codec->pix_fmt = AV_PIX_FMT_YUV420P;
m_stream->codec->width = 1920;
m_stream->codec->height = 1080;
//m_stream->codec->codec_id = AV_CODEC_ID_H264;
m_stream->codec->bit_rate = 40000;
m_stream->codec->time_base.den = 30;
m_stream->codec->time_base.num = 1;
m_stream->time_base.den = 30;
m_stream->time_base.num = 1;
m_stream->codec->codec_tag = 0;
if (m_formatContext->oformat->flags & AVFMT_GLOBALHEADER)
m_stream->codec->flags |= CODEC_FLAG_GLOBAL_HEADER;
if (!(m_formatContext->oformat->flags & AVFMT_NOFILE))
errorStatus = avio_open(&m_formatContext->pb, m_output.c_str(), AVIO_FLAG_WRITE);
if ((errorStatus) < 0) {
cerr << "Cannot open output: "
<< av_make_error_string(errorLog, 128, errorStatus) << endl;
return -1;
}
if (avformat_write_header(m_formatContext, NULL) < 0) {
cerr << "Cannot write header to stream: "
<< av_make_error_string(errorLog, 128, errorStatus) << endl;
return -1;
}
/******stream*******/
FILE *fp_yuv = NULL;
fp_yuv=fopen("output.yuv","wb+");
// Read frames and save first five frames to disk
i=0;
while(av_read_frame(pFormatCtx, &packet)>=0) {
// Is this a packet from the video stream?
if(packet.stream_index==videoStream) {
// Decode video frame
avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet);
// Did we get a video frame?
if(frameFinished) {
AVPacket Outpacket;
int got_packet_ptr;
av_init_packet(&Outpacket);
Outpacket.data = NULL;
Outpacket.size = 0;
int out_size = avcodec_encode_video2(nv_codec_context, &Outpacket, pFrame, &got_packet_ptr);
Outpacket.pts = av_rescale_q(pFrame->pts, m_stream->codec->time_base, m_stream->time_base);
fwrite(Outpacket.data,1,Outpacket.size,fp_yuv);
//av_write_frame(m_formatContext, &Outpacket);
av_interleaved_write_frame(m_formatContext, &Outpacket);
//Free the packet that was allocated by encoder
av_packet_unref(&Outpacket);
}
}
// Free the packet that was allocated by av_read_frame
av_packet_unref(&packet);
}
fclose(fp_yuv);
// Free the YUV frame
av_frame_free(&pFrame);
// Close the codecs
avcodec_close(pCodecCtx);
avcodec_close(pCodecCtxOrig);
avcodec_close(m_stream->codec);
avformat_free_context(m_formatContext);
// Close the video file
avformat_close_input(&pFormatCtx);
return 0;
}
</string></iostream>Above is my code for decoding a .mp4 file, outputting to a network stream through RTP. But it does not work. On the client side, I call VLC library to decode the stream ( VlcMedia(url, _instance) where url is rtp/h264 ://@147.8.179.229:6666 ). When I change the protocal to UDP, it works. However, it is not stable. The frames jumps and probably the frame lost or something wrong with the pts setting ?
UPDATED :
When I use UDP, I got this error message.
When I use RTP, I got this error message :
Not sure about how to solve this problem, Can anyone help ? Thanks very much.
-
Fade in/out gif in particular time in ffmpeg
29 juin 2016, par Ahmad Ali MukashatyI want to fade in gif file (mygif.gif) with video in every 10 minute and for 15 seconds
is there any way to implement that ?
ffmpeg -re -i test.mp4 -i logo.png -ignore_loop 0 -i mygif.gif -filter_complex
"[0][1]overlay=0:0[a];[a][2]overlay=0:H-90,scale=1920:1080" -f mpegts
udp://127.0.0.1:port