中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

視頻云SDK iOS持續集成項目實踐

發布時間:2020-07-15 13:14:08 來源:網絡 閱讀:532 作者:敏哥侃視界 欄目:開發技術

1. 前言
2016年, 我們維護的 iOS推流播放融合SDK KSYLive_iOS 在github上發布了40多個版本, 平均兩周發布一個新版本,經歷了最初痛苦的全手動版本構建和維護, 到后來慢慢搭建起來的持續集成系統, 在這里簡要的總結一下這個搭建過程中的一些實踐經驗。

1.1 持續集成的作用

持續集成系統主要在如下兩個環節提供服務:

開發階段(build), 開發人員提交代碼后, 在服務端能夠自動對提交的版本進行構建和測試, 保證提交能夠編譯,并自動測試通過的代碼可以不給同事添麻煩,提高工作效率. 對代碼審查的人來說,能減輕不少負擔。

發布階段(release), 當階段性完成了開發任務后, 通過tag觸發版本發布, 能夠減少手動進行版本構建的工作, 并減少人工引入的疏忽和錯誤。

后面講到每個工程組件的持續集成時,都需要針對這樣兩個環節分別說明:

1.2 持續集成的工具

持續集成可選的工具比較多, 比如Jenkins, Travis CI等等.由于我們內部的版本管理工具是gitlab[http://gitlab.com], gitlab作為代碼管理倉庫, 和code review的工具. 而gitlab最近的版本中直接提供了CI的server, 可以非常方便的用起來. 權限管理, 代碼提交觸發等都變得非常自然, 我們大部分的CI工作都是通過gitlabCI進行的.

視頻云SDK iOS持續集成項目實踐
gitlab ci Architecture

gitlab ci 的 server直接集成在了gitlab server中, 每當我們提交代碼時, ci server就會生成一個構建任務, 在gitlab的頁面上可以很直觀的追蹤到任務的執行情況和執行結果.

gitlab ci runner 是一個獨立的應用程序, 跑在worker設備上. 他負責從ci server 領取一個任務并完成它.

gitlab ci的基本使用方法可以參考gitlab 自己的指南, 或者簡書上搜搜中文版的圖文教程.

2. 視頻云SDK 持續集成實施

KSYLive_iOS 是一個提供了在手機上直播推流和播放的SDK, 在開發過程中, 我們有不同的同事分別維護demo代碼,推流代碼,播放內核代碼和底層公用部分代碼, 只是最后編譯打包為一個完善的SDK提供給客戶使用. 因此開發過程中涉及到每個模塊自身的編譯測試,以及多個模塊之間的版本同步更新的問題.

2.1 SDK 項目結構
視頻云SDK iOS持續集成項目實踐
SDK arch
上圖中,每個框都是一個gitlab上的代碼倉庫,存放著代碼或編譯后的二進制文件

codecs: 其實是多個開源項目的倉庫, 包括aac,264等音視頻的編碼器, 作為FFMpeg的依賴項.
FFMpeg: 為推流和播放依賴的多媒體框架
libyuv: 對圖像進行顏色空間轉換的工具庫
KSYCommon: 項目中推流和播放的公共代碼
GPUImage: GPU圖像處理的框架
KSYStreamer: 推流相關代碼
KSYPlayer: 播放相關代碼
KSYGPUFilter: 美顏濾鏡相關代碼
libksylivedep: 所有代碼編譯后的二進制庫文件和頭文件
KSYLive_iOS: 最終對外發布的SDK庫和demo
整個持續集成系統要保證的是KSYLive_iOS中demo能夠順利build 通過和功能正常.
持續集成系統的中樞則是 libksylivedep, KSYLive_iOS中的SDK本質上是將libksylivedep中的靜態庫進行組合得到的, 其他項目的git倉庫中都只存放代碼.
libksylivedep 主要是因為有一些第三方庫的構建過程比較耗時,且改動頻率不高, 將其構建的結果直接存放到libksylivedep中, 能夠起到節約時間的作用. 并且因為有libksylivedep的隔離, 每個項目的持續集成任務更加清晰,減少了項目依賴帶來的復雜性.

2.2 SDK 持續集成結構

整個SDK的持續集成簡單來說就是給以上的每個項目都添加CI配置. 這里一共有4種CI任務

代碼倉庫的build任務
每當開發人員對SDK代碼進行了修改, 提交代碼到gitlab之后, 都會觸發此任務. 任務內容主要是保證SDK代碼能夠順利編譯出對應的靜態庫文件, 并保證sdk更新到KSYLive_iOS中去之后,demo能夠也是正常工作的.
這里有一些代碼庫的是沒有依賴項的, build任務比較簡單, 可以直接完成.
而有的代碼庫則需要依賴其他庫, 這個依賴關系主要是通過libksylivedep來解決的.
代碼倉庫的release任務
當每個迭代完成的時候, 一個代碼倉庫的所有改動匯總后打上對應版本號的tag, 可以發起一次release任務. release任務是在build通過的前提下, 將build的結果, 發布到libksylivedep中. 在libksylivedep的master分支的基礎上, 更新本項目對應的靜態庫和頭文件, 發起合并請求.
KSYLive_iOS 的build任務
KSYLive_iOS 的build任務主要是用于檢查demo代碼修改和SDK靜態庫更新的正確性.
KSYLive_iOS 的release任務
當完成一個迭代, 對應版本通過了QA的測試時, 可以出發release任務, 將SDK和demo更新到對外的github上.

3. 總結
視頻云SDK iOS持續集成項目在開發階段能夠保證每次代碼提交的質量, 能夠提前發現自己引入的破壞開發環境的"壞"提交, 對提高開發效率有比較大的幫助. 在版本發布階段, 可以將大量重復的操作自動完成,將發布環境和開發環境分離, 減少人為發布引入的不確定性問題。
在視頻云 iOS SDK這個依賴關系比較復雜的項目中, 通過引入預編譯二進制庫存放的倉庫, 減少了項目的構建時間, 隔離了依賴關系。

作者:金山視頻云

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

买车| 大安市| 吴忠市| 彰化市| 黄大仙区| 太仆寺旗| 财经| 宜良县| 隆安县| 芦溪县| 东至县| 千阳县| 洛隆县| 双辽市| 黑山县| 玛沁县| 静安区| 博白县| 都昌县| 左贡县| 阳城县| 九江市| 廉江市| 彰化县| 高邮市| 揭阳市| 南部县| 晋宁县| 三台县| 绵阳市| 漳平市| 大洼县| 合阳县| 沈丘县| 饶河县| 柳林县| 堆龙德庆县| 曲水县| 抚州市| 右玉县| 嘉禾县|