首页  编辑  

史上最简单、最容易的摄像头视频流直播(免插件、H5通用)方法

Tags: /计算机文档/软件应用技巧/   Date Created:
The best, simple, easy way to live broadcast IP camera streaming to H5 users.
史上最简单,最容易,最轻松实现的摄像头视频流直播方案。
本方案是H5方案,手机、浏览器无需安装任何插件!完全通杀所有平台。

本方案,在服务器端,无需任何特定HTTP服务器,可以用任意HTTP服务器,例如Apache、Nginx、IIS、HFS等都可以。
首先在web服务器上安装ffmpeg和HTTP服务器,HTTP服务器随意就好。
然后在服务器上运行指令(注意替换相关参数):
ffmpeg -v info -i rtsp://username:password@camera_ip:port/ -c:v copy -c:a copy -bufsize 1835k -pix_fmt yuv420p -flags -global_header -hls_time 10 -hls_list_size 6 -hls_wrap 10 -start_number 1 /var/www/test.m3u8
实际上,上面的指令会连接摄像头(RTSP协议,RTP协议也可以,反正FFMPEG可以支持许多视频源!),接收流,然后保存到/var/www/test.ts1 ... 2... 3等文件里面缓冲,然后客户端浏览器请求的时候会自动获取到直播的流内容!

然后前端网页中,用下面代码即可播放了:
<video width="352" height="198" controls>
    <source src="/test.m3u8" type="application/x-mpegURL">
</video>
下面是客户端推流给服务器,并转播后直播的方法:
1. 在客户端电脑上,用摄像头或者其他方法推流:
下面是直接通过笔记本电脑的摄像头推流给服务器,假设服务器IP为1.2.3.4:
ffmpeg -f dshow -i video="Integrated Webcam" -preset:v ultrafast -tune:v zerolatency -vcodec h264 -b:v512K -f rtp rtp://1.2.3.4:6666
此时会显示类似的sdp代码:
SDP:
v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 1.2.3.4
t=0 0
a=tool:libavformat 58.17.103
m=video 6666 RTP/AVP 96
b=AS:512
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1
2. 在服务器上,非 www 网页目录下,保存上述sdp内容为live.sdp
3. 在服务器上,用ffmpeg接收流并转hls直播流,假设直播流保存在/var/www/html/m3u8/live.m3u8:
ffmpeg -hwaccel qsv -v info -protocol_whitelist file,rtp,udp -i live.sdp -c:v copy -bufsize 2M -pix_fmt yuv420p -flags -global_header -hls_time 10 -hls_list_size 6 -hls_wrap 10 -start_number 1 /var/www/html/m3u8/live.m3u8
4. 在服务器网页目录下编辑 /var/www/html/live.html,内容如下:
<html>
<body>
<video width="800" height="600" controls>
    <source src="/m3u8/live.m3u8" type="application/x-mpegURL">
</video>
</body>
</html>
在其他地方,用浏览器打开 http://1.2.3.4/live.html,就可以看到客户端的直播流内容了。