国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
用node和ffmpeg進行直播推流

國慶月經(jīng)心血來潮,寫了個在vps上運行的推流直播的小玩意,要知道阿里云2M帶寬上行網(wǎng)速是很快的,推流能達到1500K(至少比寢室100K封頂強多了),24h放片高清流暢無壓力。 

之前有人用樹莓派這樣玩過,其實都離不開ffmpeg。ffmpeg的開發(fā)團隊非常活躍,網(wǎng)絡(luò)直播大熱就馬上開發(fā)了rtmp等各種協(xié)議的推流功能,在這里我用到了node的fluent-ffmpeg,它其實只是將ffmpeg的api進行了封裝。

AIM

在阿里云ubuntu系統(tǒng)下運行24h推流程序,向戰(zhàn)旗TV推流(只搞到戰(zhàn)旗主播賬號,不過都是rtmp協(xié)議,沒差~)

TOOLS

  • ffmpeg
  • fluent-ffmpeg(封裝ffmpeg的api的node模塊)
  • 阿里云(2M 1G內(nèi)存 20G硬盤 ubuntu)

DEMO CODE

  1. var ffmpeg = require('fluent-ffmpeg');
  2. var inputPath = './media/mv.mp4';
  3. var outputPath = 'rtmp://dlrtmpup.cdn.zhanqi.tv/zqlive/*********';
  4. ffmpeg(inputPath)
  5. .inputOptions('-re')
  6. .inputOptions('-ac 2')
  7. .addInput('./bin/logo.png')
  8. .complexFilter([
  9. {
  10. filter: 'scale',
  11. options: [1080,-1],
  12. inputs: '[0:v]',
  13. outputs: 'c'
  14. },
  15. {
  16. filter: 'scale',
  17. options: [200,-1],
  18. inputs: '[1:v]',
  19. outputs: 'logo'
  20. },
  21. {
  22. filter: 'overlay',
  23. options: {
  24. x: 'main_w-overlay_w-5',
  25. y: 5
  26. },
  27. inputs: ['c','logo'],
  28. outputs: ['output','a']
  29. }
  30. ],'output')
  31. .on('start', function(commandLine) {
  32. console.log('Spawned Ffmpeg with command: ' + commandLine);
  33. })
  34. .on('error', function(err, stdout, stderr) {
  35. console.log('error: ' + err.message);
  36. console.log('stdout: ' + stdout);
  37. console.log('stderr: ' + stderr);
  38. })
  39. .on('end', function() {
  40. console.log('Processing finished !');
  41. })
  42. .addOptions([
  43. '-vcodec libx264',
  44. '-preset veryfast',
  45. '-crf 22',
  46. '-maxrate 1000k',
  47. '-bufsize 3000k',
  48. '-acodec libmp3lame',
  49. '-ac 2',
  50. '-ar 44100',
  51. '-b:a 96k'
  52. ])
  53. .format('flv')
  54. .pipe(outputPath, { end: true });

TIPS

  • 如果使用fluent-ffmpeg這個包需要進行一下源碼修改,否則會提示輸出路徑錯誤,具體原因就是源碼里有一段是對輸出流進行是否是writeableStraem的判斷(我們的輸出流當然是可寫的啦),最簡單的方法就是把報錯的那段注釋掉 = =!

  • 上圖中rtmp地址+直播碼即輸出路徑,可以理解為WriteableStream
  • 輸入配置-re:以原視頻幀率輸入
  • complexFilter:復雜濾鏡,適用于多輸入輸出,用它實現(xiàn)了加logo和對輸出進行尺寸調(diào)整
  • 只有用flv格式輸出才能向rtmp推流
  • -preset veryfast:犧牲視頻質(zhì)量,換取流暢性(否則以1G的內(nèi)存難以流暢編碼,會導致直播卡頓)
  • -ar 44100:音頻采樣率
  • -ac 2:雙聲道輸出
  • 既然是24h推流,只放一個片兒當然是對不起觀眾,在試過各種方法后我選擇了concat這個fliter來進行自如的視頻銜接。用法可以去看ffmpeg的官方文檔或者搜索。
  • 擔心程序崩掉的話可以加上日志實時輸出的功能,崩掉自動重啟,讀取上次的timemark,再次起飛~

END

效果如上??

在程序運行時間內(nèi),阿里云cpu使用率一直100%,有于我們選擇veryfast的預設(shè),實時轉(zhuǎn)碼時視頻質(zhì)量已經(jīng)做出很大讓步,但仍然使cpu處于高負載之下,當然這和ffmpeg處理的原視頻文件也有關(guān)系。

推流網(wǎng)速600k以上,所以說短板在于cpu而不在于網(wǎng)速。 

唯一沒解決的問題是,在手機上(ios8)用戰(zhàn)旗app看時,選擇硬件解碼會沒有聲音


本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Node-Media-Server開源流行Nodejs流媒體服務(wù)器
FFmpeg讀取USB攝像頭H264幀rtmp推流
STDIN、STDOUT、STDERR和$stdin、$stdout、$stderr的區(qū)別
大數(shù)據(jù)學習路線之Logstach與flume對比
logstash使用操作部分
Adding Console I/O to a Win32 GUI App
更多類似文章 >>
生活服務(wù)
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服