==================================================================
小編在srs(simple rtmp server)服務(wù)器端修改了代碼支持h.265編碼以及 增加推送h.265裸流客戶端,代碼在百度網(wǎng)盤上,大家可自行下載。srs服務(wù)器本身不支持h.265以及推送h.265裸流走rtmp協(xié)議。
srs下載地址:https://github.com/ossrs/srs (下載的是3.0release)
百度網(wǎng)盤地址:鏈接: https://pan.baidu.com/s/1YsznrNIRhuhBr8JD518nOw
csdn下載地址:https://download.csdn.net/download/qq_44895902/12405623
1)vim src/app/srs_app_source.cpp
在這個(gè)函數(shù)中 srs_error_t SrsSource::on_video(SrsCommonMessage* shared_video)
找到if (!SrsFlvVideo::acceptable(shared_video->payload, shared_video->size)),跳轉(zhuǎn)到SrsFlvVideo::acceptable()函數(shù)定義中,下面修改內(nèi)容如下:
bool SrsFlvVideo::acceptable(char* data, int size){ // 1bytes required. if (size < 1) { return false; } char frame_type = data[0]; char codec_id = frame_type & 0x0f; frame_type = (frame_type >> 4) & 0x0f; if (frame_type < 1 || frame_type > 5) // 1<= x <= 5 { return false; } /* 2020-03-31 頭部問題以解決*/ if (codec_id < 2 || codec_id > 12) { // 2<= x <=7 return false; } return true;}
2)vim src/app/srs_app_source.cpp
這個(gè)函數(shù)中 srs_error_t SrsSource::on_video_imp(SrsSharedPtrMessage* msg) 找到
bool is_sequence_header = SrsFlvVideo::sh(msg->payload, msg->size) 這一行,跳轉(zhuǎn)到sh()函數(shù)定義中
bool SrsFlvVideo::sh(char* data, int size){ //判斷是否是h264 if (h264(data, size)) { char frame_type = data[0]; frame_type = (frame_type >> 4) & 0x0F; char avc_packet_type = data[1]; //srs_trace("h264**** data[0]=%#x,data[1]=%#x,%d,%d",data[0],data[1],frame_type, avc_packet_type ); return frame_type == SrsVideoAvcFrameTypeKeyFrame //1 && avc_packet_type == SrsVideoAvcFrameTraitSequenceHeader; //0 } //判斷是否是h265 if(h265(data, size)) { char frame_type = data[0]; frame_type = (frame_type >> 4) & 0x0F; char avc_packet_type = data[1]; //srs_trace("h265#### data[0]=%#x,data[1]=%#x,%d,%d",data[0],data[1],frame_type, avc_packet_type ); return frame_type == SrsVideoHevcFrameTypeKeyFrame //1 && avc_packet_type == SrsVideoHevcFrameTraitSequenceHeader; //0 } if (size < 2) { return false; } return true;}//別忘了函數(shù)定義在.h中自行添加bool SrsFlvVideo::h265(char *data, int size){ if(size < 1) return false; char codec_id = data[0]; codec_id = codec_id & 0x0F; return codec_id == SrsVideoCodecIdHEVC;}
srs服務(wù)器端支持h.265編碼已修改完成,重新編譯srs代碼
./configure && make && make install
啟動服務(wù)器: ./objs/srs -c conf/srs.conf 查看服務(wù)器是否啟動成功:ps -ef | grep srs
備注:src 源碼文件夾已上傳到百度網(wǎng)盤,下載srs3.0源代碼,將src這個(gè)替換就行,然后編譯,啟動服務(wù)器。
先看個(gè)demo,工程已上傳 如下圖
推流–>> 服務(wù)器端 —>> 拉流 演示推送h.265裸流
1)h.264編碼的MP4文件
ffmpeg -i input.mp4 -vcodec copy -an output.h264
2)h.265編碼的MP4文件
ffmpeg -i xxx.mp4 -vcodec copy -an -bsf hevc_mp4toannexb -f hevc xxx.hevc