
Recherche avancée
Autres articles (77)
-
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 ) (...) -
Le profil des utilisateurs
12 avril 2011, parChaque utilisateur dispose d’une page de profil lui permettant de modifier ses informations personnelle. Dans le menu de haut de page par défaut, un élément de menu est automatiquement créé à l’initialisation de MediaSPIP, visible uniquement si le visiteur est identifié sur le site.
L’utilisateur a accès à la modification de profil depuis sa page auteur, un lien dans la navigation "Modifier votre profil" est (...)
Sur d’autres sites (10048)
-
no sound when streaming mkv video to html 5 video player via node js
8 septembre 2013, par TristanI have been playing around with building a simple html 5 media server for all my mkv files since I discovered chrome can play them when just dragging and dropping the file into a new tab !
So I actually have something up and going and I am able to stream the mkv files through a nodejs sever to a simple html 5 video player, the only problem is there is no sound and the volume icon in the controls is crossed and greyed out !
Now I realise that mkv files can have multiple audio streams within and this is probably my issue, that the video player doesn't know which one to use or is missing it for some reason.
I have avoided using ffmpeg for the time being as I wanted to stream the videos without any transcoding (and without using express as shown in the fluent-ffmpeg stream example).
See below for the code I use to stream the video :
cFs.exists(sFileName, function(bExists){
if (bExists)
{
var cFile = null;
var cStat = cFs.statSync(sFileName);
if (cRequest.headers['range'])
{
var aParts = cRequest.headers['range'].replace(/bytes=/, "").split("-");
var nStart = parseInt(aParts[0], 10);
var nEnd = aParts[1] ? parseInt(aParts[1], 10) : cStat.size - 1;
var nChunkSize = (nEnd - nStart) + 1;
cFile = cFs.createReadStream(sFileName, {start: nStart, end: nEnd});
cResponse.writeHead(206, {
"Content-Type": "video/x-matroska",
"Content-Range": "bytes " + nStart + "-" + nEnd + "/" + cStat.size,
"Accept-Ranges": "bytes",
"Content-Length": nChunkSize
});
cFile.pipe(cResponse);
cRequest.on('close', function(){
cFile.destroy();
});
}
else
{
cResponse.writeHead(200, {
"Content-Type": "video/x-matroska",
"Content-Length": cStat.size
});
cFile = cFs.createReadStream(sFileName);
cFile.pipe(cResponse);
}
cRequest.on('close', function(){
if (cFile)
{
cFile.destroy();
}
});
/*new ffmpeg({
source: sFileName
}).toFormat('webm').writeToStream(cResponse, function(){
console.log(arguments);
});*/
}
else
{
cResponse.writeHead(404, {
"Content-Type": "text/plain"
});
cResponse.write("404 Not Found\n");
cResponse.end();
}
});if you could help me sort out the sound for the code above or can provide a fluent-ffmpeg solution without using express and retaining as much image quality as possible that would be great !
-
FFMPEG scaling video disable viewing it in HTML player while process is not ended, for video transcoding on the fly
6 juillet 2022, par Lucas FGood day all,


I'm working on a video player with 1080p original video files, and I would like to change their resolution on the fly :


Actually I host all my original video files under a web mp4 1080p format, and I would like to be able to offer 720p, 480p, etc ... qualities.


So I started to look for tutorials about video transcoding on the fly and I found the FFMPEG tool.


I'm actually using the following command to scale videos - to 720p for e.g. :


ffmpeg -i input.mp4 -vf scale=-1:720 output.mp4



The problem is, once FFMPEG starts scaling it, I have to wait the end of the process before being able to play the video. Do you know if there is any parameter for this command to allow playing the video while it's under scaling ?


Or any workaround that can help me doing this ?


Thank you in advance for your help !


EDIT - To allow fragmented video metas


Now I found how to access readable content while transcoding (by transcoding to fragmented MP4) :


ffmpeg -i input.mp4 -vf scale=-2:720 -movflags +frag_keyframe+separate_moof+omit_tfhd_offset+empty_moov output.mp4



But my problem is when opening the video it comes as an "ended" video of the current transcoded data.


So if video lasts 1min and is half transcoded, I'll see only 30s, it will not load more data, once the rest is transcoded.


EDIT - To play entire video while transcoding


I found the following solution that creates a streaming flow througout RTMP protocol :


ffmpeg -i input.mp4 -vf scale=-2:720 -movflags +frag_keyframe+separate_moof+omit_tfhd_offset+empty_moov output.mp4 -listen 1 -f flv rtmp://127.0.0.1:10000/test-stream



My only problem, is that it's not supported into the HTML5 video player, so I tried to convert the RTMP stream to HTTP with the following command :


ffmpeg -v verbose -i rtmp://127.0.0.1:10000/test-stream -c:v libx264 -c:a aac -ac 1 -strict -2 -crf 18 -profile:v baseline -maxrate 400k -bufsize 1835k -pix_fmt yuv420p -flags -global_header -hls_time 10 -hls_list_size 6 -start_number 1 C:\www\test-stream.m3u8



But this is only supported on Apple devices, any idea about how to read this .m3u8 on all other devices ?


-
video created using ffmpeg and H264 codec does not play on android :player says it is not a divx file
6 octobre 2014, par susheel tickooI have created a video from images using ffmpeg and H264 codec in C.
I can run the video using a 3rd party player (V player ) on android devices.
But the native player does not play the video. IT says that the file is not a Divx file.
below is the code that i have used to create the video from images :JNIEXPORT void Java_com_canvasm_mediclinic_VideoGenerator_generate(JNIEnv *pEnv, jobject pObj,jobjectArray stringArray,int famerate,int width,int height,jstring videoFilename)
{
AVCodec *codec;
AVCodecContext *c= NULL;
//int framesnum=5;
int i,looper, out_size, size, x, y,j;
int ret,pts,got_pkt_ptr;
int imagecount= (*pEnv)->GetArrayLength(pEnv, stringArray);
int retval=-10;
uint8_t endcode[]={0,0,1,0xb7};
AVPacket outpacket;
FILE *f;
AVFrame *picture,*encoded_avframe;
jbyte *raw_record;
char logdatadata[100];
int returnvalue = -1,numBytes =-1;
const char *gVideoFileName = (char *)(*pEnv)->GetStringUTFChars(pEnv, videoFilename, NULL);
/* find the mpeg1 video encoder */
codec = avcodec_find_encoder_by_name("libx264");
if (!codec) {
__android_log_write(ANDROID_LOG_INFO, "record","codec not found");
exit(1);
}
c= avcodec_alloc_context();
c->bit_rate = 500000;
c->width = width;
c->height = height;
c->time_base= (AVRational){1,famerate};
c->gop_size = 12; // emit one intra frame every ten frames
c->max_b_frames=1;
c->pix_fmt = PIX_FMT_YUV420P;
c->codec_type = AVMEDIA_TYPE_VIDEO;
c->codec_id = codec->id;
c->max_b_frames = 0;
c->me_range = 16;
c->max_qdiff = 4;
c->qmin = 10;
c->qmax = 26;
c->qcompress = 0.6;
c->trellis=0;
c->level = 30;
c->refs = 5;
c->coder_type = 0;
c->scenechange_threshold = 0;
//new
c->flags|=CODEC_FLAG_LOOP_FILTER;//new
c->scenechange_threshold = 40; //new
c-> rc_buffer_size = 0;
c->gop_size=250; //new
c->max_b_frames=1;//new
c->me_method=7;
c->me_cmp|= 1;
c->me_subpel_quality = 6;
c->qmax=51;
c->keyint_min=25;
av_opt_set(c->priv_data,"subq","6",0);
av_opt_set(c->priv_data,"crf","20.0",0);
av_opt_set(c->priv_data,"weighted_p_pred","0",0);
av_opt_set(c->priv_data,"profile","baseline",AV_OPT_SEARCH_CHILDREN);
av_opt_set(c->priv_data,"preset","medium",0);
av_opt_set(c->priv_data,"tune","zerolatency",0);
av_opt_set(c->priv_data,"x264opts","rc-lookahead=0",0);
/* open it */
retval = avcodec_open(c, codec);
if ( retval < 0)
{
__android_log_write(ANDROID_LOG_INFO, "record","could not open codec");
exit(1);
}
f = fopen(gVideoFileName, "ab");
if (!f) {
__android_log_write(ANDROID_LOG_INFO, "record","could not open video file");
exit(1);
}
pts = 0;
for(i=0;i<=imagecount;i++) {
jboolean isCp;
int progress = 0;
float temp;
jstring string;
if(i==imagecount)
string = (jstring) (*pEnv)->GetObjectArrayElement(pEnv, stringArray,
imagecount-1);
else
string = (jstring) (*pEnv)->GetObjectArrayElement(pEnv, stringArray, i);
const char *rawString = (*pEnv)->GetStringUTFChars(pEnv, string, &isCp);
picture = OpenImage(rawString,width,height,i);
av_init_packet(&outpacket);
fflush(stdout);
{
picture->pts=i ;//c->frame_number;
do{
out_size = avcodec_encode_video2(c, &outpacket,
picture,&got_pkt_ptr);
}while(!got_pkt_ptr);
}
returnvalue = fwrite(outpacket.data, 1, outpacket.size, f);
av_free_packet(&outpacket);
}
/* get the delayed frames */
for(got_pkt_ptr =1; got_pkt_ptr; i++) {
fflush(stdout);
avcodec_encode_video2(c, &outpacket, NULL,&got_pkt_ptr);
if(got_pkt_ptr)
{
fwrite(outpacket.data, 1, outpacket.size, f);
av_free_packet(&outpacket);
}
}
fwrite(endcode,1,sizeof(endcode),f);
fclose(f);
avcodec_close(c);
av_free(c);
}
AVFrame* OpenImage(const char* imageFileName,int w,int h,int index)
{
AVFrame *pFrame;
AVCodec *pCodec ;
AVFormatContext *pFormatCtx = NULL;
AVCodecContext *pCodecCtx;
uint8_t *buffer;
int frameFinished,framesNumber = 0,retval = -1,numBytes=0;
AVPacket packet;
char logdatadata[100];
int result = -1;
result=avformat_open_input(&pFormatCtx,imageFileName,NULL,NULL);
if(result!=0)
{
__android_log_write(ANDROID_LOG_INFO, "record",
"Can't open image file ");
return NULL;
}
pCodecCtx = pFormatCtx->streams[0]->codec;
pCodecCtx->width = w;
pCodecCtx->height = h;
pCodecCtx->pix_fmt = PIX_FMT_YUV420P;
// Find the decoder for the video stream
pCodec = avcodec_find_decoder(pCodecCtx->codec_id);
if (!pCodec)
{
__android_log_write(ANDROID_LOG_INFO, "record",
"Can't open image file ");
return NULL;
}
pFrame = avcodec_alloc_frame();
numBytes = avpicture_get_size(PIX_FMT_YUV420P, pCodecCtx->width, pCodecCtx->height);
buffer = (uint8_t *) av_malloc(numBytes * sizeof(uint8_t));
retval = avpicture_fill((AVPicture *) pFrame, buffer, PIX_FMT_YUV420P, pCodecCtx->width, pCodecCtx-
>height);
// Open codec
if(avcodec_open(pCodecCtx, pCodec)<0)
{
__android_log_write(ANDROID_LOG_INFO, "record","Could not open codec");
return NULL;
}
if (!pFrame)
{
__android_log_write(ANDROID_LOG_INFO, "record","Can't allocate memory for AVFrame\n");
return NULL;
}
int readval = -5;
while (readval = av_read_frame(pFormatCtx, &packet) >= 0)
{
if(packet.stream_index != 0)
continue;
int ret = avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet);
if (ret > 0)
{
__android_log_write(ANDROID_LOG_INFO, "record","Frame is decoded\n");
pFrame->quality = 4;
av_free_packet(&packet);
av_close_input_file(pFormatCtx);
return pFrame;
}
else
{
__android_log_write(ANDROID_LOG_INFO, "record","error while decoding frame \n");
}
}
}The abovve code produces a video that can be run using a 3rd party player like VLC.
I just want to know what am i missing to get the video playing on android
How can i remove the "Not a divx file" error.I have checked some of the forums links given below but of no use
link1
link2thanks in advance.