HLS点播 FFmpeg udp视频流

HLS点播--FFmpeg接收udp视频流

FFmpeg接收udp视频流实现HLS直播的方法,就用VLC将一个MP4文件生成UDP视频流来代替直播流。

1、确认Nginx安装配置成功支持HLS,具体过程可参考我以前博客。

2、使用VLC生成UDP视频流

3、FFmpeg接收udp流转换成RTMP视频流推送到Nginx上

[plain]  view plain  copy
  1. ffmpeg -i udp://192.168.1.110:1234 -vcodec copy -acodec aac -ar 44100 -strict -2 -ac 1 -f flv -s 1280x720 -q 10 rtmp://192.168.1.110:1935/hls/test2  

效果如下:

[plain]  view plain  copy
  1. Input #0, mpegts, from 'udp://192.168.1.110:1234':  
  2.   Duration: N/A, start: 1904.952289, bitrate: N/A  
  3.   Program 1   
  4.     Stream #0:0[0x45]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p, 1280x554 [SAR 1:1 DAR 640:277], 23.98 fps, 25 tbr, 90k tbn, 47.96 tbc  
  5. Output #0, flv, to 'rtmp://192.168.1.110:1935/hls/test2':  
  6.   Metadata:  
  7.     encoder         : Lavf56.15.102  
  8.     Stream #0:0: Video: h264 ([7][0][0][0] / 0x0007), yuv420p, 1280x554 [SAR 1:1 DAR 640:277], q=2-31, 23.98 fps, 1k tbn, 90k tbc  
  9. Stream mapping:  
  10.   Stream #0:0 -> #0:0 (copy)  
  11. Press [q] to stop, [?] for help  
  12. frame= 3695 fps= 15 q=-1.0 size=   32812kB time=00:02:36.16 bitrate=1721.3kbits/s      

4、在手机浏览器中输入地址

[plain]  view plain  copy
  1. http://192.168.1.110/hls/test2.m3u8  
 
 
2楼  thezhili 2015-04-12 23:50发表 [回复]
你好,我现在能实现hls直播了。
但是还是遇到个问题:好像不是所有视频都支持,有的直播效果是只有声音没有图像,我看了一下那些切片,很小,的确是只有声音没有图像的分片。请问这是什么原因呢?
Re:  小石头吼吼 2015-04-13 15:55发表 [回复]
回复thezhili:这是因为HLS协议的视频分段TS流只支持和h264,你在转码时别-vcodec copy了 直接转换了-vcodec libx264就好了
Re:  thezhili 2015-04-13 16:10发表 [回复]
回复小石头吼吼:你好,我用的视频就是H264的mp4视频,用vlc发出udp流后,本地播放的就是只有声音没有图像,切片也因此没有图像只有声音,不知什么原因? 但是我也试过其他H264的视频,有些视频是可以正常直播的。还有一个问题,HLS直播不支持h265视频吗?
Re:  小石头吼吼 2015-04-13 17:00发表 [回复]
回复thezhili:HLS只支持h264和aac,你上面的原因可能是视频源的问题,你可以用网络摄像机测试下,毕竟摄像机输出格式自己可以定。
1楼  thezhili 2015-04-09 15:40发表 [回复] [引用] [举报]
你好,谢谢你之前回复我!
你的这个帖子里是ffmpeg接收udp流转成rtmp流发到nginx上,有没有办法实现ffmpeg接收udp流自动切片到某个文件夹目录下呢?
还有,按照你这个做法,你的nginx目录下会产生什么文件?
Re:  小石头吼吼 2015-04-09 16:20发表 [回复] [引用] [举报]
回复thezhili:我这种方式的切片也是在一个文件夹下啊,这个文件夹的地址是你自己在Nginx配置文件中规定的。默认/tmp中啊!location /hls { types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } root /tmp; add_header Cache-Control no-cache; }
Re:  thezhili 2015-04-09 16:49发表 [回复] [引用] [举报]
回复小石头吼吼:好的,除了这个办法,有什么办法接收udp流之后直接切片放到目录下吗?
Re:  小石头吼吼 2015-04-09 18:53发表 [回复] [引用] [举报]
回复thezhili:你生成TS切片不是送给服务器吗?直接切的话不清楚怎么做了
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FFmpeg是一个开源的跨平台音视频处理工具,可以用于音视频的编解码、码、推流等操作。下面是使用FFmpeg进行代码推流HLS的简要介绍: 1. 配置FFmpeg环境:首先需要下载并安装FFmpeg,并配置好环境变量,以便在命令行中可以直接使用FFmpeg命令。 2. 编写推流代码:使用FFmpeg进行推流需要编写一段代码,可以使用C或者其他支持FFmpeg的编程语言。以下是一个简单的C语言示例: ```c #include <stdio.h> #include <libavformat/avformat.h> int main() { AVFormatContext *fmt_ctx = NULL; AVOutputFormat *out_fmt = NULL; AVStream *out_stream = NULL; AVCodecContext *codec_ctx = NULL; AVCodec *codec = NULL; int ret; // 初始化FFmpeg av_register_all(); // 创建输出上下文 ret = avformat_alloc_output_context2fmt_ctx, NULL, "hls", "output.m3u8"); if (ret < 0) { printf("Failed to create output context\n"); return ret; } // 添加音视频流 out_fmt = fmt_ctx->oformat; out_stream = avformat_new_stream(fmt_ctx, NULL); if (!out_stream) { printf("Failed to create output stream\n"); return -1; } // 设置编码参数 codec_ctx = out_stream->codec; codec_ctx->codec_id = out_fmt->audio_codec; codec_ctx->codec_type = AVMEDIA_TYPE_AUDIO; codec_ctx->sample_fmt = AV_SAMPLE_FMT_FLTP; // 设置其他参数... // 查找编码器 codec = avcodec_find_encoder(codec_ctx->codec_id); if (!codec) { printf("Failed to find encoder\n"); return -1; } // 打开编码器 ret = avcodec_open2(codec_ctx, codec, NULL); if (ret < 0) { printf("Failed to open encoder\n"); return ret; } // 打开输出文件 ret = avio_open(&fmt_ctx->pb, "output.m3u8", AVIO_FLAG_WRITE); if (ret < 0) { printf("Failed to open output file\n"); return ret; } // 写入文件头 ret = avformat_write_header(fmt_ctx, NULL); if (ret < 0) { printf("Failed to write header\n"); return ret; } // 推流过程... // 写入文件尾 av_write_trailer(fmt_ctx); // 释放资源 avio_close(fmt_ctx->pb); avformat_free_context(fmt_ctx); return 0; } ``` 3. 编译和运行代码:将上述代码保存为一个C文件,使用相应的编译器进行编译,并链接FFmpeg库。然后运行生成的可执行文件即可开始推流。 需要注意的是,上述示例只是一个简单的推流代码框架,具体的推流过程需要根据实际需求进行配置和实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值