《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 設(shè)計(jì)應(yīng)用 > 基于流媒體的移動(dòng)視頻直播系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
基于流媒體的移動(dòng)視頻直播系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
2014年電子技術(shù)應(yīng)用第9期
彭 宏1,吳海巍1,葉敏展2,陳 嫻1
1.浙江工業(yè)大學(xué) 信息工程學(xué)院 浙江省通信網(wǎng)技術(shù)應(yīng)用研究重點(diǎn)實(shí)驗(yàn)室,浙江 杭州310023; 2.中國電信股份有限公司浙江分公司,浙江 杭州310023
摘要: 視頻直播是最能體現(xiàn)媒體信息實(shí)時(shí)傳播的媒體形態(tài),介紹了一個(gè)利用3G/4G手機(jī)進(jìn)行視頻拍攝和傳輸?shù)囊苿?dòng)直播系統(tǒng)。分析了當(dāng)今移動(dòng)直播系統(tǒng)的發(fā)展趨勢(shì),介紹了如何設(shè)計(jì)并實(shí)現(xiàn)一個(gè)基于流媒體技術(shù)的移動(dòng)視頻直播系統(tǒng)。實(shí)際測(cè)試結(jié)果表明,用戶可以隨時(shí)隨地地利用3G/4G 的iPhone手機(jī)進(jìn)行直播,觀眾可以在遠(yuǎn)程PC端利用VLC播放器進(jìn)行觀看,提高直播系統(tǒng)的便捷性。
中圖分類號(hào): TP37
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2014)09-0111-03
Design and implementation of mobile video live system based on streaming media technology
Peng Hong1,Wu Haiwei1,Ye Minzhan2, Chen Xian1
1.Zhejiang Provincial Key Laboratory of Communication Networks and Application, College of Information Engineering,Zhejiang University of Technology,Hangzhou 310023,China;2.Zhejiang Branch of China Telecom Corporation Limited,Hangzhou 310023,China
Abstract: Live video is one of the best media forms to reflect the real-time information dissemination. This paper describes how to implement a mobile live system through video capture and transmission functions of 3G/4G mobile.The current status of the development of mobile live system is given,then a mobile video live system based on streaming media technology is designed and realized. The actual effect of the system indicates that users can make a live video on internet with 3G/4G mobile anytime and anywhere,and remote viewers can use VLC player based on personal computers to watch live video. The system brings convenience to people using it.
Key words : streaming media;mobile live system;HLS protocol

    流媒體指視頻、音頻、文本字幕等不同格式的多媒體數(shù)據(jù)用實(shí)時(shí)網(wǎng)絡(luò)傳輸協(xié)議作為媒介承載,并以連續(xù)媒體流的形式從源發(fā)送端向目的接收端傳輸,在目的端接收到一定的緩存數(shù)據(jù)后,就可以將上述流播放出來的網(wǎng)絡(luò)多媒體內(nèi)容,是在網(wǎng)絡(luò)上按時(shí)間先后次序傳輸和播放的連續(xù)音/視頻數(shù)據(jù)流[1]。3G、4G的普及和移動(dòng)終端日新月異的發(fā)展為移動(dòng)直播系統(tǒng)提供了一定的技術(shù)保證,視頻拍攝和視頻數(shù)據(jù)傳輸是3G/4G手機(jī)的基本功能,隨著計(jì)算機(jī)處理能力的提升以及圖像處理能力和網(wǎng)絡(luò)通信的不斷成熟,每個(gè)手機(jī)用戶都有了進(jìn)行視頻直播的可能,使得直播系統(tǒng)已經(jīng)進(jìn)入高速發(fā)展的時(shí)期。

1 總體框架設(shè)計(jì)

    移動(dòng)直播系統(tǒng)主要包括移動(dòng)設(shè)備端、服務(wù)器端和播放器三部分,基本流程包括移動(dòng)終端現(xiàn)場(chǎng)視頻的拍攝、壓縮編碼、視頻數(shù)據(jù)格式封裝、RTP封裝和數(shù)據(jù)發(fā)送,及本地錄像數(shù)據(jù)的保存并在3G/Wi-Fi下進(jìn)行上傳;接收端實(shí)現(xiàn)接收數(shù)據(jù)、解封裝、數(shù)據(jù)儲(chǔ)存、視頻信號(hào)發(fā)生,主要采用市場(chǎng)已有的支持rtsp協(xié)議的主流播放器,可進(jìn)行二次開發(fā)擴(kuò)展;流媒體服務(wù)器實(shí)現(xiàn)根據(jù)播放器的請(qǐng)求對(duì)移動(dòng)設(shè)備端的視頻數(shù)據(jù)進(jìn)行轉(zhuǎn)發(fā),以及采用RTCP控制協(xié)議優(yōu)化移動(dòng)設(shè)備端的碼率,自適應(yīng)網(wǎng)絡(luò)帶寬,以求最佳的用戶體驗(yàn);RTSP信令服務(wù)器負(fù)責(zé)系統(tǒng)中信令消息的傳輸、轉(zhuǎn)發(fā),是系統(tǒng)通信協(xié)議實(shí)現(xiàn)的關(guān)鍵部分,同時(shí)又要負(fù)責(zé)對(duì)系統(tǒng)中各個(gè)終端的管理,完成發(fā)送端、接收端和RTSP信令服務(wù)器的交互會(huì)話。這種平臺(tái)化的設(shè)計(jì)既方便了對(duì)移動(dòng)設(shè)備端和播放器端的統(tǒng)一管理,又能增強(qiáng)系統(tǒng)整體的負(fù)載能力。移動(dòng)直播系統(tǒng)的設(shè)計(jì)框架如圖1所示。

jsj1-t1.gif

2 移動(dòng)直播系統(tǒng)模塊設(shè)計(jì)

    由于移動(dòng)直播系統(tǒng)的播放器軟件采用VLC開源播放器為例,所以主要介紹流媒體服務(wù)器的模塊設(shè)計(jì)和iOS數(shù)據(jù)采集軟件的模塊設(shè)計(jì)。

2.1 流媒體服務(wù)器模塊設(shè)計(jì)

    流媒體服務(wù)器主要包括如圖2所示的功能模塊。

jsj1-t2.gif

    圖2中各模塊功能:(1)VLC視頻請(qǐng)求模塊:主要負(fù)責(zé)當(dāng)VLC播放器發(fā)生視頻請(qǐng)求時(shí),根據(jù)視頻請(qǐng)求查找請(qǐng)求的設(shè)備是否在線,如果在線則通知視頻直播數(shù)據(jù)轉(zhuǎn)發(fā)模塊轉(zhuǎn)發(fā)所請(qǐng)求的視頻數(shù)據(jù);(2)直播數(shù)據(jù)轉(zhuǎn)發(fā)模塊:負(fù)責(zé)所有的視頻數(shù)據(jù)轉(zhuǎn)發(fā),主要實(shí)現(xiàn)同時(shí)直播多路時(shí)的負(fù)載均衡,最大程度地減輕服務(wù)器壓力;(3)視頻點(diǎn)播模塊:主要是采用蘋果公司所特有的HLS(HTTP Live Streaming)技術(shù),實(shí)現(xiàn)對(duì)iOS直播軟件端保存的視頻文件進(jìn)行隨時(shí)隨地的點(diǎn)播回放。

    項(xiàng)目選擇以live555開源庫作為基礎(chǔ)庫,設(shè)計(jì)出符合功能和性能要求的流媒體轉(zhuǎn)發(fā)服務(wù)器。以下簡(jiǎn)單介紹利用live555開源庫開發(fā)出一個(gè)實(shí)現(xiàn)流媒數(shù)據(jù)流轉(zhuǎn)發(fā)的服務(wù)器。

    TaskScheduler* scheduler=BasicTaskScheduler::createNew();

    UsageEnvironment* env=BasicUsageEnvironment::createNew(*scheduler); 

    這里創(chuàng)建兩個(gè)關(guān)鍵的對(duì)象用于事件調(diào)度,實(shí)現(xiàn)了對(duì)事件的異步讀取、對(duì)事件句柄的設(shè)置及對(duì)錯(cuò)誤信息的輸出等,是整個(gè)事件驅(qū)動(dòng)的核心。

    RTSPServer* rtspServer=RTSPServer::createNew(*env,8554,authDB);//authDB為用戶驗(yàn)證的用戶數(shù)據(jù)庫

    ServerMediaSession* sms=ServerMediaSession::createNew(*env, streamName, streamName,descriptionString);

    MPEG2TransportUDPServerMediaSubsession* mpeg2=MPEG2TransportUDPServerMediaSubsession::createNew(*env,inputAddressStr,inputPortNum, inputStreamIsRawUDP);

    sms->addSubsession(mpeg2);

    rtspServer->addServerMediaSession(sms);

    這里是在端口8554上建立一個(gè)RTSP服務(wù)負(fù)責(zé)與VLC客戶端之間的會(huì)話,并新建一個(gè)MPEG2數(shù)據(jù)流轉(zhuǎn)發(fā)的MediaSession添加到RTSP服務(wù)中。MPEG2對(duì)應(yīng)一個(gè)數(shù)據(jù)源,sms作為RTSP服務(wù)的數(shù)據(jù)源會(huì)話。當(dāng)有VLC客戶端請(qǐng)求時(shí),進(jìn)行用戶驗(yàn)證,如驗(yàn)證通過則從數(shù)據(jù)源獲取數(shù)據(jù)進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā)。這樣一個(gè)簡(jiǎn)單的服務(wù)就建立起來了。

2.2 iOS數(shù)據(jù)采集軟件的模塊設(shè)計(jì)

    iOS設(shè)備數(shù)據(jù)采集端主要包括如圖3所示的功能模塊。

jsj1-t3.gif

    圖3中各主要模塊的功能:(1)H.264編碼:將攝像頭采集到的原始圖像數(shù)據(jù)進(jìn)行H.264壓縮編碼,便于在網(wǎng)絡(luò)中傳輸,減少發(fā)送到網(wǎng)絡(luò)中的碼率[2];(2)TS碼流封裝:基于MPEG-2標(biāo)準(zhǔn)(ISO13818-1)的視頻壓縮編碼,將H.264編碼出的ES流打包成PES流, PES流再按188 B的固定長(zhǎng)度加上必要的節(jié)目專用信息PSI組成傳送TS碼流;(3)本地保存:設(shè)備在直播的同時(shí)對(duì)攝像頭采集編碼出的TS流數(shù)據(jù)進(jìn)行保存,為了用戶能實(shí)現(xiàn)對(duì)歷史錄像進(jìn)行觀看,主要包含兩個(gè)文件,一個(gè)是.M3U8文件,用于單碼率適配流的HLS技術(shù),項(xiàng)目中只用到了一種CIF碼率,另一個(gè)是.ts文件,存儲(chǔ)視頻數(shù)據(jù)的切片媒體文件;(4)本地HLS和本地播放:建立本地HLS服務(wù),本地回看錄像文件。

    以下是軟件實(shí)現(xiàn)過程的簡(jiǎn)單介紹。

    do {

       if (self.avCaptureSession!=nil) break;

       [self vcrEncoderInit]; 

           //對(duì)原始數(shù)據(jù)采集所需的一些變量進(jìn)行初始化

       [self cameraSetting]; //對(duì)攝像頭的參數(shù)進(jìn)行設(shè)置

       } while (0);

    [self startVideoCapture]; //啟動(dòng)攝像頭采集實(shí)時(shí)視頻幀

    將采集的原始數(shù)據(jù)通ffmpeg庫進(jìn)行H.264編碼,根據(jù)MPEG-2標(biāo)準(zhǔn)(ISO13818-1)的視頻壓縮編碼,將H.264編碼出的ES流打包成PES流,PES流再按188 B的固定長(zhǎng)度加上必要的節(jié)目專用信息PSI組成傳送TS碼流[3-4],并進(jìn)行本地保存。

    av_register_all();//注冊(cè)編碼器

    pCodec=avcodec_find_encoder(AV_CODEC_ID_H264);//查找H264編碼器

    pcodecCtx=avcodec_alloc_context3(pCodec);//分配編碼器上下文內(nèi)存空間

    avcodec_open2(pcodecCtx, pCodec, NULL);//打開H264編碼器

    _m_yuvFrame=avcodec_alloc_frame();//分配yuv圖像幀內(nèi)存空間

    m_rgbFrame=avcodec_alloc_frame();//分配rgb圖像格式的內(nèi)存空間

    swsCtx=sws_getContext(pcodecCtx->width, pcodecCtx->height, PIX_FMT_BGRA, pcodecCtx->width, pcodecCtx->

    height, PIX_FMT_YUV420P, SWS_FAST_BILINEAR, NULL, NULL, NULL);//rgb轉(zhuǎn)為yuv圖像轉(zhuǎn)換的上下文句柄

    int nbytes=avpicture_get_size(PIX_FMT_YUV420P, pcodecCtx->width, pcodecCtx->height);

    outbuffer=(uint8_t*)av_malloc(nbytes);

    avpicture_fill((AVPicture*)_m_yuvFrame, outbuffer, 

    PIX_FMT_YUV420P, pcodecCtx->width, pcodecCtx->height);//設(shè)置outbuffer為yuv圖像幀buffer

    ofmt = av_guess_format("mpegts", NULL, NULL);//輸出格式為mpegts

    _oc = avformat_alloc_context();//分配輸出到文件的上下文內(nèi)存空間

    _oc->oformat = ofmt;//設(shè)置輸出格式

    avio_open(&_oc->pb, output, AVIO_FLAG_WRITE);//以寫格式打開文件

    avformat_write_header(_oc, &pAVDictionary);//寫入ts的節(jié)目專用信息頭

    上面都是為接下來的編碼和本地保存做準(zhǔn)備工作。

    avpicture_fill((AVPicture*)m_rgbFrame, buffer, PIX_FMT_BGRA, width, height);

    int rec=sws_scale(swsCtx, (const uint8_t**)m_rgbFrame->data, m_rgbFrame->linesize, 0, pcodecCtx->height,_m_yuvFrame->data, _m_yuvFrame->linesize);

    int state=avcodec_encode_video2(pcodecCtx, &avpakt, _m_yuvFrame, &got_packet_ptr);//將原始數(shù)據(jù)編碼成H264裸數(shù)據(jù)

    [self TSpacket:&avpakt];//打包

    int nRet = av_interleaved_write_frame(_oc, packet);//將ts數(shù)據(jù)寫入本地文件

    [delegate_sendData SendH264Data:_oc->pb->buffer+havepk*188 Size:tspk*188];//rtp打包ts流數(shù)據(jù)進(jìn)行流媒體直播

    av_free_packet(packet);//釋放內(nèi)存

    HLS是一個(gè)由蘋果公司提出的基于HTTP的流媒體網(wǎng)絡(luò)傳輸協(xié)議。本項(xiàng)目的本地播放錄像功能所采用的也是HLS協(xié)議,在手機(jī)本地搭建一個(gè)輕量級(jí)的Web服務(wù),只需要支持靜態(tài)文件訪問,然后調(diào)用系統(tǒng)的播放器類播放本地的M3U8文件即可。實(shí)現(xiàn)如下:

    httpServer = [[HTTPServer alloc] init];[httpServer setType:@"_http._tcp."]; [httpServer setPort:52479];[httpServer setDocumentRoot:filePath]; [httpServer start:&error];//建立輕量級(jí)本地Web服務(wù)

    然后即可調(diào)用系統(tǒng)播放組件MPMoviePlayerController進(jìn)行播放,這樣一個(gè)基于流媒體技術(shù)的移動(dòng)視頻直播系統(tǒng)的實(shí)現(xiàn)基本完成。

3 移動(dòng)直播系統(tǒng)測(cè)試

    在實(shí)驗(yàn)室網(wǎng)絡(luò)條件下,分別從RTSP用戶驗(yàn)證、VLC視頻請(qǐng)求播放、流媒體視頻轉(zhuǎn)發(fā)、iOS視頻采集軟件、本地播放錄像四方面對(duì)移動(dòng)直播系統(tǒng)進(jìn)行測(cè)試。結(jié)果軟件運(yùn)行正常,VLC視頻直播圖像較為清晰流暢,無明顯時(shí)延,用戶體驗(yàn)較好,達(dá)到了實(shí)時(shí)播放的效果。各界面效果如圖4~圖7所示。

jsj1-t4-7.gif

    綜上所述,該移動(dòng)直播系統(tǒng)利用手機(jī)終端的便利性,能夠在任何場(chǎng)景利用手機(jī)進(jìn)行拍攝;并且使用3G/4G網(wǎng)絡(luò)連接手機(jī)移動(dòng)直播平臺(tái),就可以在互聯(lián)網(wǎng)上實(shí)現(xiàn)對(duì)突發(fā)事件的現(xiàn)場(chǎng)同步播出,或者在網(wǎng)絡(luò)條件不好的情況下保存本地,而后進(jìn)行上傳,供其他用戶隨時(shí)隨地地點(diǎn)播錄像視頻,足以應(yīng)付基本的突發(fā)事件。利用手機(jī)的視頻拍攝和傳送能力,開發(fā)即時(shí)視頻直播系統(tǒng)將會(huì)帶來巨大的市場(chǎng)效應(yīng)。

參考文獻(xiàn)

[1] 程瀅穎.移動(dòng)終端上視頻直播系統(tǒng)的研究與設(shè)計(jì)[D].上海:華東理工大學(xué),2012.

[2] 方濤.數(shù)字電視業(yè)務(wù)信息及其編碼[M].北京:國防工業(yè)出版社,2003.

[3] 路錦正.MPEG-4/H.264視頻編解碼工程實(shí)踐[M].北京:電子工業(yè)出版社,2011.

[4] ISO/IEC 13818-1 information technology-generic coding of moving pictures and associated audio[S]:Syetems Recommendation H.222.0,1994.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
主站蜘蛛池模板: 精品丝袜国产自在线拍亚洲 | 亚洲人成色77777| 亚洲人成777| 日韩免费毛片视频| 夜夜爱夜夜做夜夜爽| 动漫无遮挡在线观看| 99久久精品费精品国产| 爱情岛论坛亚洲品质自拍视频网站| 国产精品日韩欧美在线| 久久天天躁狠狠躁夜夜AV浪潮| 美女扒开尿口让男人桶进| 在线无码VA中文字幕无码| 五月婷婷激情网| 色噜噜噜噜亚洲第一| 天天摸一摸视频寡妇| 亚洲人成网男女大片在线播放| 视频一区二区三区蜜桃麻豆| 少妇人妻在线视频| 亚洲色图第一页| 正在播放国产精品放孕妇| 欧美A∨在线观看| 国产乱子伦一区二区三区| 中国凸偷窥XXXX自由视频| 欧美黑人又粗又大又爽免费| 国产精品国语自产拍在线观看| 久久婷婷五月综合色欧美| 美国式禁忌在完整有限中字| 处女的第一次电影| 久久久久香蕉视频| 狼友av永久网站免费观看| 国产精品日韩专区| 一级伦理电线在2019| 欧美色图23p| 国产91无套剧情在线播放| 99精品视频在线视频免费观看| 欧美亚洲视频在线观看| 国产放荡对白视频在线观看| 中日韩精品电影推荐网站| 欧美乱大交XXXXX疯狂俱乐部| 免费少妇荡乳情欲视频| 青娱乐欧美视频|