采用ffmpeg和ffserver实现音视频直播和点播
来源:互联网 发布:淘宝打印机怎么安装 编辑:程序博客网 时间:2024/04/28 23:28
一、嵌入式开发板采集音视频(远程)
音频采集程序:./audioc -i 222.222.222.222 -p 8888;
视频采集程序:./videoc -i 222.222.222.222 -p 9999;
音频采集程序利用alsa库,采集原始音频帧,发送至服务器进程(222.222.222.222, 8888);
视频采集程序利用v4l2库,采集原始视频帧,h.264硬编码后,发送至服务器进程(222.222.222.222, 9999);
二、Linux服务器接收音视频
音频接收程序:./audios -rp 8888 -sp 8899 -i 239.255.1.2;
视频接收程序:./videos -rp 9999 -sp 9988 -i 239.255.1.2;
音频接收程序,接收原始音频帧,并发送至组播(239.255.1.2, 8899);
视频接收程序,接收264视频帧,并发送至组播(239.255.1.2, 9988);
三、ffserver流媒体服务器搭建
1. ffserver的配置文件:ffserver.conf
配置文件如:
##################################################################### Port on which the server is listening. You must select a different# port from your standard HTTP web server if it is running on the same# computer.HTTPPort 8090# Address on which the server is bound. Only useful if you have# several network interfaces.HTTPBindAddress 0.0.0.0# Number of simultaneous HTTP connections that can be handled. It has# to be defined *before* the MaxClients parameter, since it defines the# MaxClients maximum limit.MaxHTTPConnections 2000# Number of simultaneous requests that can be handled. Since FFServer# is very fast, it is more likely that you will want to leave this high# and use MaxBandwidth, below.MaxClients 1000# This the maximum amount of kbit/sec that you are prepared to# consume when streaming to clients.MaxBandwidth 1000# Access log file (uses standard Apache log file format)# '-' is the standard output.CustomLog -############################################################################################################################################# Definition of the live feeds. Each live feed contains one video# and/or audio sequence coming from an ffmpeg encoder or another# ffserver. This sequence may be encoded simultaneously with several# codecs at several resolutions.<Feed feed1.ffm># You must use 'ffmpeg' to send a live feed to ffserver. In this# example, you can type:## ffmpeg http://localhost:8090/feed1.ffm# ffserver can also do time shifting. It means that it can stream any# previously recorded live stream. The request should contain:# "http://xxxx?date=[YYYY-MM-DDT][[HH:]MM:]SS[.m...]".You must specify# a path where the feed is stored on disk. You also specify the# maximum size of the feed, where zero means unlimited. Default:# File=/tmp/feed_name.ffm FileMaxSize=5MFile feed1.ffmFileMaxSize 5M# You could specify# ReadOnlyFile /saved/specialvideo.ffm# This marks the file as readonly and it will not be deleted or updated.# Specify launch in order to start ffmpeg automatically.# First ffmpeg must be defined with an appropriate path if needed,# after that options can follow, but avoid adding the http:// field#Launch ffmpeg# Only allow connections from localhost to the feed.ACL allow 127.0.0.1</Feed><Feed feed2.ffm>File feed2.ffmFileMaxSize 5MACL allow 127.0.0.1</Feed>################################################################################################################################################### live streams# flv video + audio stream <Stream demo.flv> #Stream:每一个广播(转换后的视频流)的转码设置项目Format flv #视频流格式Feed feed1.ffm #视频流的种子来源VideoFrameRate 25 #视频帧频VideoBitRate 200 #视频比特率VideoGopSize 28VideoSize 480x272 #视频帧大小AVOptionVideo flags +global_headerAudioBitRate 64AudioChannels 2AudioSampleRate 44100AVOptionAudio flags +global_headerStartSendOnKey</Stream># mp3 audio stream<Stream demoAudio.mp3>Format mp3Feed feed2.ffmAudioBitRate 64AudioChannels 2AudioSampleRate 44100AVOptionAudio flags +global_headerNoVideo</Stream># swf video stream# <Stream demoVideo.swf> #Stream:每一个广播(转换后的视频流)的转码设置项目#Format swf #视频流格式#Feed feed3.ffm #视频流的种子来源#VideoFrameRate 25 #视频帧频#VideoBitRate 200 #视频比特率#VideoGopSize 28#VideoSize 480x272 #视频帧大小#AVOptionVideo flags +global_header#NoAudio#</Stream># webm video + audio stream# <Stream demoSystem.webm> #Stream:每一个广播(转换后的视频流)的转码设置项目#Format webm #视频流格式#Feed feed1.ffm #视频流的种子来源#AudioCodec vorbis#AudioBitRate 64#VideoCodec libvpx#VideoFrameRate 25 #视频帧频#VideoBitRate 200 #视频比特率#VideoGopSize 28#VideoSize 480x272 #视频帧大小#AVOptionVideo flags +global_header#AVOptionVideo cpu-used 0#AVOptionVideo qmin 10#AVOptionVideo qmax 42#AVOptionAudio flags +global_header#PreRoll 15#StartSendOnKey# </Stream># Ogg Vorbis audio# <Stream test.ogg>#Format ogg#Feed feed2.ffm#Metadata title "Stream title"#AudioBitRate 64#AudioChannels 2#AudioSampleRate 44100#NoVideo# </Stream>################################################################################################################################################# local streams<Stream dengZiQi>File "dengZiQi.flv"Format flv</Stream><Stream Maroon5_Sugar>File "Sugar.flv"Format flv</Stream>################################################################################################################################################### Server status<Stream stat.html>Format status# Only allow local people to get the statusACL allow 127.0.0.1ACL allow 192.168.0.0 192.168.255.255#FaviconURL http://pond1.gladstonefamily.net:8080/favicon.ico</Stream>################################################################################################################################################### Redirect index.html to the appropriate site<Redirect index.html>URL http://www.ffmpeg.org/</Redirect>#########################################################################
其中,<Stream demo.flv>是音视频直播流,从feed1.ffm中获取数据, <Stream demoAudio.mp3>为单独的音频流,从feed2.ffm中获取数据。<Stream demoVideo.swf>为单独的视频流,由于ffserver在出现音频流后不能再出现单独的视频流,所以此处注释掉了<Stream demoVideo.swf>。
local streams下的都是本地文件,ffserver支持本地文件的点播。
关于播放,swf是flash支持的格式,几乎所有的浏览器都支持播放此格式视频;flv是最为流行的网络视频格式,但一般情况下,浏览器不支持该格式视频直接播放,需安装插件,这里采用vlc插件:http://www.videolan.org/;webm是最新的html5支持的视频格式,此格式视频可以在chrome浏览器和firefox浏览器中直接播放;mp3、wav等音频格式可以在浏览器中直接播放。
2. ffserver启动命令:
#! /bin/sh./ffserver -f ./ffserver.conf
四、ffserver实现视频点播
在ffserver.conf中加入如下命令:
<Stream dengZiQi>File "dengZiQi.flv"Format flv</Stream>
五、向ffserver接入音视频流,实现视频直播
1. 从组播中接入实时音视频流并转码封装
./ffmpeg -f s16le -ar 44100 -ac 1 -i udp://239.255.1.2:8899 -i udp://239.255.1.2:9988 http://222.222.222.222:8090/feed1.ffm
前面udp流是音频流(udp地址为上述组播地址);中间udp流是视频流(udp地址为上述组播地址);后面http流是根据ffserver.conf进行转码并封装后的特定格式音视频流(http地址为远程ffserver服务器地址),它存储在ffserver的feed1.ffm缓冲文件中。这里,由于接收的是原始音频流,所以采用pcm_s16le压缩编码,采样率为44.1k,单声道;而视频流本身已经采用H.264压缩编码了,不再采用其他压缩编码。
2. 从组播中接入实时音频流
./ffmpeg -f s16le -ar 44100 -ac 1 -i udp://239.255.1.2:8899 http://222.222.222.222:8090/feed2.ffm
3. 从组播中接入实时视频流
./ffmpeg -i udp://239.255.1.2:9988 http://222.222.222.222:8090/feed3.ffm
4. 从本地文件中接入音视频流
./ffmpeg -i video.mp4 -i audio.mp3 http://222.222.222.222:8090/feed4.ffm
5. 录制屏幕接入音视频流
./ffmpeg -f x11grab -r 25 -s 640x512 -i :0.0 -f alsa -i pulse http://222.222.222.222:8090/feed5.ffm
6. 从摄像头获取视频麦克风获取音频接入音视频流
./ffmpeg -f video4linux2 -s 640x480 -r 25 -i /dev/video0 -f alsa -i pulse http://222.222.222.222:8090/feed6.ffm
命令如:
#! /bin/shexec ./audios -rp 8888 -sp 8899 -i 239.255.1.2 1>/dev/null 2>&1 &exec ./videos -rp 9999 -sp 9988 -i 239.255.1.2 1>/dev/null 2>&1 &exec ./ffmpeg -f s16le -ar 44100 -ac 1 -i udp://239.255.1.2:8899 -i udp://239.255.1.2:9988 http://222.222.222.222:8090/feed1.ffm 1>/dev/null 2>&1 &exec ./ffmpeg -f s16le -ar 44100 -ac 1 -i udp://239.255.1.2:8899 http://222.222.222.222:8090/feed2.ffm 1>/dev/null 2>&1 &exec ./ffmpeg -i udp://239.255.1.2:9988 http://222.222.222.222:8090/feed3.ffm 1>/dev/null 2>&1 &
六、其他命令
1. 分离音视频流
./ffmpeg -i demo.mkv -vcodec copy -an demo.mp4 ## 分离出视频流 ./ffmpeg -i demo.mkv -acodec copy -vn demo.mp3 ## 分离出音频流
2. 视频解复用
./ffmpeg -i demo.mp4 -vcodec copy -an -f m4v demo.264
3. 音视频封装
./ffmpeg -i demo.mp4 -i demo.mp3 -vcodec copy -acodec copy demo.mkv
转载地址:http://blog.csdn.net/zuijinhaoma8/article/details/45826001
- 采用ffmpeg和ffserver实现音视频直播和点播
- ffmpeg和ffserver
- ubuntu 14 x86_64 nginx rtmp ffmpeg 在线直播和点播
- ffserver服务器实现WebM格式视频直播
- P2P音/视频直播、点播
- nginx-视频直播和点播服务的干货分享
- nginx-视频直播和点播服务的干货分享
- 嵌入式Liux:ffmpeg+ffserver实现音视频通讯
- ffmpeg和ffserver配置使用
- FMS直播和点播测试
- 直播和点播技术分析
- ffmpeg和ffserver配合使用实现实时的流媒体服务
- HLS实现点播和直播时,M3U8文件的不同
- HLS实现点播和直播时,M3U8文件的不同
- FFMPEG--最简单的视频网站(点播、直播)
- FFMPEG--最简单的视频网站(点播、直播)
- ffmpeg+ffserver配置直播服务器
- 使用 nginx 和 rtmp 插件搭建视频直播和点播服务器
- 【丰胸】的办法 v信 616628874
- 怎么让硬盘损坏数据恢复
- Hdu 4004 The Frog's Games(二分)
- 算法导论-KMP模版
- POJ 3616(dp/记忆化搜索)
- 采用ffmpeg和ffserver实现音视频直播和点播
- Android Studio安装、配置
- Jenkins 上实现并发测试
- Leetcode Reorder List
- 强制Actionbar与Tab显示为一行或两行
- sgu221:Big Bishops(DP+高精度)
- sublime text 3配置C++编译环境
- 恋青春面膜怎么样 weixin 616628874
- AsyncTask和Handler对比