日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

srs可以用java开发吗,为SRS流媒体服务器添加HLS加密功能(附源码)

發(fā)布時間:2024/3/12 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 srs可以用java开发吗,为SRS流媒体服务器添加HLS加密功能(附源码) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

#為SRS流媒體服務(wù)器添加HLS加密功能(附源碼)#

之前測試使用過nginx的HLS加密功能,會使用到一個叫做nginx-rtmp-module的插件,但此插件很久不更新了,網(wǎng)上搜索到一個中國制造的叫做SRS的流媒體服務(wù)器,比較活躍,而且據(jù)說這個流媒體服務(wù)器的性能和功能都強(qiáng)大不少,但遺憾的是沒有HLS加密功能。原作者沒有加這個功能,所以決定自己動手,花了幾個晚上的時間自己參考nginx-rtmp實(shí)現(xiàn)了一下。代碼放到了github上(源碼已經(jīng)merge到了3.0release主分支上,pull request)。

##功能介紹##

###幾個新添加的參數(shù)配置項###

hls_keys on;

hls_fragments_per_key 4;

hls_key_file [app]/[stream]-[seq].key;

hls_key_file_path ./objs/nginx/html;

hls_key_url http://localhost:8080/live/h265.m3u8;

分別代表如下含義:

hls_keys: 是否開啟hls加密,默認(rèn)關(guān)閉。

hls_fragments_per_key: 每個key可以加密多少個ts片段,默認(rèn)值是10。

hls_key_file: key文件相對路徑的生成模板,包括一個[app]文件夾以及名字[stream]-[seq],后綴為.key,默認(rèn)值為[app]/[stream]-[seq].key。

hls_key_file_path: 可以為key文件的生成指定本地目錄,默認(rèn)為hls_path(存放ts的目錄)。

hls_key_url: 可以為key指定一個HTTP url。

##實(shí)現(xiàn)過程中的幾個關(guān)鍵點(diǎn)##

需要實(shí)現(xiàn)的功能點(diǎn)包括一下幾個方面:

###從配置文件讀取配置項####

這個仿照srs的實(shí)現(xiàn)添加,比較簡單。

###key和iv的自動生成和保存####

在這里每隔hls_fragments_per_key個ts會自動的生成隨機(jī)的16bytes的key和iv。key會保存在hls_key_file_path路徑中,iv會保存在m3u8文件中。

在代碼實(shí)現(xiàn)中,key和iv在內(nèi)存中保存了三份。SrsHlsMuxer中保存了一份,用于提供每次new SrsHlsSegment時需要的key和iv。因為每次刷新m3u8(refresh_m3u8)時,都要從頭重新生成一次m3u8文件,所以需要為每個SrsHlsSegment對象備份一份iv。最后是傳遞給writer的key和iv,用于AES128加密。

###AES128加密###

材料都準(zhǔn)備好了,最后的關(guān)鍵問題就是加密。在這里使用了Openssl的加密庫,SRS的實(shí)現(xiàn)是每次寫一個packet(188bytes),而AES128需要加密的raw數(shù)據(jù)是16的倍數(shù),因此需要在原有SrsFileWriter的實(shí)現(xiàn)上加一層緩沖。緩沖到16的倍數(shù)后(也就是188*4),加密一次數(shù)據(jù),然后寫到文件中。具體實(shí)現(xiàn)是下面的樣子:

srs_error_t SrsEncFileWriter::write(void* buf, size_t count, ssize_t* pnwrite)

{

srs_assert(count == SRS_TS_PACKET_SIZE);

srs_error_t err = srs_success;

if(buflength != HLS_AES_ENCRYPT_BLOCK_LENGTH)

{

memcpy(tmpbuf+buflength,(char*)buf,SRS_TS_PACKET_SIZE);

buflength += SRS_TS_PACKET_SIZE;

}

if(buflength == HLS_AES_ENCRYPT_BLOCK_LENGTH)

{

unsigned char encryptedbuf[HLS_AES_ENCRYPT_BLOCK_LENGTH];

memset(encryptedbuf,0,HLS_AES_ENCRYPT_BLOCK_LENGTH);

AES_cbc_encrypt((unsigned char *)tmpbuf, (unsigned char *)encryptedbuf, HLS_AES_ENCRYPT_BLOCK_LENGTH, &key, iv, AES_ENCRYPT);

buflength = 0;

memset(tmpbuf,0,HLS_AES_ENCRYPT_BLOCK_LENGTH);

return SrsFileWriter::write(encryptedbuf,HLS_AES_ENCRYPT_BLOCK_LENGTH,pnwrite);

}

else

{

return err;

}

};

需要注意的是每次close TS文件的FD時需要判斷緩沖中有沒有數(shù)據(jù),如果有的話需要添加填充數(shù)據(jù)(添加到正好為16的倍數(shù)即可),然后加密,寫文件,關(guān)閉文件:

int addBytes = 16 - buflength % 16;

memset(tmpbuf + buflength, addBytes, addBytes);

unsigned char encryptedbuf[buflength+addBytes];

###測試###

能夠為HLS TS切片正常加密和播放。沒有做充分的測試,對SRS了解的還不夠深入。如果大家需要這個功能的話,可以嘗試著使用一下,遇到問題聯(lián)系我。

##如何使用##

首先,在配置文件中添加以下配置項。

http_server {

enabled on;

listen 8080;

dir ./objs/nginx/html;

}

vhost __defaultVhost__ {

hls {

enabled on;

hls_fragment 10;

hls_window 600000;

hls_path ./objs/nginx/html;

hls_m3u8_file [app]/[stream].m3u8;

hls_ts_file [app]/[stream]-[seq].ts;

hls_keys on;

hls_fragments_per_key 4;

hls_key_file [app]/[stream]-[seq].key;

hls_key_file_path ./objs/nginx/html;

hls_key_url http://localhost:8080/live;

}

然后到trunk目錄下啟動:

./objs/srs -c conf/hls.conf

推送rtmp流的命令:

ffmpeg -re -i /Users/zexu/Movies/test.mp4 -c copy -f flv rtmp://localhost:1935/live/h265

最后在播放器中播放URL:

http://localhost:8080/live/h265.m3u8

###關(guān)于配置項要注意的地方###

關(guān)于hls_key_file_path和hls_key_url,要么都不配置(注釋掉即可),這樣的話m3u8,ts和key文件都在一個目錄下面。要么就都配置,需要自己保證兩個地址能夠?qū)ι稀7駝t會出現(xiàn)key找不到而導(dǎo)致播放失敗的問題。

關(guān)于找一找教程網(wǎng)

本站文章僅代表作者觀點(diǎn),不代表本站立場,所有文章非營利性免費(fèi)分享。

本站提供了軟件編程、網(wǎng)站開發(fā)技術(shù)、服務(wù)器運(yùn)維、人工智能等等IT技術(shù)文章,希望廣大程序員努力學(xué)習(xí),讓我們用科技改變世界。

[為SRS流媒體服務(wù)器添加HLS加密功能(附源碼)]http://www.zyiz.net/tech/detail-118040.html

總結(jié)

以上是生活随笔為你收集整理的srs可以用java开发吗,为SRS流媒体服务器添加HLS加密功能(附源码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。