
Recherche avancée
Médias (1)
-
Richard Stallman et le logiciel libre
19 octobre 2011, par
Mis à jour : Mai 2013
Langue : français
Type : Texte
Autres articles (61)
-
Websites made with MediaSPIP
2 mai 2011, parThis page lists some websites based on MediaSPIP.
-
Possibilité de déploiement en ferme
12 avril 2011, parMediaSPIP peut être installé comme une ferme, avec un seul "noyau" hébergé sur un serveur dédié et utilisé par une multitude de sites différents.
Cela permet, par exemple : de pouvoir partager les frais de mise en œuvre entre plusieurs projets / individus ; de pouvoir déployer rapidement une multitude de sites uniques ; d’éviter d’avoir à mettre l’ensemble des créations dans un fourre-tout numérique comme c’est le cas pour les grandes plate-formes tout public disséminées sur le (...) -
Ajouter des informations spécifiques aux utilisateurs et autres modifications de comportement liées aux auteurs
12 avril 2011, parLa manière la plus simple d’ajouter des informations aux auteurs est d’installer le plugin Inscription3. Il permet également de modifier certains comportements liés aux utilisateurs (référez-vous à sa documentation pour plus d’informations).
Il est également possible d’ajouter des champs aux auteurs en installant les plugins champs extras 2 et Interface pour champs extras.
Sur d’autres sites (11586)
-
Revision 5938 : pour swfupload ce n’est pas data.result.message mais data.message
29 septembre 2011, par kent1 — Logpour swfupload ce n’est pas data.result.message mais data.message
-
Revision 5938 : pour swfupload ce n’est pas data.result.message mais data.message
29 septembre 2011, par kent1 — Logpour swfupload ce n’est pas data.result.message mais data.message
-
How to save the video stream as h264
16 mars 2023, par aaadddzxcI pull the stream through ffmpeg, and then save the video of this stream as an h264 file, but the saved file cannot be played. Why is this ?


The h264 saved by the following code cannot be played,i dont know why...


i try to vlc play, but cant play the h264 file.


can be save to h264 without avformat_alloc_output_context2 function ?


#include <thread>
#include <iostream>
#include <fstream>
extern "C"
{
#include <libavcodec></libavcodec>avcodec.h>
#include <libavcodec></libavcodec>bsf.h>
#include <libavformat></libavformat>avformat.h>
}

#pragma comment(lib,"avcodec.lib")
#pragma comment(lib,"avdevice.lib")
#pragma comment(lib,"avfilter.lib")
#pragma comment(lib,"avformat.lib")
#pragma comment(lib,"avutil.lib")
#pragma comment(lib,"swresample.lib")
#pragma comment(lib,"swscale.lib")

int mp4toannexb(AVBSFContext* bsf_ctx, AVPacket* pkt, std::ofstream& out)
{
 int ret;

 ret = av_bsf_send_packet(bsf_ctx, pkt);
 if (ret < 0) {
 std::cout << "bsf send packet failed, errno:" << ret << std::endl;
 return -1;
 }

 for (;;) {
 ret = av_bsf_receive_packet(bsf_ctx, pkt);
 if (AVERROR_EOF == ret || AVERROR(EAGAIN) == ret) {
 return 0;
 }
 if (ret < 0) {
 std::cout << "Could not receive packet, errno:" << ret << std::endl;
 return -1;
 }
 out.write((const char*)pkt->data, pkt->size);
 }
 return 0;
}


int main()
{
 AVOutputFormat* ofmt = NULL;
 AVFormatContext* ifmt_ctx = NULL;
 AVBSFContext* bsf_ctx = NULL;
 AVPacket* pkt = NULL;
 const char* in_filename = "http://192.168.1.12:8088/live/123.flv";
 int ret = -1;
 int video_index = -1;
 std::ofstream outh264("D:\\ConsoleApplication1\\Debug\\out.h264", std::ios::binary | std::ios::trunc);

 avformat_network_init();

 if ((ifmt_ctx = avformat_alloc_context()) == NULL) {
 std::cout << "avformat_alloc_context failed." << std::endl;
 exit(1);
 }

 if ((ret = avformat_open_input(&ifmt_ctx, in_filename, 0, 0)) < 0) {
 std::cout << "Could not open input file." << std::endl;
 exit(1);
 }

 if ((ret = avformat_find_stream_info(ifmt_ctx, 0)) < 0) {
 std::cout << "Failed to retrieve input stream information" << std::endl;
 return -1;
 }

 if (!(pkt = av_packet_alloc())) {
 std::cout << "Could not allocate packet" << std::endl;
 return -1;
 }

 video_index = av_find_best_stream(ifmt_ctx, AVMEDIA_TYPE_VIDEO, -1, -1, NULL, 0);
 if (video_index < 0) {
 std::cout << "Could not find stream " << std::string(av_get_media_type_string(AVMEDIA_TYPE_VIDEO)) << std::endl;
 return -1;
 }

 av_dump_format(ifmt_ctx, 0, in_filename, 0);

 const AVBitStreamFilter* filter = av_bsf_get_by_name("h264_mp4toannexb");
 if (NULL == filter) {
 std::cout << "Could not create filter" << std::endl;
 return -1;
 }

 ret = av_bsf_alloc(filter, &bsf_ctx);
 if (ret < 0) {
 printf("Could not alloc bitstream filter \n");
 return -1;
 }

 // avcodec_parameters_from_context
 ret = avcodec_parameters_copy(bsf_ctx->par_in, ifmt_ctx->streams[video_index]->codecpar);
 if (ret < 0) {
 printf("Parameter copy filed, errno: %d \n", ret);
 return -1;
 }

 ret = av_bsf_init(bsf_ctx);
 if (ret < 0) {
 printf("BSF init failed, errno: %d \n", ret);
 return -1;
 }

 while (av_read_frame(ifmt_ctx, pkt) >= 0) {
 if (pkt->stream_index == video_index)
 {
 mp4toannexb(bsf_ctx, pkt, outh264);
 }
 av_packet_unref(pkt);
 }
 outh264.close();
 avformat_close_input(&ifmt_ctx);
 av_packet_free(&pkt);
 av_bsf_free(&bsf_ctx);

 return 0;
}
</fstream></iostream></thread>