标签:编码 H.264 ffmpeg vcodec RTP 推送 摄像头
docker编译环境
docker pull abdulachik/ffmpeg.js:latest
docker run -it -p 8080:8080 -v /Users/workspace/Downloads/ffmpeg_wasm:/tmp --privileged=true abdulachik/ffmpeg.js:latest /bin/bash
cd /tmp
流程概述
摄像头->ffmpeg->编码为h264视频->传递给h264解码器->播放
(也可以让视频编码后直接RTMP协议推流,本地解码播放仅作测试)
ffmpeg编码视频流(来自摄像头)为flv(h264)
读取PC摄像头视频数据并以RTMP协议发送为直播流。
ffmpeg综合应用示例(一)——摄像头直播
浏览器可通过调用MediaDevices.getUserMedia()来访问本地媒体,调用该方法后浏览器会提示用户给予使用媒体输入的许可,媒体输入会产生一个MediaStream,里面包含了请求的媒体类型的轨道。此流可以包含一个视频轨道(来自硬件或者虚拟视频源,比如相机、视频采集设备和屏幕共享服务等等)、一个音频轨道(同样来自硬件或虚拟音频源,比如麦克风、A/D转换器等等),也可能是其它轨道类型。
谈谈MediaStream
FFmpeg获取DirectShow设备数据(摄像头,录屏)
流媒体协议
- RTP:基于UDP协议,不保证传输质量
- RTCP
- RTSP
- RTMP
- MMS
- HLS
编码为H.264,发布RTP
下面这条命令,实现了:获取摄像头数据->编码为H.264->封装为RTP并发送至组播地址。
ffmpeg -f dshow -i video="Integrated Camera" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f rtp rtp://233.233.233.223:6666>test.sdp
注1:考虑到提高libx264的编码速度,添加了-preset:v ultrafast和-tune:v zerolatency两个选项。
注2:结尾添加“>test.sdp”可以在发布的同时生成sdp文件。该文件可以用于该视频流的播放。
下面这条命令,实现了从摄像头读取数据并编码为H.264,最后保存成mycamera.mkv。
ffmpeg -f dshow -i video="Integrated Camera" -vcodec libx264 mycamera.mkv
编码为MPEG2,发布UDP
与编码为H.264类似,指明-vcodec即可。
ffmpeg -f dshow -i video="Integrated Camera" -vcodec mpeg2video -f mpeg2video udp://233.233.233.223:6666
浏览器上实现编码为H.264并发布RTP
假设获取到的浏览器视频流为MediaStream
写成命令形式为:
ffmpeg -f dshow -i video="MediaStream" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -s 320x240 -f rtp rtp://192.168.4.1 > cam_h264.sdp
标签:编码,H.264,ffmpeg,vcodec,RTP,推送,摄像头 来源: https://www.cnblogs.com/qsbye/p/16586928.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。