利用ffmpeg实现rtmp推流
https://www.jianshu.com/p/c141fc7881e7
?
ffmpeg 常見命令功能:
查看電腦設備:
?? ?ffmpeg -list_devices true -f dshow -i dummy?? ??? ?
測試攝像頭是否可用:
?? ?ffplay -f dshow -i video="USB2.0 PC CAMERA" ??? ??? ??? ?USB2.0 PC CAMERA為攝像頭名稱
? ? ? ? ? 或者
?? ?ffplay -f vfwcap -i 0
查看攝像頭和麥克風信息:
?? ?ffmpeg -list_options true -f dshow -i video="USB2.0 PC CAMERA" ??? ?USB2.0 PC CAMERA為攝像頭名稱
?? ?ffmpeg -list_options true -f dshow -i audio="麥克風 (2- USB2.0 MIC)"?
本地視頻的推流:
?? ?ffmpeg.exe -re -i demo.wmv -f flv rtmp://127.0.0.1:1935/live/123?? ?此時ffmpeg源源不斷的把視頻推流至服務器,如果地址沒錯,
?? ?視頻文件 demo.wmv?? ??? ??? ??? ??? ??? ?可以利用vlc或其他手段實現拉流,這里就先不解釋如何拉流
攝像頭推流:
?? ?ffmpeg -f dshow -i video="USB2.0 PC CAMERA"?
?? ?-vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f flv rtmp://127.0.0.1:1935/live/123?? ?
?? ?USB2.0 PC CAMERA為攝像頭名稱?? ? ? ? ? ? ? ?播放地址: rtmp://127.0.0.1:1935/live/123
麥克風推流:
?? ?ffmpeg ?-f dshow -i audio="麥克風 (2- USB2.0 MIC)"?
?? ?-vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f flv rtmp://127.0.0.1:1935/live/123
?? ?麥克風 (2- USB2.0 MIC) ?? ??? ? ? ? ? ? ? ?播放地址: rtmp://127.0.0.1:1935/live/123
?? ?
?? ?聲音被推流出去了,通過vlc拉流可以聽到錄制的聲音,但很明顯不會有畫面
攝像頭&麥克風推流:
?? ?ffmpeg ?-f dshow -i video="USB2.0 PC CAMERA"?
?? ? ? ? ? ? ? ? -f dshow -i audio="麥克風 (2- USB2.0 MIC)"?
?? ? ? ? ? ? ? ? -vcodec libx264 -preset:v ultrafast -tune:v zerolatency?
?? ? ? ? ? ? ? ? -f flv rtmp://127.0.0.1:1935/live/123
?? ?或者 ? ( ?USB2.0 PC CAMERA為攝像頭名稱?? ? 麥克風 (2- USB2.0 MIC) ?? ?播放地址: rtmp://127.0.0.1:1935/live/123
? ?)
?? ?
?? ?ffmpeg ?-f dshow -i video="USB2.0 PC CAMERA":audio="麥克風 (2- USB2.0 MIC)"?
?? ? ? ? ? ? ? ? -vcodec libx264 ?-r 25 ?-preset:v ultrafast -tune:v zerolatency?
?? ? ? ? ? ? ? ? -f flv rtmp://127.0.0.1:1935/live/123
?? ??? ??? ?
?? ?
?? ?畫面與聲音源源不斷的被推流到服務器,接下來我們就應該正式的開發拉流了
?? ??? ??? ?
分離視頻和音頻:?
?? ?ffmpeg -i input_file.mp4 -vcodec copy -an output_file.avi ?? ?//只保留了視頻 ??? ?視頻文件: input_file.mp4 ? 輸出文件: output_file.avi
?? ?
ffmpeg -i input_file.mp4 -acodec copy -vn output_file.mp3 ?? ?//只保留了音頻 ?? ?視頻文件: input_file.mp4 ? 輸出文件: output_file.mp3
合并視頻和音頻:
?? ?ffmpeg -i input_file1.avi?
?? ? ? ? ? ? ? ?-i input_file2.mp3?
?? ? ? ? ? ? ? ?-vcodec copy?
?? ? ? ? ? ? ? ?-acodec copy output_file.mp4
?? ?視頻文件: input_file1.avi + input_file2.mp3 ?? ?輸出文件: output_file.mp4
選項說明:?
-vcodec copy:指定復制視頻數據,不對輸如視頻進行編解碼?
-acodec copy:指定復制音頻數據,不對輸如音頻進行編解碼?
-an:指數去除音頻數據?
-vn:指定去除視頻數據
-vcodec mpeg4:指定輸出視頻數據按照mp4格式編碼?
-acodec mp3:指定輸出音頻數據按照mp3格式編碼
轉換音頻格式 :
?? ?ffmpeg -i input_file.mp3 -acodec g722 -ar 16k -ac 1 output_file.wav ? ? ?? ??? ? //轉換MP3格式音頻為用g722編碼的wav格式
?? ?視頻文件: input_file.mp3 ?? ?輸出文件: output_file.avi
列舉幾個生成其他音頻格式的命令:
?? ?ffmpeg -i input_file.mp3 ?? ?// 視頻文件: input_file.mp3?
?? ? ? ? ? ? ? ?-acodec g723_1 ?? ?// g723標準
?? ? ? ? ? ? ? ?-ar 8k ?? ??? ?// 采樣頻率8kHz
?? ? ? ? ? ? ? ?-ab 6.3k ?? ??? ?// 碼率為5.3kbs/6.3kbs?
?? ? ? ? ? ? ? ?-ac 1?
?? ? ? ? ? ? ? ?output_file.wav ?? ?//g723標準要求采樣頻率8kHz,碼率為5.3kbs/6.3kbs?
?? ?ffmpeg -i input_file.mp3 ?? ?// 視頻文件: input_file.mp3?
?? ? ? ? ? ? ? ?-acodec g726 ?? ?// g726標準
?? ? ? ? ? ? ? ?-ar 8k ?? ??? ?// 采樣頻率8kHz
?? ? ? ? ? ? ? ?-ab 32k ?? ??? ?// 碼率為40kbs/32kbs/24kbs/16kbs
?? ? ? ? ? ? ? ?-ac 1?
?? ? ? ? ? ? ? ?output_file.wav?? ?//g726標準要求采樣率為8k,碼率為40kbs/32kbs/24kbs/16kbs?
視頻格式轉換 :
?? ?ffmpeg -i input_file.avi -f mp4 -vcodec output_file.mp4?? ? //轉換avi格式視頻為MP4格式?
?? ?-f mp4:指定輸出視頻封裝格式為MP4?
?? ?-vcodec h264:指定輸出視頻編碼格式為h264
截取圖片 :(截取視頻開始的圖片 )
?? ?ffmpeg ?? ?-i input_file.h264?
?? ? ? ? ? ? ? ??? ?-y ?? ??? ??? ?// ?-y:輸出文件可以覆蓋已存文件?
?? ??? ?-f image2 ?? ??? ??? ?// ?-f image2:輸出圖像文件編碼為image2?
?? ??? ?-t 0.001 ?? ??? ??? ?// ?-t 0.001:持續時間為0.001s
?? ??? ?-s 420x272 ?? ??? ?// ?-s 420x272:輸出圖片分辨率420x272
?? ??? ?output_file.jpg ?
合成視頻 : (把連續編號的圖片文件生成視頻 )
?? ?ffmpeg -i input_file%d.jpg?
?? ??? ?-y ?? ??? ??? ?// -y:輸出文件可以覆蓋已存文件?
?? ??? ?-f mp4 ?? ??? ??? ?// -f mp4:輸出視頻文件編碼為MP4
?? ??? ?output_file.mp4 ? ?
其他例子:
?? ?ffmpeg -i input_file.h264?
?? ??? ?-y?
?? ??? ?-f image2 ?? ??? ??? ?// ?-f image2:輸出圖像文件編碼為image2?
?? ??? ?-t 1 ?? ??? ??? ?// ?1s內
?? ??? ?-s 420x272 ?? ??? ?// ?-s 420x272:輸出圖片分辨率420x272
?? ??? ?output_file_%d.jpg?
? ? ? ? ? ? ? ?// 截取1s內所有的圖像,輸出文件按照順序編號?
?? ?ffmpeg -i input_file.h264?
?? ??? ?-y?
?? ??? ?-f image2?
?? ??? ?-ss 60 ?? ??? ??? ?// 60s
?? ??? ?-vframes 1 ?? ??? ?// 一幀
?? ??? ?output_file.jpg?
?? ?//截取60s的一幀視頻圖片?
?? ??? ?
?? ?ffmpeg -i input_file.h264?
?? ??? ?-y?
?? ??? ?-f gif ?? ??? ??? ?// gif
?? ??? ?-ss 20 ?? ??? ??? ?// 20s后
?? ??? ?-vframes 30 ?? ??? ?// 30幀
?? ??? ?output_file.jpg ?? ??? ?// 截取20s后的30幀圖片保存為gif
總結
以上是生活随笔為你收集整理的利用ffmpeg实现rtmp推流的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL(08)_SQL约束
- 下一篇: 浪潮之巅--摩托罗拉