当前位置: 首页 > news >正文

企业所得税优惠政策有哪些济南seo优化外包服务公司

企业所得税优惠政策有哪些,济南seo优化外包服务公司,多语言企业网站模板,南昌英文网站建设引言 在视频录制中,有时会碰到这样一个需求,将不同摄像头的画面写入到一个视频文件,这个叫法很多,有的厂家叫合流模式,有的叫多画面多流模式。无论如何,它们的实质都是在一个视频文件上实现多路不同分辨率视…

   引言

    在视频录制中,有时会碰到这样一个需求,将不同摄像头的画面写入到一个视频文件,这个叫法很多,有的厂家叫合流模式,有的叫多画面多流模式。无论如何,它们的实质都是在一个视频文件上实现多路不同分辨率视频的保存。

     经过调查,支持这种需求封装格式的有MP4、MOV、MKV 等,这里因为MP4 格式应用最广泛。

   原理

     ffmpeg 有一个map命令,可以将多路视频轨封装在一个视频容器,掰ffmpeg源码发现其实新建一个新的AVStream,修改stream->index,就可以实现多流录制的目的。

   

ffmpeg -i input.mp4 -i  test.mp4  -map 0:v:0 -map 1:v -map 0:a -map 1:a -c copy  -y mix.mp4

   

#include <iostream>
#include <string>extern "C"
{#include <libavutil/timestamp.h>#include <libavformat/avformat.h>
}typedef struct
{char* file_name;AVFormatContext* fmt_ctx;int video_index;int audio_index;int source_index;double last_pts[2];double last_dts[2];AVRational video_time_base;AVRational audio_time_base;bool is_end;
}InputStream;int create_stream(InputStream *input_stream, AVFormatContext* out_fmt_ctx, int &stream_num)
{int i = 0;int ret = 0;if ((ret = avformat_open_input(&input_stream->fmt_ctx, input_stream->file_name, 0, 0)) < 0) //打开输出文件{fprintf(stderr, "Could not open input file '%s'", input_stream->file_name);goto end;}if ((ret = avformat_find_stream_info(input_stream->fmt_ctx, 0)) < 0) //打开输入{fprintf(stderr, "Failed to retrieve input stream information");goto end;}//av_dump_format(input_stream->fmt_ctx, 0, input_stream->file_name, 0);//打印信息for (size_t i = 0; i < input_stream->fmt_ctx->nb_streams; i++){AVStream* in_stream = input_stream->fmt_ctx->streams[i];AVStream* out_stream = avformat_new_stream(out_fmt_ctx, in_stream->codec->codec);if (in_stream->codecpar->codec_type == AVMEDIA_TYPE_AUDIO){input_stream->audio_index = i;input_stream->audio_time_base = in_stream->time_base;printf("流 %d 是音频 \n", input_stream->source_index + i);}if (in_stream->codecpar->codec_type == AVMEDIA_TYPE_VIDEO){input_stream->video_index = i;input_stream->video_time_base = in_stream->time_base;printf("流 %d 是视频 \n", input_stream->source_index + i);}if (!out_stream){fprintf(stderr, "Failed allocating output stream\n");goto end;}ret = avcodec_copy_context(out_stream->codec, in_stream->codec);if (ret < 0){fprintf(stderr, "Failed to copy context from input to output stream codec context\n");goto end;}out_stream->codec->codec_tag = 0;if (out_fmt_ctx->oformat->flags & AVFMT_GLOBALHEADER)out_stream->codec->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;stream_num++;}
end:return ret;
}int write_a_channel(InputStream *stream, AVFormatContext *out_fmt_ctx)
{int ret = -1;AVPacket packet;ret = av_read_frame(stream->fmt_ctx, &packet);if (ret < 0){if (ret == AVERROR_EOF){//printf("readFrame报错 %d\n", ret);av_free_packet(&packet);return ret;}}AVRational time_base = {0};AVStream* in_stream = stream->fmt_ctx->streams[packet.stream_index];AVStream* out_stream = out_fmt_ctx->streams[packet.stream_index];packet.stream_index = stream->source_index + packet.stream_index;if (in_stream->codecpar->codec_type == AVMEDIA_TYPE_VIDEO){time_base = stream->video_time_base;}if (in_stream->codecpar->codec_type == AVMEDIA_TYPE_AUDIO){time_base = stream->audio_time_base;}packet.pts = av_rescale_q_rnd(packet.pts, time_base, out_stream->time_base, (AVRounding)(AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX));packet.dts = av_rescale_q_rnd(packet.dts, time_base, out_stream->time_base, (AVRounding)(AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX));if (packet.pts < 0){packet.pts = 0;}if (packet.dts < 0){packet.dts = 0;}//printf("%d, pts %d dts %d \n", packet.stream_index, packet.pts, packet.dts);ret = av_interleaved_write_frame(out_fmt_ctx, &packet);if (ret < 0){printf("写入错误\n");}av_free_packet(&packet);return ret;
}int main(int argc, char** argv)
{int ret = -1;char file_path[100][100] = {"D:\\素材\\test1.mp4", "D:\\素材\\test2.mp4", "D:\\素材\\test3.mp4", "D:\\素材\\test4.mp4"};int count = sizeof(file_path) / sizeof(char);const char *out_fileName = "my_muxing.mp4";av_register_all();AVOutputFormat* ofmt = NULL;AVFormatContext* out_fmt_ctx = NULL;const int channel_num = 4;avformat_alloc_output_context2(&out_fmt_ctx, NULL, NULL, out_fileName);//创建streams	InputStream stream_arry[channel_num] = {0};int stream_index = 0;for (int i = 0; i < channel_num; i++){		int stream_num = 0;stream_arry[i].file_name = file_path[i];stream_arry[i].source_index = stream_index;ret = create_stream(&stream_arry[i], out_fmt_ctx, stream_index);stream_index += stream_num;}if (!out_fmt_ctx){return -1;}ofmt = out_fmt_ctx->oformat;if (!(ofmt->flags & AVFMT_NOFILE)){ret = avio_open(&out_fmt_ctx->pb, out_fileName, AVIO_FLAG_WRITE);if (ret < 0){fprintf(stderr, "Could not open output file '%s'", out_fileName);return -1;}}AVDictionary* opts = NULL;av_dict_set(&opts, "movflags", "frag_keyframe+empty_moov", 0);//fmp4输出ret = avformat_write_header(out_fmt_ctx, &opts);if (ret < 0){fprintf(stderr, "Error occurred when opening output file\n");return -1;}while (true){int finish_count = 0;for (int i = 0; i < channel_num; i++){if (!stream_arry[i].is_end){ret = write_a_channel(&stream_arry[i], out_fmt_ctx);if (ret == AVERROR_EOF){stream_arry[i].is_end = true;finish_count++;}else{continue;}}}if (finish_count >= channel_num - 1){break;}}//清理for (size_t i = 0; i < channel_num; i++){avformat_close_input(&stream_arry[i].fmt_ctx);}ret = av_write_trailer(out_fmt_ctx);printf("==============合并完毕,写文件尾部 %d=============\n", ret);return 0;
}

设置flags 避免播放器拖动的时候出现花屏。

 packet->flags = isKeyFrame ? packet->flags | AV_PKT_FLAG_KEY : packet->flags;

http://www.hengruixuexiao.com/news/29884.html

相关文章:

  • 西宁圆井模板我自己做的网站小说网站排名免费
  • 温州网站建设接单网络营销方案策划
  • 做网站维护需要学什么app运营需要做哪些
  • 建网站做哪方面上海培训机构排名
  • 网站赌博代理怎么做seo公司排名教程
  • 龙港哪里有做阿里巴巴网站深圳网络营销渠道
  • 免费的行情网站app代码百度手机seo
  • wordpress动态模板seo网站推广方法
  • 网站建设难点分析昆明seo网站建设
  • 广州网站建设报价产品营销策划方案
  • 做亚马逊联盟一定要有网站吗seo兼职平台
  • 做网站被骗了警察不管抖音引流推广一个30元
  • 郑州 做网站厦门网站seo外包
  • 做网站搞友情链接网页宣传
  • 毛片a做片在线观看网站有哪些百度品牌广告多少钱一个月
  • 浙江省网站建设公司排名微商引流的最快方法是什么
  • wordpress用户二级域名抖音seo查询工具
  • 南宁企业网站推广技巧网站优化及推广方案
  • wordpress首页不显示文章标题seo人员的职责
  • 如何设置自己的网站个人网站建站流程
  • 医院网站HTML5网络推广的重要性与好处
  • 做英文企业网站seo每日
  • 网站建设需要哪些证书新东方一对一辅导价格
  • 阿勒泰网站建设百度中心
  • 做外贸建网站需要多少钱北京网站制作建设公司
  • 一级a做爰片免费网站偷拍厕所安徽疫情最新情况
  • python 做 网站宁波seo外包平台
  • 素材网站建设产品互联网推广
  • 音乐摄影网站建设宗旨简述获得友情链接的途径
  • 杭州做网站下沙鄂州seo