关于ffmpeg推流,如何推流一个文件夹里的所有视频或者多个视频

关于ffmpeg推流,如何推流一个文件夹里的所有视频或者多个视频,第1张

如果你想推流一个文件夹里的所有视频你可以使用通配符(wildcard)来匹配文件夹中的所有视频。例如,你可以使用 -i /path/to/folder/mp4 来匹配文件夹中所有的 MP4 视频文件。

如果你想推流多个视频,你可以使用 -i 参数多次指定视频文件的路径。例如,你可以使用 ffmpeg -re -i video1mp4 -i video2mp4 -vcodec libx264 -acodec aac -f flv rtmp://localhost:1935/rtmplive/home 来推流 video1mp4 和 video2mp4 这两个视频。

你也可以使用 -f concat 参数来将多个视频文件合并成一个输入源,然后使用 -i 参数指定合并后的视频文件。这样,你就可以使用单个命令推流多个视频。例如:

ffmpeg -f concat -safe 0 -i listtxt -c copy outputmp4

ffmpeg -re -i outputmp4 -vcodec libx264 -acodec aac -f flv rtmp://localhost:1935/rtmplive/home

其中,listtxt 是一个文本文件,其中包含了要合并的视频文件的列表。每一行的格式为 file '/path/to/videomp4'。例如:

file '/path/to/video1mp4'

file '/path/to/video2mp4'

file '/path/to/video3mp4'

这样,你就可以使用两条命令推流多个视频了。

主程序启动后,会根据config判断是控制台模式还是后台运行模式,之后进入run_hybrid_server启动各种服务,rtmp,>

最近接手一个项目,里面需要实现播放实时监控视频的功能找了很久,发现用VideoJs可以实现播放rtmp视频流,于是便开始了踩坑之旅了

videoJs()接收三个参数, DOM元素的ID, videoJs的配置, 以及一个回调函数

然后便可以重新实例化videojs, 加载url播放视频

视频编码有几种方式:

1硬编码,使用MediaCodec实现

2软编码,使用FFmpeg或者libx264库来实现。

本文分享在Android平台视频编码-软编码的实现,也就是用FFmpeg来实现视频的编码,rtmp推流到服务器上,相机采集视频将在下一篇文章分享。

流媒体服务器使用 nginx-rtmp-module 来进行搭建。

本文所使用FFmpeg的版本是41,关于FFmpeg编译成Android平台so库如果有需要,我将在下一篇文章分享说明。

视频编码比较耗cpu,上传视频数据的会耗网络io,所以需要开启新线程去处理,这里我用HandlerThread来处理视频的编码上传。

初始化编码相关 *** 作

这里我们使用的是FFmpeg,所以在编码前我们会先做一些初始化以及参数设置工作。

FFmpeg初始化

av_register_all()

创建输出格式上下文

avformat_alloc_output_context2()

获取编码器

avcodec_find_encoder(AV_CODEC_ID_H264) 获取H264的编码器

设置编码器参数

使用给定的编码器和参数初始化编码上下文

avcodec_open2(pCodecCtx, pCodec, &param)

创建视频流

video_st = avformat_new_stream(ofmt_ctx, pCodec)

打开输出上下文

avio_open(&ofmt_ctx->pb, out_path, AVIO_FLAG_READ_WRITE)

写入输出头信息

avformat_write_header(ofmt_ctx, NULL)

像素格式转换

AV_PIX_FMT_YUV420P,它是纯平面存储。总共三个平面,分别存放,Y、U、V数据。

当图像宽是width,高是height时,Y分量的大小就是width×heitht,而U是width×heitht/4,V也是U是width×heitht/4。

H264编码

首先我们需要了解两个数据结构AVFrame、AVPacket

AVFrame存放的是原始数据、AVPacket存放的是编码后的数据。

创建AVPacket

av_new_packet(&enc_pkt, picture_size);

开始编码

ret = avcodec_encode_video2(pCodecCtx, pFrameYUV);

输出一帧编码后的视频数据

ret = av_write_frame(pCodecCtx, &enc_pkt);

释放资源

小伙伴们有疑问的可以在下方评论区评论。

以上就是关于关于ffmpeg推流,如何推流一个文件夹里的所有视频或者多个视频全部的内容,包括:关于ffmpeg推流,如何推流一个文件夹里的所有视频或者多个视频、SRS RTMP 发布和播放代码解析、在Vue组件中使用Video播放rtmp视频流等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10638810.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存