在Ubuntu 16.04上安裝Postfix+Dovecot+SquirrelMail以及相關設置

Postfix:Postfix是一個免費的開源軟件應用程序,可用作郵件傳輸代理(MTA),用於路由和傳遞電子郵件。提供SMTP服務接收與傳送郵件。

DoveCot: 主要提供POP3與IMAP服務,可提供遠端client連線到郵件伺服器。Dovecot是一個開源MDA(郵件傳遞代理),負責向服務器上的本地收件人郵箱發送電子郵件。Dovecot實現了IMAP(Internet消息訪問協議)和POP3(郵局協議),因此仍然是通過(郵件用戶代理)MUA(如Squirrelmail,Ms Outlook,Thunderbird或Roundcube)訪問電子郵件的不錯選擇。

SquirrelMail:是一套提供網頁電子郵件(WebMail)服務。

1. 安裝網頁伺服器(Apache2 + php + letsEncrypt SSL)

$ sudo apt-get update
$ sudo apt-get install apache2
$ sudo apt-get install php libapache2-mod-php
$ sudo apt-get install software-properties-common python-software-properties
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install python-certbot-apache
$ sudo certbot --apache -d example.com 

安裝letsencrypt SSL 系統將提示您輸入電子郵件地址以進行緊急SSL續訂和緊急通知。 輸入地址,然後按Enter鍵。
接下來,按A並按Enter鍵以同意條款和條件。
如果您想與Electronic Frontier分享您的電子郵件,請按Y並按Enter鍵,否則按N並按Enter鍵。
在SSL安裝結束時,系統會詢問您是否要重定向流量,只需為沒有重定向選擇1並按Enter鍵

你最後應該得到一個祝賀信息:

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   Your cert will expire on 2018-11-04. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

2. 安裝Postfix

$ sudo apt-get install postfix

執行此安裝指令後,會出現下面畫面,按下TAB到OK,然後按下enter繼續:

下面畫面選擇Internet Site:

下面畫面輸入電子郵件所在的網域:

3. 設定Postfix:

我們將對postfix配置文件進行一些更改。 我們將備份原始文件並創建一個新的配置文件,而不是編輯文件/etc/postfix/main.cf:

$ sudo mv /etc/postfix/main.cf /etc/postfix/main.cf.bk
$ sudo nano /etc/postfix/main.cf

下面是設定的範例:

smtpd_banner = $myhostname ESMTP $mail_name
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no
readme_directory = no

#SMTP CONFIGURATION
smtp_use_tls=yes
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# SMTPD CONFIGURATIONS
# SMTPD AUTHENTICATION

smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth


# SMPTD TLS

smtpd_use_tls=yes
smtpd_tls_security_level = may
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache

smtpd_tls_cert_file=/etc/letsencrypt/live/example.com/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/example.com/privkey.pem

myhostname = mail.example.com
myorigin = /etc/mailname
mydestination =  localhost.$mydomain, localhost
relayhost = 
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

此設定並未採用virtual mailbox,若此伺服器提供多個mail server服務,則需採用virtual mailbox。

4. 安裝與設定Dovebot:

接下來,我們將安裝Dovecot以及IMAP,POP和LTMPD所需的所有軟件包。 後者使用本地郵件傳輸協議(LMTP)將電子郵件傳遞到本地收件箱。

當電子郵件發送到我們的服務器時,Postfix會將其傳遞給Dovecot以進行本地傳遞。 此外,我們的電子郵件客戶端SquirrelMail將通過Dovecot通過IMAP協議從本地存儲中檢索電子郵件。

$ sudo apt-get install dovecot-core dovecot-imapd dovecot-pop3d

啟用 IMAP / POP3 登入
修改 /etc/dovecot/conf.d/10-auth.conf,我們的SSL將採用letsencrypt的SSL證書,他是免費又好用的SSL。

一般使用者的發送 Email 的流程,不是 Webmail 就是用 SMTP。這裡 SMTP 清晰一點是 SMTP Submission,即是 MUA 透過 MSA 委托 MTA 代為傳送郵件 (Relay)。而 SMTP Submission 當然需要有登入設定,不然肯定會成為 Spam Mail 的 Open Relay了。現在的 Postfix 預設設定已經不允許 Open Relay,所以必需先設定登入機制才能外部使用。

Postfix 使用模組化的設計,各部分都是分開的。換句話說您可以使用很多不同的登入插件,SASL (Simple Authentication and Security Layer) 就提供 Postfix 和 登入插件間的溝通。

Postfix 目前支援 Cyrus 和 Dovecot 的 SASL 實作。本部分是為了將 SMTP 的 MSA 登入驗證整合到 Dovecot。
啟用 SMTP Submission Port 587
目前很多 ISP 封鎖了 Port 25 的連線,所以要改用協議中定義的 Port 587 來收件。修改 /etc/postfix/master.cf,把這一行 Uncomment 就好了。

submission inet n       -       -       -       -       smtpd

Dovecot SASL / Postfix 整合
啟用 Dovecot 內建的 SASL,修改 /etc/dovecot/conf.d/10-master.conf
Uncomment “#Postfix smtp-auth” 下面一段,並加入 user 及 group。

service auth {
  # auth_socket_path points to this userdb socket by default. It's typically
  # used by dovecot-lda, doveadm, possibly imap process, etc. Its default
  # permissions make it readable only by root, but you may need to relax these
  # permissions. Users that have access to this socket are able to get a list
  # of all usernames and get results of everyone's userdb lookups.
  unix_listener auth-userdb {
    #mode = 0600
    #user =
    #group =
  }
 
  # Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postdrop
  }
 
  # Auth process is run as this user.
  #user = $default_internal_user
}

Dovecot 建議只在 SMTP Submission (Port 587) 啟用 SASL 驗證,
原因是當 Dovecot SASL 不可用時,也不至於連收信都失敗。
我們就按指引完成:

修改 /etc/postfix/master.cf,把之前指定在 main.cf 的設定都搬過來,並指定 SASL Socket Path

submission inet n       -       -       -       -       smtpd
 -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination,reject_authenticated_sender_login_mismatch
 -o smtpd_sasl_local_domain=$myhostname
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_sasl_security_options=noanonymous
 -o smtpd_sasl_type=dovecot
 -o smtpd_sasl_path=private/auth
 -o broken_sasl_auth_clients=yes

這個 master.cf 的格式 非常嚴格:
= 前後都不能有空格
-o 前面必需有空格
每項 Option 的 Value 必不能有空格
不能換行,smtpd_recipient_restrictions 要用逗號隔開
修改完成用 Telnet 測試:

telnet 127.0.0.1 587

如果有出現 220 Response 的話,恭喜中獎了

220 server.tiger-workshop-mail.com ESMTP Postfix

若沒有,則查看/var/log/mail.log,看看問題在哪裡。
若成功了,執行ehlo local就會看到下面的敘述:

telnet localhost 587
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.dubugroup.com ESMTP Postfix (Ubuntu)
ehlo localhost
250-mail.dubugroup.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN
250-AUTH=PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

若看到下面兩個,代表可以驗證成功了!!

250-AUTH PLAIN
250-AUTH=PLAIN

透過外部 SMTP 發送成功了,Email 當然還帶有前面設定過的 SPF 和 DKIM。

到了這裏,只要設定 Dovecot 的 User,
SMTP、IMAP、POP3 都會使用同一個 Username & Password,
而且收信地址也會跟 Username 一樣,實在太美好了…

Ubuntu 其實有提供一個 Package “dovecot-postfix” 整合套件,直接完成以上的東西。
這跟 Windows 下的 XAMPP 和手動安裝 Apache, MySQL, PHP 然後手動整合一樣,
手動設定會學到比較多原理,Debug 比較容易吧。

最後安裝SquirrelMail網頁郵件:
接下來我們可以配置SquirrelMail客戶端。 該應用程序是通過SMTP和IMAP協議發送和接收電子郵件的理想選擇,可以在任何瀏覽器上運行。

要安裝該軟件,請運行以下命令:

$ sudo apt-get install squirrelmail

照著指示依序安裝後即可。
接下來,我們將把SquirrelMail路徑添加到Apache的默認虛擬主機文件中,該文件啟用了LetsEncrypt的加密SSL證書。

$ sudo nano /etc/apache2/sites-enabled/000-default-le-ssl.conf

在ServerName後面加上Alias設置,Alias /mail /usr/share/squirrelmail

<VirtualHost *:443>
... 
ServerName example.com
Alias /mail /usr/share/squirrelmail
...
</VirtualHost>

接著設置SquirrelMail就很簡單了

$domain = 'example.com';
$imapServerAddress = 'example.com';
$imapPort=993;  
$smtpPort=465; 
$smtp_auth_mech='login';
$use_imap_tls='true';
$use_smpt_tls='true';

修改/etc/access

用來允許或拒絕RELAY的網域,可參考 這裡。設定後,執行下面的指令才可轉換為access.db

 postmap hash:/etc/postfix/access

設定別名(Alias)

作為群組發信的很重要的應用,例如:[email protected],這個sales是個團隊,將發送到sales可轉發給其他特定的人員,其詳細說明可參考這裡。執行下面的指令才可轉換aliases.db

postalias hash:/etc/aliases

 

約翰D洛克斐勒

提起億萬富翁,你想到的可能是比爾蓋茲、馬克祖克柏等等。約翰D洛克斐勒這個名字,很多人不熟悉。他出生於1839年,是美國的實業家和超級資本家,還是世界上第一個億萬富翁、全世界公認的石油大王。

1870年時,洛克斐勒創立標準石油公司,20年後,他的公司就有了10萬名員工。巔峰時期,他曾壟斷全美80%的煉油工業,和90%的油管生意。洛克斐勒非常低調,也很神秘,有人評價說,跟同時代的巨富們相比,他的財富是最不骯髒的。

比爾蓋茲曾說:「我心目中的賺錢英雄只有一個,那就是洛克菲勒。」洛克菲勒不僅是一位成功的商人,還是一位很好的父親。歷經100多年,洛克菲勒家族綿延6代,依舊是世界上最富有的家族之一。

洛克菲勒家族之所以輝煌至今,與家族成員自小受到的家庭教育是分不開的。洛克菲勒曾給兒子寫過很多封信,這些信裡記錄了洛克菲勒創造財富神話的種種業績,也體現出了他優良的品德和卓越的經商才能。

下面是洛克菲勒寫給小兒子的2封信,一起看看吧。

「親愛的約翰:

非常感謝你對我的信任,告訴我你退出銀行董事會的事情。我當然理解你這樣做的原因,你已經無法繼續忍受同仁們的某些做法,更不想繼續屈從於他們。但你的決定是否明智,似乎還有待於時間來證實。理由很簡單,如果你不主動放棄銀行董事的職位,而是選擇留在那裡,或許你會得到更多。

我知道,屈從是思想的大敵,也是自由的獄吏。然而,對於一個胸懷大志的人來說,保持必要的屈從與忍耐,恰恰是一條屢試不爽的成功策略。追溯過往,曾經我忍耐過許多,也因忍耐得到過許多。

我創業之初,由於資金缺乏,合夥人克拉克先生邀請他昔日的同事加德納先生入夥,對此我舉雙手贊成。有了這位富人的加入,意味著我們可以做我們想做、有能力做、只要有足夠資金就能做成的事情。然而,出乎我意料的是,克拉克帶來了一個錢包的同時,也送給了我一份屈辱。

他們要把克拉克洛克菲勒公司更名為克拉克加德納公司,他們將洛克菲勒的姓氏從公司名稱中抹去的理由是:加德納出身名門,他的姓氏能吸引更多的客戶。

這踐踏了我的自尊!我憤怒啊!我同樣是合夥人,加德納帶來的只是他那一份資金而已,難道他出身貴族就可以剝奪我應得的名分嗎?!但是,我忍下了,我告訴自己:你要控制住你自己,你要保持心態平靜,這只是開始,路還長著呢…

我故作鎮靜,裝作若無其事的樣子告訴克拉克:「這沒什麼。」事實上,完全不是這樣。想想看,一個遭受不公平、自尊心受損的人,他怎麼能有如此的寬容大度!但是,我用理性澆滅了我心頭燃燒著的熊熊怒火,因為我知道這會給我帶來好處。忍耐不是毫無原則的容忍,你需要冷靜地考量情勢,要知道你的決定是否會偏離或加害你的目標。

對克拉克大發雷霆不僅有失體面,更重要的是,這會給我們的合作製造裂痕,甚至招致一腳把我踢出去、讓我從頭再來的惡果。而團結則可以形成合力,讓我們的事業越做越大,我的個人力量和利益也必將隨之壯大。

我知道自己要到哪裡去。在這之後我繼續一如既往、不知疲倦地熱情工作。到了第三個年頭,我就成功地把那位極盡奢侈的加德納先生請出了公司,讓克拉克洛克菲勒公司的牌子重新豎立起來!那時人們開始尊稱我為洛克菲勒先生。

在我眼裡忍耐並非忍氣吞聲、也絕非卑躬屈膝,忍耐是一種策略,同時也是一種性格磨練,它所孕育出的是好勝之心。這是我與克拉克先生合作期間得出的心得。

我崇尚平等,厭惡居高臨下發號施令。然而,克拉克先生在我面前卻總要擺出趾高氣揚的架勢,這令我非常反感。他似乎從不把我放在眼裡,把我視為目光短淺的小職員,甚至當面貶低我除了記賬和管錢之外一無所能,沒有他我更一文不值。這是公然的挑釁,我卻裝作充耳不聞,我知道自己尊重自己比什麼都重要,但是我在心裡已經同他開戰,我一遍一遍地叮囑自己:超過他,你的強大是對他最好的羞辱,是打在他臉上最響的耳光。

結果正像你所知道的那樣,克拉克洛克菲勒公司永遠成為了歷史,取代它的是洛克菲勒安德魯斯公司,就此我搭上了成為億萬富翁的特快列車。能忍人所不能忍之忤,才能為人所不能為之事。

任何時候衝動都是我們最大的敵人。如果忍耐能化解不該發生的衝突,這樣的忍耐永遠是值得的。頑固地一意孤行,非但不能化解危機,還會帶來更大的災難。但是安德魯斯先生似乎並不明白這個道理。

安德魯斯先生是一個沒有商業頭腦卻自以為是的人,他缺乏成為偉大商人的雄心卻有著邪惡的偏見。這種人與我發生衝突毫不奇怪。導致我們最終分道揚鑣的那場衝突,緣於公司發放股東的紅利。

那一年我們幹得不錯,賺了很多錢,可是我不想把公司賺到的錢全都讓股東們拿回家,我希望能將其中的一半收益再投入到公司的經營中去。但安德魯斯堅決反對,這個自私自利的傢伙想把賺來的錢全分了,甚至怒氣沖沖地對我說,他不想在公司繼續幹下去了。我不能忍受任何阻止公司強大的想法,我只能向他攤牌,請他為他持有的股票開價,他說一百萬,我說沒問題,第二天我就用一百萬買下了。

錢一到手,安德魯斯興奮極了,他自以為自己交了好運,認為他手裡持有的股票根本不值一百萬。但他沒有想到,我一轉手就賺了三十萬。這事傳到他那裡,他竟然罵我手段卑鄙。

我不想因為區區三十萬就落得個卑鄙的名聲,就派人告訴他可以按原價收回。但懊惱中的安德魯斯拒絕了我的好意。事實上他拒絕的是一次成為全美巨富的機會,如果他能把他價值一百萬的股票保留到今天,就會成為絕對的千萬富翁。但為賭一時之氣,他喪失了終生再也抓不住的機會。

約翰,在這個世界上要我們忍耐的人和事太多太多,而引誘我們感情用事的人和事也太多太多。所以,你要修煉自己管理情緒和控制感情的能力,要注意在做決策時不要受感情左右,而是完全根據需要來做決定,要永遠知道自己想要的是什麼。

你還需要知道,在這個世界上,沒有太多的機會可以爭取。如果你真的想成功,你一定要掌握並保護自己的機會,更要設法爭取機會。記住,要天天把忍耐帶在身上,它會給你帶快樂、機會和成功。

愛你的父親」

「親愛的約翰:

我想你已經覺察到了,你的某些思想和觀念正在發生著變化,因為你的那些朋友。我當然不反對你擴大社交圈,它可以增加你的生活情趣,擴展你的生活領域,甚至幫你找到知己或幫你實現人生理想的人。但有些人顯然不值得你與他交往,比如,那些拘泥於卑微瑣碎的人。

從我年輕的時候開始,我就拒絕同兩種人交往。第一種人,是那些完全投降和安於現狀的人。他們深信自己條件不足,認為創造成就只是幸運兒的專利,他們沒有這個福氣。

這種人寧願守著一個很有保障卻很平凡的職位,年復一年渾渾噩噩。他們也知道自己需要一份更有挑戰性的工作,這樣才能繼續發展與成長,但就因為有無數的阻力,使他們深信自己不適合做大事。

明智的人絕不會為命運坐下來哀號。但這種人只會哀嘆命運不濟,卻從不欣賞自己,把自己看成是更有份量、更有價值的人,他們失去了使自己全力以赴的感覺,和自我鼓勵的功能,反讓消極佔據了自己的內心。

第二種人是不能將挑戰進行到底的人。他們曾經非常向往成就大事,也曾替自己的工作做準備,制訂計劃。但是過去幾年或十幾年後,隨著工作阻力的慢慢增加,為更上一層樓,需要艱苦努力的時候,他們就會覺得這樣下去實在不值得,因而放棄努力,變得自暴自棄。

他們會自我解嘲:『我們比一般人賺得多,生活也比一般人要好,幹嘛不知足,還要冒險呢?』其實這種人已經有了恐懼感,他們害怕失敗,害怕大家不認同,害怕失去已有的東西。他們並不滿足,卻已經投降。

這種人很有才幹,卻因不敢重新冒險,願意平平淡淡地度過一生。這兩種人身上有著共同的思想毒素,極易影響他人,那就是消極。我一直以為,一個人的個性與野心,目前的身分與地位,同與什麼人交往有關。經常跟消極的人來往,他自己也會變得消極;跟小人物交往過密,就會產生許多卑微的習慣。反過來說,經常受到大人物的熏陶,自會提高自己的思想水準。

我喜歡同那些永遠也不屈服的人做朋友。有個聰明人說得好:我要挑戰令人厭惡的逆境,因為智者告訴我,那是通往成功最明智的方向。只是這種人少之又少。這種人絕不讓悲觀來左右一切,絕不屈從各種阻力,更不相信自己只能渾渾噩噩虛度一生。他們活著的目的就是獲得成就。

這種人都很樂觀,因為他們一定要完成自己的心願。這種人很容易成為各個領域的佼佼者。他們能真正的享受人生,也真正了解生命的可貴與價值。他們都盼望每一個新的日子,以及跟別人之間的新接觸,因為他們把這些看成是豐富人生的歷練,因此熱烈地接受。

我相信人人都希望列入其中,因為只有這些人才能成功,也只有這些人才真正做事,並且能得到他們期盼的結果。不幸的是,消極的人隨處可見,也使很多很多的人無法逃脫消極之牆的圍困。

我們周圍的人並非人人相同,有些消極保守,有些則積極進取。曾與我共事的人中,有些想混口飯吃,有些則胸懷大志,野心勃勃,想要有更好的表現,他們也了解,在成為大人物前,必須先做個好的追隨者。

要有所成就,就要避免落入各式各樣的陷阱或圈套。在任何一個地方都有人自知不行,卻硬要擋住你上進的路,阻止你更上層樓。有許多人因為力爭上游,而被人嘲笑甚至被恐嚇。還有些人非常嫉妒,看到你努力上進,力求表現,會想盡辦法來作弄你,要你難堪。我們不能阻止他人成為那些無聊的消極分子,卻可以不被那些消極人士影響,降低我們的思想水準。

你要讓他們自然溜過,就像水鴨背後的水一樣自然滑過。時時跟隨思想積極前進的人,跟著他們一起成長、一起進步。你確實能夠做到這一點,只要你的思想正常,一定可以辦到,而且你最好要這樣做。

有些消極的人心腸很好,另外還有一些消極的人,自己不知上進,還想把別人也拖下水,他們自己沒有什麼作為,所以想使別人也一事無成。記住,約翰,說你辦不到的人,都是無法成功的人,亦即他個人的成就,頂多普普通通而已。因此這種人的意見,對你有害無益。

你要多加防範那些說你辦不到的人,只能把他們的警告看成證明你一定辦得到的挑戰。你還要特別防範消極的人打亂你邁向成功的計劃,這種人隨處可見,他們似乎專門嘲笑別人的進步與努力。千萬要小心,要多多注意那些消極的人,千萬不要讓他們打亂你的計劃。

不要讓那些思想消極、度量狹窄的人妨礙你的進步。那些幸災樂禍、喜歡嫉妒的人都想看你摔跤,不要給他們機會。當你有任何困難時,明智的做法是找一流的人物來幫你。如果向一個失敗者請教,就跟請求庸醫治療絕症一樣可笑。你的前途很重要,千萬不要從長舌婦那裡徵求意見,因為這種人一輩子都沒有出息。

你要重視你的環境。就像食物供應身體一樣,精神活動也會滋潤你的心理健康。要使你的環境為你的工作服務,而不是拖累你。不要讓那些阻力,亦即專門扯你後腿的人使你萎靡不振。讓環境幫助你成功的方法是:多接近積極的人,少同消極的人來往。每一件事都要做得盡善盡美。你付不起貪小失大所累積的種種額外負擔。

愛你的父親」

以下是洛克菲勒家族的10條家訓,對你也許會有幫助:

1.借錢不是件壞事,它不會讓你破產,只要你不把它看成像救生圈一樣,只在危機的時候使用,而把它看成是一種有力的工具,你就可以用它來開創機會。

2.建立在生意上的友誼,遠勝於建立在友誼上的生意。往上爬的時候對別人好一點,因為你下坡的時候會碰到他們。

3.收入只是你工作的副產品,做好你該做的事,出色完成你該完成的工作,理想的薪金必然會來。而更為重要的是,我們勞苦的最高報酬,不在於我們所獲得的,而在於我們會因此成為什麼。

4.熱愛工作是一種信念。懷著這個信念,我們能把絕望的大山鑿成一塊希望的磐石。如果你視工作為一種樂趣,人生就是天堂;如果你視工作為一種義務,人生就是地獄。

5.一旦避免失敗變成你做事的動機,你就走上了怠惰無力的路。

6.藉口,把絕大多數的人擋在了成功的大門外。百分之九十九的失敗,都是因為人們慣於尋找藉口。

7.要管理和運用金錢,你必須樂於親自動手、親自管理數字,不能只是空談管理和策略。上帝表現在細節之中。

8.無論是要贏得財富,還是要贏得人生,優秀的人在競技中想的不是輸了我會怎樣,而是要成為勝利者我應該做什麼。

9.世界上沒有一樣東西可取代毅力。才幹也不可以,懷才不遇者比比皆是,一事無成的天才很普遍。教育也不可以,世界上充滿了學而無用的人。只有毅力和決心無往不利。

10.不靠運氣活著,但靠策劃發達。好的計劃會左右運氣,甚至在任何情況下,都能影響所謂的運氣。

洛克斐勒能夠成為億萬富翁,洛克斐勒家族能夠傳承多年,果然是有原因的。我們能從中學到很多東西啊。

 

如何利用ffmpeg將影片轉換成HLS切片

HLS(HTTP Live Stream)是蘋果推出的影音串流的標準,目前可支援大多數的行動裝置與電視盒,如何利用ffmpeg將直播或影片進行切片(chunk)轉成HLS格式。
編碼參數說明不多敘述。

直播

以udp為例:

ffmpeg -y -i udp://@:10000 -c copy -hls_segment_type fmp4 -hls_time 6 -hls_list_size 10 -hls_flags delete_segments+append_list+split_by_time -hls_playlist_type event ~/hls/index_4000.m3u8

影音編碼器(Encoder)將直播訊號發送到轉碼用PC(Transcoding PC),將影音內容的編碼方式直接轉換(-c copy)。
-hls_time:設定每個切片(chunk)的長度(秒),這裡設定為6秒一個切片。
-hls_segment_type: fmp4 or mpegts,切片的格式為mp4或者為mpeg-2 ts格式,目前hls version 7以上可採用mp4格式類似於mpeg-dash
-hls_list_size:設定playlist播放清單最多的內容,如果是0則無限制。因此為直播內容,可預先保留最大的值,這裡設定為10,就是會預先切個10個切片的播放清單,前面hls_time設定為6秒,切十個,就是預留60秒的內容進行播放。相對的,就有會將近60秒的延遲。
-hls_flags:有很多參數可用,這裡使用了delete_segments, append_list, split_by_time, 分述如下:

  • delete_segments: 在segment的持續時間加上播放列表(playlist)的持續時間之後的一段時間之後刪除從播放列表中刪除的段文件(segment)。
  • append_list: 將新segment添加到舊segment列表的末尾,並從舊段列表中刪除#EXT-X-ENDLIST。
  • split_by_time: 允許segment在關鍵幀(key frame)以外的幀上啟動。 當關鍵幀之間的時間不一致時,這會改善某些玩家的行為,但可能會使其他播放器的情況變得更糟,並且在搜索過程中可能會導致一些奇怪的現象。 此標誌應與hls_time選項一起使用。

-hls_playlist_type: event,發出#EXT-X-PLAYLIST-TYPE:m3u8標題中的EVENT。 強制hls_list_size為0; 播放列表(playlist)只能附加到。

點播內容:

此應用就是將一個mp4的影音檔案進行切割成HLS的切面,因此,也就是mp4的檔案轉換程式:

ffmpeg -i $1 -profile:v baseline -level 3.0 -s 640x360 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls ${1%.*}.m3u8

為了讓多數的播放器,特別是行動裝置,這裡將影音的格式轉為mpeg-4, h264, baseline level 3.0的格式,以及640×360的影片大小,讓絕大多數的播放器都可以正常播放。
-start_number 0: 從一開始就進行切片
-hls_list_size 0: 如前述,這裡因為是要把整個mp4檔案轉換,所以就不限定playlist的內容大小了。

有關ffmpeg的HLS以及格式參數可參考這網址:https://ffmpeg.org/ffmpeg-formats.html