
Recherche avancée
Médias (2)
-
SPIP - plugins - embed code - Exemple
2 septembre 2013, par
Mis à jour : Septembre 2013
Langue : français
Type : Image
-
Publier une image simplement
13 avril 2011, par ,
Mis à jour : Février 2012
Langue : français
Type : Video
Autres articles (95)
-
MediaSPIP 0.1 Beta version
25 avril 2011, parMediaSPIP 0.1 beta is the first version of MediaSPIP proclaimed as "usable".
The zip file provided here only contains the sources of MediaSPIP in its standalone version.
To get a working installation, you must manually install all-software dependencies on the server.
If you want to use this archive for an installation in "farm mode", you will also need to proceed to other manual (...) -
Multilang : améliorer l’interface pour les blocs multilingues
18 février 2011, parMultilang est un plugin supplémentaire qui n’est pas activé par défaut lors de l’initialisation de MediaSPIP.
Après son activation, une préconfiguration est mise en place automatiquement par MediaSPIP init permettant à la nouvelle fonctionnalité d’être automatiquement opérationnelle. Il n’est donc pas obligatoire de passer par une étape de configuration pour cela. -
HTML5 audio and video support
13 avril 2011, parMediaSPIP uses HTML5 video and audio tags to play multimedia files, taking advantage of the latest W3C innovations supported by modern browsers.
The MediaSPIP player used has been created specifically for MediaSPIP and can be easily adapted to fit in with a specific theme.
For older browsers the Flowplayer flash fallback is used.
MediaSPIP allows for media playback on major mobile platforms with the above (...)
Sur d’autres sites (11146)
-
x264 output video is blank when threading is enabled
15 juillet 2020, par NewbieCoderI am using libx264 compiled from source. It was configured to get both .dll and .lib by this command


./configure --disable-cli --enable-shared --extra-ldflags=-Wl,--output-def=libx264.def`


I am using the libx264 API in my screen-sharing program with the preset - "veryfast", tune - "zerolatency", profile - "high" and also the following settings.


param.i_csp = X264_CSP_BGRA;
 param.i_threads = 1;
 param.i_width = width;
 param.i_height = height;
 param.i_fps_num = fps;
 param.i_fps_den = 1;
 param.rc.i_bitrate = bitrate;
 param.rc.i_rc_method = X264_RC_ABR;
 param.rc.b_filler = true;
 param.rc.f_rf_constant = (float)0;
 param.rc.i_vbv_max_bitrate = param.rc.i_bitrate;
 param.rc.i_vbv_buffer_size = param.rc.i_bitrate;
 param.b_repeat_headers = 0;
 param.b_annexb = 1;



For these settings the program works fine. I specified it as single threaded by setting
param.i_threads = 1
.
If this is removed, x264 defaults to using multiple threads and setsparam.i_threads
as 1.5x of number of cores in the CPU automatically. This will give faster performance than running in single thread.

But when I remove the
param.i_threads = 1
to make it multi-threaded, the generated output is fully grey. I cannot see any output when I view the live stream with VLC or some times I can view a weird output.

I am using this bitmap image as an example (https://imgur.com/a/l8LCd1l). Only this same image is being encoded multiple times. When it is saved into .h264 video, it is viewable clearly. But when the encoded payload is sent through rtmp, the live stream produces very bad and weird output (or sometimes no output). This is the weird output which im seeing most of the time for this image : https://imgur.com/a/VdyX1Zm


This is the full example code in which I am both streaming and writing video file of the same picture. This is using the srs librtmp library. There is no error but the stream has weird output.


In this code if you set add
param.i_threads = 1;
then only the output stream will be viewable. The problem is that it should be viewable in both single-threaded and multi-threaded encoding.

#include <iostream>
#include 
#include <sstream>
#include 
#include "srs_librtmp.h"

#pragma comment(lib, "C:/Softwares/x264/libx264.lib")

using namespace std;

int check_ret(int ret);

int main()
{
 int dts = 0;

 x264_param_t param;
 x264_t* h;
 x264_nal_t* nals;
 int i_nal;
 int pts = 0;
 int i_frame_size;
 x264_picture_t picIn;
 x264_picture_t picOut;

 x264_param_default_preset(&param, "veryfast", "zerolatency");

 //x264 settings
 param.i_csp = X264_CSP_BGRA;
 param.i_width = 1920;
 param.i_height = 1080;
 param.i_fps_num = 30;
 param.i_fps_den = 1;
 param.rc.i_bitrate = 2500;
 param.rc.i_rc_method = X264_RC_ABR;
 param.rc.b_filler = true;
 param.rc.f_rf_constant = (float)0;
 param.rc.i_vbv_max_bitrate = param.rc.i_bitrate;
 param.rc.i_vbv_buffer_size = param.rc.i_bitrate;
 param.b_repeat_headers = 0;
 param.b_annexb = 1;

 x264_param_apply_profile(&param, "high");
 h = x264_encoder_open(&param);

 //allocate picture
 x264_picture_alloc(&picIn, param.i_csp, param.i_width, param.i_height);

 //picture settings
 picIn.img.i_plane = 1;
 picIn.img.i_stride[0] = 4 * param.i_width;
 picIn.i_type = X264_TYPE_AUTO;

 int header_size = x264_encoder_headers(h, &nals, &i_nal);
 FILE* fptr;
 fopen_s(&fptr, "example1.h264", "wb");
 // write sps and pps in the video file
 fwrite(nals->p_payload, header_size, 1, fptr);

 int size = 1920 * 1080 * 4;
 char* bmp = new char[size];
 FILE* bitptr;
 errno_t err = fopen_s(&bitptr, "flower.bmp", "rb");
 fseek(bitptr, 54, SEEK_SET);
 fread(bmp, size, 1, bitptr);
 fclose(bitptr);

 srs_rtmp_t rtmp = srs_rtmp_create("127.0.0.1:1935/live/test");

 if (srs_rtmp_handshake(rtmp) != 0)
 {
 std::cout << "Simple handshake failed.";
 return -1;
 }

 std::cout << "Handshake completed successfully.\n";

 if (srs_rtmp_connect_app(rtmp) != 0) {
 std::cout << "Connecting to host failed.";
 return -1;
 }

 std::cout << "Connected to host successfully.\n";

 if (srs_rtmp_publish_stream(rtmp) != 0) {
 std::cout << "Publish signal failed.";
 }

 std::cout << "Publish signal success\n";

 // write sps and pps in the live stream
 int ret = srs_h264_write_raw_frames(rtmp, reinterpret_cast(nals->p_payload), header_size, 0, 0);
 ret = check_ret(ret);
 if (!ret)
 return -1;
 std::cout << "SPS and PPS sent.\n";

 // main loop
 std::cout << "Now streaming and encoding\n";
 int i = 1800;
 while (i--)
 {

 picIn.img.plane[0] = reinterpret_cast(bmp);
 picIn.i_pts = pts++;
 i_frame_size = x264_encoder_encode(h, &nals, &i_nal, &picIn, &picOut);
 if (i_frame_size)
 {
 for (int j = 0; j < i_nal; j++)
 {

 x264_nal_t* nal = nals + j;
 // write data in the video file
 fwrite(nal->p_payload, nal->i_payload, 1, fptr);
 // write data in the live stream
 ret = srs_h264_write_raw_frames(rtmp, reinterpret_cast(nal->p_payload), nal->i_payload, dts, dts);
 ret = check_ret(ret);
 if (!ret)
 {
 return -1;
 }
 }
 }
 else
 {
 std::cout << "i_frame_size = 0 (encoder failed)\n";
 }
 dts += 33;
 }

 while (x264_encoder_delayed_frames(h))
 {
 i_frame_size = x264_encoder_encode(h, &nals, &i_nal, NULL, &picOut);
 if (i_frame_size)
 {
 fwrite(nals->p_payload, i_frame_size, 1, fptr);
 }
 }

 std::cout << "\nAll done\n";
 std::cout << "Output video is example1.h264 and it is viewable in VLC";

 return 0;
}

int check_ret(int ret)
{
 if (ret != 0) {
 if (srs_h264_is_dvbsp_error(ret)) {
 srs_human_trace("ignoring drop video error, code=%d", ret);
 }
 else if (srs_h264_is_duplicated_sps_error(ret)) {
 srs_human_trace("ignoring duplicated sps, code=%d", ret);
 }
 else if (srs_h264_is_duplicated_pps_error(ret)) {
 srs_human_trace("ignoring duplicated pps, code=%d", ret);
 }
 else {
 srs_human_trace("sending h264 raw data failed. ret=%d", ret);
 return 0;
 }
 }
 return 1;
}
</sstream></iostream>


If you would like to download the original flower.bmp file, here is the link : https://gofile.io/d/w2kX56
This error can be reproduced in any other bmp file also.


Please tell me what is causing this problem when multi-threading is enabled. Am I setting wrong values ? Is the code in which I am streaming the encoded data wrong ?


-
x264 output video is blank when threading is enabled
15 juillet 2020, par NewbieCoderI am using libx264 compiled from source. It was configured to get both .dll and .lib by this command


./configure --disable-cli --enable-shared --extra-ldflags=-Wl,--output-def=libx264.def`


I am using the libx264 API in my screen-sharing program with the preset - "veryfast", tune - "zerolatency", profile - "high" and also the following settings.


param.i_csp = X264_CSP_BGRA;
 param.i_threads = 1;
 param.i_width = width;
 param.i_height = height;
 param.i_fps_num = fps;
 param.i_fps_den = 1;
 param.rc.i_bitrate = bitrate;
 param.rc.i_rc_method = X264_RC_ABR;
 param.rc.b_filler = true;
 param.rc.f_rf_constant = (float)0;
 param.rc.i_vbv_max_bitrate = param.rc.i_bitrate;
 param.rc.i_vbv_buffer_size = param.rc.i_bitrate;
 param.b_repeat_headers = 0;
 param.b_annexb = 1;



For these settings the program works fine. I specified it as single threaded by setting
param.i_threads = 1
.
If this is removed, x264 defaults to using multiple threads and setsparam.i_threads
as 1.5x of number of cores in the CPU automatically. This will give faster performance than running in single thread.

But when I remove the
param.i_threads = 1
to make it multi-threaded, the generated output is fully grey. I cannot see any output when I view the live stream with VLC or some times I can view a weird output.

I am using this bitmap image as an example (https://imgur.com/a/l8LCd1l). Only this same image is being encoded multiple times. When it is saved into .h264 video, it is viewable clearly. But when the encoded payload is sent through rtmp, the live stream produces very bad and weird output (or sometimes no output). This is the weird output which im seeing most of the time for this image : https://imgur.com/a/VdyX1Zm


This is the full example code in which I am both streaming and writing video file of the same picture. This is using the srs librtmp library. There is no error but the stream has weird output.


In this code if you set add
param.i_threads = 1;
then only the output stream will be viewable. The problem is that it should be viewable in both single-threaded and multi-threaded encoding.

#include <iostream>
#include 
#include <sstream>
#include 
#include "srs_librtmp.h"

#pragma comment(lib, "C:/Softwares/x264/libx264.lib")

using namespace std;

int check_ret(int ret);

int main()
{
 int dts = 0;

 x264_param_t param;
 x264_t* h;
 x264_nal_t* nals;
 int i_nal;
 int pts = 0;
 int i_frame_size;
 x264_picture_t picIn;
 x264_picture_t picOut;

 x264_param_default_preset(&param, "veryfast", "zerolatency");

 //x264 settings
 param.i_csp = X264_CSP_BGRA;
 param.i_width = 1920;
 param.i_height = 1080;
 param.i_fps_num = 30;
 param.i_fps_den = 1;
 param.rc.i_bitrate = 2500;
 param.rc.i_rc_method = X264_RC_ABR;
 param.rc.b_filler = true;
 param.rc.f_rf_constant = (float)0;
 param.rc.i_vbv_max_bitrate = param.rc.i_bitrate;
 param.rc.i_vbv_buffer_size = param.rc.i_bitrate;
 param.b_repeat_headers = 0;
 param.b_annexb = 1;

 x264_param_apply_profile(&param, "high");
 h = x264_encoder_open(&param);

 //allocate picture
 x264_picture_alloc(&picIn, param.i_csp, param.i_width, param.i_height);

 //picture settings
 picIn.img.i_plane = 1;
 picIn.img.i_stride[0] = 4 * param.i_width;
 picIn.i_type = X264_TYPE_AUTO;

 int header_size = x264_encoder_headers(h, &nals, &i_nal);
 FILE* fptr;
 fopen_s(&fptr, "example1.h264", "wb");
 // write sps and pps in the video file
 fwrite(nals->p_payload, header_size, 1, fptr);

 int size = 1920 * 1080 * 4;
 char* bmp = new char[size];
 FILE* bitptr;
 errno_t err = fopen_s(&bitptr, "flower.bmp", "rb");
 fseek(bitptr, 54, SEEK_SET);
 fread(bmp, size, 1, bitptr);
 fclose(bitptr);

 srs_rtmp_t rtmp = srs_rtmp_create("127.0.0.1:1935/live/test");

 if (srs_rtmp_handshake(rtmp) != 0)
 {
 std::cout << "Simple handshake failed.";
 return -1;
 }

 std::cout << "Handshake completed successfully.\n";

 if (srs_rtmp_connect_app(rtmp) != 0) {
 std::cout << "Connecting to host failed.";
 return -1;
 }

 std::cout << "Connected to host successfully.\n";

 if (srs_rtmp_publish_stream(rtmp) != 0) {
 std::cout << "Publish signal failed.";
 }

 std::cout << "Publish signal success\n";

 // write sps and pps in the live stream
 int ret = srs_h264_write_raw_frames(rtmp, reinterpret_cast(nals->p_payload), header_size, 0, 0);
 ret = check_ret(ret);
 if (!ret)
 return -1;
 std::cout << "SPS and PPS sent.\n";

 // main loop
 std::cout << "Now streaming and encoding\n";
 int i = 1800;
 while (i--)
 {

 picIn.img.plane[0] = reinterpret_cast(bmp);
 picIn.i_pts = pts++;
 i_frame_size = x264_encoder_encode(h, &nals, &i_nal, &picIn, &picOut);
 if (i_frame_size)
 {
 for (int j = 0; j < i_nal; j++)
 {

 x264_nal_t* nal = nals + j;
 // write data in the video file
 fwrite(nal->p_payload, nal->i_payload, 1, fptr);
 // write data in the live stream
 ret = srs_h264_write_raw_frames(rtmp, reinterpret_cast(nal->p_payload), nal->i_payload, dts, dts);
 ret = check_ret(ret);
 if (!ret)
 {
 return -1;
 }
 }
 }
 else
 {
 std::cout << "i_frame_size = 0 (encoder failed)\n";
 }
 dts += 33;
 }

 while (x264_encoder_delayed_frames(h))
 {
 i_frame_size = x264_encoder_encode(h, &nals, &i_nal, NULL, &picOut);
 if (i_frame_size)
 {
 fwrite(nals->p_payload, i_frame_size, 1, fptr);
 }
 }

 std::cout << "\nAll done\n";
 std::cout << "Output video is example1.h264 and it is viewable in VLC";

 return 0;
}

int check_ret(int ret)
{
 if (ret != 0) {
 if (srs_h264_is_dvbsp_error(ret)) {
 srs_human_trace("ignoring drop video error, code=%d", ret);
 }
 else if (srs_h264_is_duplicated_sps_error(ret)) {
 srs_human_trace("ignoring duplicated sps, code=%d", ret);
 }
 else if (srs_h264_is_duplicated_pps_error(ret)) {
 srs_human_trace("ignoring duplicated pps, code=%d", ret);
 }
 else {
 srs_human_trace("sending h264 raw data failed. ret=%d", ret);
 return 0;
 }
 }
 return 1;
}
</sstream></iostream>


If you would like to download the original flower.bmp file, here is the link : https://gofile.io/d/w2kX56
This error can be reproduced in any other bmp file also.


Please tell me what is causing this problem when multi-threading is enabled. Am I setting wrong values ? Is the code in which I am streaming the encoded data wrong ?


-
Can someone give a clue with those errors from gcc ?
17 mars 2020, par GiuTorI have this code :
#include
#include
#include <libavcodec></libavcodec>avcodec.h>
#include <libavutil></libavutil>opt.h>
#include <libavformat></libavformat>avformat.h>
int main(int argc, char **argv)
{
avcodec_register_all();
av_register_all();
struct AVCodecTag * const *avctag;
AVOutputFormat *outputFormat = NULL;
const char *file = "file.mp4";
outputFormat = av_guess_format(0, file, 0);
if( ! outputFormat)
{
printf ("No container found\n");
exit (1);
}
printf("%s %d\n",outputFormat->long_name,outputFormat->video_codec);
avctag = outputFormat->codec_tag[0];
printf("%d\n",avctag->id);
}The compiler gives this weird error even though I used the -> in the printf line :
error: ‘*avctag’ is a pointer; did you mean to use ‘->’?
printf("%d\n",avctag->id);But it gives also a warning :
warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
avctag = outputFormat->codec_tag;AVOutputFormat:codec_tag is defined according to the docs as :
struct AVCodecTag * const *
That is exactly as I defined the pointer above. Can someone give me a clue why I get the warning and the error ?
Many thanks