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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

rstp 转hls_EasyHLS实现将IPCamera摄像机的RTSP转HLS直播输出

發布時間:2024/3/12 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rstp 转hls_EasyHLS实现将IPCamera摄像机的RTSP转HLS直播输出 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

EasyHLS

EasyHLS是EasyDarwin開源流媒體團隊開發的一款HLS打包庫,接口非常簡單,只需要傳入打包的文件名、切片存放的目錄、單個切片時長以及切片數等參數,EasyHLS庫就能輕松將H264+AAC的流媒體切片成m3u8+ts,提供給WEB服務器進行HLS流媒體發布;

調用流程##

/* 打包H264視頻 */

EasyHLS_API int Easy_APICALL EasyHLS_VideoMux(Easy_HLS_Handle handle, unsigned int uiFrameType, unsigned char *data, int dataLength, unsigned long long pcr, unsigned long long pts, unsigned long long dts);

其中pcr、dts、pts等參數都是unsigned long long型,通常情況下為時間戳(ms毫秒)\*90以后的結果,所以我們通常需要定義:

unsigned long long pcr,dts,pts = timestamp\*90; 千萬不要定義unsigned int型接收數據輸入!具體過程參考上面的幾個示例;

EasyHLS_RTSP##

EasyHLS_RTSP程序可以通過RTSPClient將RTSP攝像機IPCamera的流媒體音視頻數據流獲取到本地,再進行ts的音視頻封裝打包,并不斷更新m3u8列表,以提供HLS直播功能:

Easy_HLS_HandlefHLSHandle= 0;

Easy_RTSP_HandlefRTSPHandle = 0;

/* RTSPClient獲取數據后回調給上層 */

int Easy_APICALL __RTSPClientCallBack( int _chid, void *_chPtr, int _frameType, char *_pBuf, RTSP_FRAME_INFO *_frameInfo)

{

if(NULL == fHLSHandle) return -1;

if (_frameType == EASY_SDK_VIDEO_FRAME_FLAG)

{

unsigned long long llPTS = (_frameInfo->timestamp_sec%1000000)*1000 + _frameInfo->timestamp_usec/1000;

printf("Get %s Video \tLen:%d \ttm:%u.%u \t%u\n",_frameInfo->type==EASY_SDK_VIDEO_FRAME_I?"I":"P", _frameInfo->length, _frameInfo->timestamp_sec, _frameInfo->timestamp_usec, llPTS);

unsigned int uiFrameType = 0;

if (_frameInfo->type == EASY_SDK_VIDEO_FRAME_I)

{

uiFrameType = TS_TYPE_PES_VIDEO_I_FRAME;

}

else if (_frameInfo->type == EASY_SDK_VIDEO_FRAME_P)

{

uiFrameType = TS_TYPE_PES_VIDEO_P_FRAME;

}

EasyHLS_VideoMux(fHLSHandle, uiFrameType, (unsigned char*)_pBuf, _frameInfo->length, llPTS*90, llPTS*90, llPTS*90);

}

else if (_frameType == EASY_SDK_AUDIO_FRAME_FLAG)

{

unsigned long long llPTS = (_frameInfo->timestamp_sec%1000000)*1000 + _frameInfo->timestamp_usec/1000;

printf("Get Audio \tLen:%d \ttm:%u.%u \t%u\n", _frameInfo->length, _frameInfo->timestamp_sec, _frameInfo->timestamp_usec, llPTS);

if (_frameInfo->codec == EASY_SDK_AUDIO_CODEC_AAC)

{

EasyHLS_AudioMux(fHLSHandle, (unsigned char*)_pBuf, _frameInfo->length, llPTS*90, llPTS*90);

}

}

else if (_frameType == EASY_SDK_EVENT_FRAME_FLAG)

{

if (NULL == _pBuf && NULL == _frameInfo)

{

printf("Connecting:%s ...\n", ConfigRTSPURL);

}

else if (NULL!=_frameInfo && _frameInfo->type==0xF1)

{

printf("Lose Packet:%s ...\n", ConfigRTSPURL);

}

}

return 0;

}

void PrintUsage()

{

printf("Usage:\n");

printf("------------------------------------------------------\n");

printf("%s [-c -C -v -t -d -n -u -U ]\n", ProgName);

printf("Help Mode: %s -h \n", ProgName );

printf("For example: %s -c 4 -C 0 -v 3 -t 4 -d ./ -n easyhls_rtsp -u rtsp://admin:admin@anfengde.f3322.org/22 -U http://www.easydarwin.org/easyhls/\n", ProgName);

printf("------------------------------------------------------\n");

}

int main(int argc, char * argv[])

{

#ifdef _WIN32

extern char* optarg;

#endif

int ch;

ProgName = argv[0];

PrintUsage();

while ((ch = getopt(argc,argv, "hc:C:v:t:d:n:u:U:")) != EOF)

{

switch(ch)

{

case 'h':

PrintUsage();

return 0;

break;

case 'c':

ConfigPlayListCapacity =atoi(optarg);

break;

case 'C':

ConfigAllowCache =atoi(optarg);

break;

case 'v':

ConfigM3U8Version =atoi(optarg);

break;

case 't':

ConfigTargetDuration =atoi(optarg);

break;

case 'd':

ConfigHLSRootDir =optarg;

break;

case 'n':

ConfigHLSessionName =optarg;

break;

case 'u':

ConfigRTSPURL =optarg;

break;

case 'U':

ConfigHttpRootUrl =optarg;

break;

case '?':

return 0;

break;

default:

break;

}

}

int isEasyHLSActivated = EasyHLS_Activate(KEY);

switch(isEasyHLSActivated)

{

case EASY_ACTIVATE_INVALID_KEY:

printf("EasyHLS_KEY is EASY_ACTIVATE_INVALID_KEY!\n");

break;

case EASY_ACTIVATE_TIME_ERR:

printf("EasyHLS_KEY is EASY_ACTIVATE_TIME_ERR!\n");

break;

case EASY_ACTIVATE_PROCESS_NAME_LEN_ERR:

printf("EasyHLS_KEY is EASY_ACTIVATE_PROCESS_NAME_LEN_ERR!\n");

break;

case EASY_ACTIVATE_PROCESS_NAME_ERR:

printf("EasyHLS_KEY is EASY_ACTIVATE_PROCESS_NAME_ERR!\n");

break;

case EASY_ACTIVATE_VALIDITY_PERIOD_ERR:

printf("EasyHLS_KEY is EASY_ACTIVATE_VALIDITY_PERIOD_ERR!\n");

break;

case EASY_ACTIVATE_SUCCESS:

printf("EasyHLS_KEY is EASY_ACTIVATE_SUCCESS!\n");

break;

}

if(EASY_ACTIVATE_SUCCESS != isEasyHLSActivated)

return -1;

if( EASY_ACTIVATE_SUCCESS != EasyRTSP_Activate(EasyRTSPClient_KEY))

return -1;

//創建EasyRTSPClient

EasyRTSP_Init(&fRTSPHandle);

if (NULL == fRTSPHandle) return 0;

unsigned int mediaType = EASY_SDK_VIDEO_FRAME_FLAG | EASY_SDK_AUDIO_FRAME_FLAG;

//設置數據回調處理

EasyRTSP_SetCallback(fRTSPHandle, __RTSPClientCallBack);

//打開RTSP流

EasyRTSP_OpenStream(fRTSPHandle, 0, ConfigRTSPURL, EASY_RTP_OVER_TCP, mediaType, 0, 0, NULL, 1000, 0, 0x01, 1);

//創建EasyHLS Session

fHLSHandle = EasyHLS_Session_Create(ConfigPlayListCapacity, ConfigAllowCache, ConfigM3U8Version);

char subDir[64] = { 0 };

sprintf(subDir,"%s/",ConfigHLSessionName);

EasyHLS_ResetStreamCache(fHLSHandle, ConfigHLSRootDir, subDir, ConfigHLSessionName, ConfigTargetDuration);

printf("HLS URL:%s%s/%s.m3u8\n", ConfigHLSRootDir, ConfigHLSessionName, ConfigHLSessionName);

printf("Press Enter exit...\n");

getchar();

EasyHLS_Session_Release(fHLSHandle);

fHLSHandle = 0;

EasyRTSP_CloseStream(fRTSPHandle);

EasyRTSP_Deinit(&fRTSPHandle);

fRTSPHandle = NULL;

return 0;

}

獲取更多信息

Author:Jason

Copyright ? EasyDarwin.org 2012-2016

總結

以上是生活随笔為你收集整理的rstp 转hls_EasyHLS实现将IPCamera摄像机的RTSP转HLS直播输出的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 免费国产在线视频 | 欧美国产精品一区 | av日韩精品| 国产视频精品一区二区三区 | 中文字幕第十二页 | 欧美成人三区 | 成人天堂噜噜噜 | 影音先锋成人在线 | 自拍一级片 | 蜜臀国产AV天堂久久无码蜜臀 | 国产中文字幕91 | a黄色大片 | av网站在线免费看 | 99riav1国产精品视频 | 中文字幕不卡在线观看 | 欧美福利视频一区二区 | 白丝美女喷水 | av男人天堂网 | 久久久欧美精品sm网站 | www.四虎在线 | 久久久久九九九 | 欧美一级大黄 | 麻豆视频免费在线观看 | 亚洲制服av | 国产婷婷精品 | 日本xxxx18高清hd | 福利国产片 | 四虎国产精品永久免费观看视频 | 亚洲国产精品尤物yw在线观看 | 亚洲精品观看 | 激情五月婷婷久久 | 亚洲一区日韩精品 | av无码精品一区二区三区 | 蜜桃视频中文字幕 | 日本一区二区三区免费看 | 午夜a级片| 一级做a爱片性色毛片 | 精品妇女一区二区三区 | 国产精品一区二区三区四区五区 | 国产午夜三级一区二区三 | 国产91高清 | 自拍毛片 | 国产大片一区二区三区 | 四虎精品成人免费网站 | 日日躁夜夜躁狠狠躁 | 毛片无遮挡高清免费观看 | 99在线国产 | 欧美做受高潮 | 亚洲欧美一区二区三区在线观看 | 国产精品99久久久久久人 | 午夜福利三级理论电影 | 色婷婷综合久久久久中文字幕 | 超碰牛牛 | 不许穿内裤随时挨c调教h苏绵 | 美女131爽爽爽做爰视频 | 亚洲国产精品免费在线观看 | 亚洲美女在线观看 | 伊人69| 夜夜爱av | 国产视频1区2区3区 国产欧美一区二区精品性色99 | 成人免费网站在线观看 | 六月婷婷网| 2019日韩中文字幕mv | 中国一级黄色 | 蜜臀久久久久久999 大陆熟妇丰满多毛xxxⅹ | 国产精品入口 | 中文字幕 自拍偷拍 | 黄色片xxxx | 欧美大黑bbbbbbbbb在线 | 亚洲国产精品二区 | 综合色在线视频 | 成人免费xxxxx在线观看 | 亚洲国产精品国自产拍久久 | www.色视频 | 午夜成人影片 | 亚洲jlzzjizz少妇 | 欧美8888| 国产99对白在线播放 | 欧美激情免费观看 | 人人夜| 免费特级黄色片 | 九一网站在线观看 | 搡8o老女人老妇人老熟 | 美女一区二区三区视频 | 午夜影剧院| 国产欧美日韩综合精品一区二区三区 | 青青草五月天 | 亚洲品质自拍视频网站 | 小箩莉末发育娇小性色xxxx | 日韩一区中文 | 国产精选中文字幕 | 青青艹在线视频 | 欧美日韩中文在线观看 | 欧美老熟妇又粗又大 | 影音先锋资源av | 欧美人与性动交ccoo | 亚洲国产tv | 九九视频精品在线 | 久久久精品免费视频 |