0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

風(fēng)火輪科技YY3568開(kāi)發(fā)板新品上市

jf_NsPBt3VS ? 來(lái)源:風(fēng)火輪技術(shù)團(tuán)隊(duì) ? 2023-04-27 14:50 ? 次閱讀

風(fēng)火輪近來(lái)又推出一款新的嵌入式主板YY3568,它是一款基于瑞芯微RK3568 4核處理器ARM主板,性?xún)r(jià)比極高;現(xiàn)在瑞芯微的旗艦款是rk3588主打性能,這個(gè)rk3568是主打性?xún)r(jià)比的定位,接口豐富,算力能滿(mǎn)足大部份端級(jí)的需求,價(jià)格又做到極低,用到機(jī)器人、廣告機(jī)、門(mén)禁閘機(jī),自動(dòng)售賣(mài)機(jī)控制等等走量的場(chǎng)景最適合,給這個(gè)本來(lái)就熱鬧的市場(chǎng)加入了新的活力! 采用核心板+功能底板的設(shè)計(jì)方式

947bc4c4-e4bf-11ed-ab56-dac502259ad0.jpg

RK3568采用四核64位Cortex-A55處理器,全新ARM V8.2-A架構(gòu),主頻高達(dá)2.0GHZ,Mali G52,1TOPS算力。

94838c04-e4bf-11ed-ab56-dac502259ad0.jpg

豐富的接口:5路串口,1路CAN,30針排針擴(kuò)展接口

豐富的顯示接口:2路DSI,1路HDMI,1路EDP(支持觸摸)

多路網(wǎng)絡(luò)接口:雙千兆網(wǎng)口,5G WIFI,BT5.0,4G LTE

多路存儲(chǔ)接口:SATA,SSD,TF

音頻接口齊全:功放SPK,MIC,耳機(jī)接口

948ecd26-e4bf-11ed-ab56-dac502259ad0.jpg

9499962a-e4bf-11ed-ab56-dac502259ad0.jpg

支持三大主流操作系統(tǒng)

為何選擇YY3568呢?

相對(duì)市面其他的RK3568開(kāi)發(fā)板,YY3568幾乎把所有芯片外設(shè)接口全部引出,它設(shè)計(jì)了雙網(wǎng)口,4G,ssd,wifi藍(lán)牙,5串口,雙IIc,甚至還有汽車(chē)常用的can口,幾乎常用的接口都有了。這在ARM主板中很少見(jiàn)的,而且體積做到了小巧精致,只有一個(gè)手掌大小,接口布局合理。

采用了心板與功能接口底板分開(kāi)的設(shè)計(jì)方式,可靈活地將核心板用于實(shí)際的項(xiàng)目功能底板上。

YY3568將所有的屏幕接口全部引出(擁有MIPI-DSI,HDMI,EDP),可滿(mǎn)足多屏異顯。但是其他同類(lèi)產(chǎn)品開(kāi)發(fā)板只設(shè)計(jì)部分接口出來(lái)。

通過(guò)擴(kuò)展轉(zhuǎn)接板,引出了標(biāo)準(zhǔn)SATA3.0接口,支持SATA硬盤(pán)擴(kuò)展,速度更快,更加穩(wěn)定。

提供了豐富的可選配件(配件種類(lèi)持續(xù)提供):

4G網(wǎng)絡(luò)模塊:https://i-item.jd.com/10068467248509.html

7寸觸摸屏:https://i-item.jd.com/10069253972271.html

11.6寸觸摸屏:https://i-item.jd.com/10069255088264.html

10.1寸HDMI觸摸屏:https://i-item.jd.com/10041564226786.html

4K MIPI攝像頭:https://i-item.jd.com/10068468305449.html

紅外遙控器:https://i-item.jd.com/10069256402403.html

M.2固態(tài)硬盤(pán):https://i-item.jd.com/10069255507480.html

提供了豐富的開(kāi)發(fā)資料提供固件,驅(qū)動(dòng),源碼,底板參考設(shè)計(jì)原理圖PDF,環(huán)境搭建和編譯說(shuō)明等。

WIKI資料官網(wǎng):https://wiki.youyeetoo.cn/zh/YY3568

94bb4bb2-e4bf-11ed-ab56-dac502259ad0.jpg

YY3568可選類(lèi)型分為四種

型號(hào) 內(nèi)存 硬盤(pán) WIFI
1 4G 32G ×
2 2G 16G ×
3 4G 32G
4 2G 16G

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    8965

    瀏覽量

    364993
  • 嵌入式主板
    +關(guān)注

    關(guān)注

    7

    文章

    6081

    瀏覽量

    34936
  • 瑞芯微
    +關(guān)注

    關(guān)注

    23

    文章

    378

    瀏覽量

    51061
  • RK3568
    +關(guān)注

    關(guān)注

    4

    文章

    479

    瀏覽量

    4716

原文標(biāo)題:風(fēng)火輪科技又發(fā)新品啦--YY3568開(kāi)發(fā)板

文章出處:【微信號(hào):風(fēng)火輪技術(shù)團(tuán)隊(duì),微信公眾號(hào):風(fēng)火輪技術(shù)團(tuán)隊(duì)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    新品7折購(gòu)!米爾RK3568國(guó)產(chǎn)開(kāi)發(fā)板

    近日,米爾電子發(fā)布MYC-LR3568核心開(kāi)發(fā)板,核心基于高性能、低功耗的國(guó)產(chǎn)芯片-瑞芯微RK3568。核心
    的頭像 發(fā)表于 08-02 08:01 ?284次閱讀
    <b class='flag-5'>新品</b>7折購(gòu)!米爾RK<b class='flag-5'>3568</b>國(guó)產(chǎn)<b class='flag-5'>開(kāi)發(fā)板</b>

    RK3568開(kāi)發(fā)板支持AMP雙系統(tǒng)

    RK3568開(kāi)發(fā)板支持AMP雙系統(tǒng)
    的頭像 發(fā)表于 06-04 15:33 ?425次閱讀
    RK<b class='flag-5'>3568</b><b class='flag-5'>開(kāi)發(fā)板</b>支持AMP雙系統(tǒng)

    YY3568多核異構(gòu)(Linux+RT-Thread)--啟動(dòng)流程

    風(fēng)火輪科技的YY3568開(kāi)發(fā)板。 YY3568主板基于 Rockchip RK3568 芯片平臺(tái),四核 64位 Cortex-A55 核,
    的頭像 發(fā)表于 03-07 08:41 ?1528次閱讀
    <b class='flag-5'>YY3568</b>多核異構(gòu)(Linux+RT-Thread)--啟動(dòng)流程

    講講RK3568開(kāi)發(fā)板上的多核加載流程

    YY3568主板基于 Rockchip RK3568 芯片平臺(tái),四核 64位 Cortex-A55 核,主頻最高達(dá) 2GHz,集成雙核心架構(gòu)GPU以及高效能NPU,芯片性能優(yōu)異。
    的頭像 發(fā)表于 03-06 18:17 ?4248次閱讀
    講講RK<b class='flag-5'>3568</b><b class='flag-5'>開(kāi)發(fā)板</b>上的多核加載流程

    【youyeetoo X1 windows 開(kāi)發(fā)板體驗(yàn)】少兒AI智能STEAM積木平臺(tái)

    這次非常有幸,能夠得到深圳風(fēng)火輪youyeetoo X1的體驗(yàn)機(jī)會(huì),感謝電子發(fā)燒友和風(fēng)火輪。 在申請(qǐng)youyeetoo X1之前,已經(jīng)通過(guò)風(fēng)火輪的官方WiKi做過(guò)了一下了解,官方的介紹簡(jiǎn)介給力
    發(fā)表于 02-01 00:20

    【youyeetoo X1 windows 開(kāi)發(fā)板體驗(yàn)】基于ROS開(kāi)發(fā)的LIO系統(tǒng)——項(xiàng)目計(jì)劃+前言開(kāi)箱

    前言 很榮幸有機(jī)會(huì)參與到我們電子發(fā)燒友論壇平臺(tái)的試用活動(dòng),也感謝深圳風(fēng)火輪科技提供了這一次寶貴的機(jī)會(huì)!提供了youyeetoo X1 windows這么一款優(yōu)秀開(kāi)發(fā)板。閑話(huà)少說(shuō),我們快入正文; 官網(wǎng)
    發(fā)表于 01-26 17:58

    【youyeetoo X1 windows 開(kāi)發(fā)板體驗(yàn)】支持語(yǔ)音控制的AIoT智能終端設(shè)計(jì)

    感謝電子發(fā)燒友和深圳風(fēng)火輪科技的信任,本次參加youyeetoo X1 Windows 開(kāi)發(fā)板的評(píng)測(cè)。 開(kāi)發(fā)板特點(diǎn) youyeetoo X1 是一款由深圳風(fēng)火輪科技推出的x86架構(gòu)單板
    發(fā)表于 01-26 16:32

    BQ3568開(kāi)發(fā)板 RK3568鴻蒙系統(tǒng)主板

    BQ3568_使用說(shuō)明_開(kāi)發(fā)板詳情
    的頭像 發(fā)表于 01-10 17:06 ?449次閱讀
    BQ<b class='flag-5'>3568</b><b class='flag-5'>開(kāi)發(fā)板</b> RK<b class='flag-5'>3568</b>鴻蒙系統(tǒng)主板

    風(fēng)火輪科技第三款開(kāi)發(fā)板youyeetoo R1簡(jiǎn)介

    在2023年的尾聲之際,風(fēng)火輪科技如約而至,再次為我們帶來(lái)驚喜。繼前兩款備受贊譽(yù)的開(kāi)發(fā)板之后,他們?cè)俅瓮瞥隽巳碌牡谌?b class='flag-5'>開(kāi)發(fā)板--youyeetoo R1,為科技領(lǐng)域注入一股清新的活力。
    的頭像 發(fā)表于 01-02 14:08 ?1129次閱讀
    <b class='flag-5'>風(fēng)火輪</b>科技第三款<b class='flag-5'>開(kāi)發(fā)板</b>youyeetoo R1簡(jiǎn)介

    使用YY3568開(kāi)發(fā)板部署AI能力

    YY3568開(kāi)發(fā)板是 「風(fēng)火輪科技」 基于Rockchip RK3568 芯片平臺(tái)設(shè)計(jì)的開(kāi)發(fā)板,四核 64Cortex-A55 核,主頻最高
    的頭像 發(fā)表于 11-28 10:59 ?1800次閱讀
    使用<b class='flag-5'>YY3568</b><b class='flag-5'>開(kāi)發(fā)板</b>部署AI能力

    風(fēng)火輪YY3568開(kāi)發(fā)板免費(fèi)體驗(yàn)】+ YY3568安裝運(yùn)行Home-Assistant服務(wù)端

    軟件開(kāi)發(fā)版本。而最新版的HomeAssistant是2023.11.2,要求Python要3.11以上版本,但是YY3568的Debian-10系統(tǒng)自帶的Python為3.9,更新軟件倉(cāng)庫(kù)后依然沒(méi)有
    發(fā)表于 11-14 11:49

    風(fēng)火輪YY3568開(kāi)發(fā)板免費(fèi)體驗(yàn)】+ YY3568安裝運(yùn)行Unity的自制游戲教程范例

    ,并成功在自己的開(kāi)發(fā)筆記本,以及手機(jī)(Android-12)上運(yùn)行,因此想測(cè)試一下能否在YY3568的Android-11系統(tǒng)上運(yùn)行。 根據(jù)YY3568的wiki上的內(nèi)容,使用adb方式進(jìn)行apk安裝
    發(fā)表于 11-14 11:44

    風(fēng)火輪X86主板youyeetoo X1:部署MQTT Broker

    號(hào)外,號(hào)外。。。深圳風(fēng)火輪科技又推出新品啦--youyeetoo X1。youyeetoo X1 是一款由深圳風(fēng)火輪科技推出的x86架構(gòu)單板電腦(SBC),可運(yùn)行全功能版的windows和Linux
    的頭像 發(fā)表于 10-12 18:01 ?1875次閱讀
    <b class='flag-5'>風(fēng)火輪</b>X86主板youyeetoo X1:部署MQTT Broker

    深圳風(fēng)火輪科技又發(fā)新品啦--youyeetoo X1(X86開(kāi)發(fā)板)

    號(hào)外,號(hào)外。。。 深圳風(fēng)火輪科技又推出新品啦--youyeetoo X1。 youyeetoo X1 是一款由深圳風(fēng)火輪科技推出的x86架構(gòu)單板電腦(SBC),可運(yùn)行全功能版的windows
    的頭像 發(fā)表于 10-10 10:22 ?833次閱讀
    深圳<b class='flag-5'>風(fēng)火輪</b>科技又發(fā)<b class='flag-5'>新品</b>啦--youyeetoo X1(X86<b class='flag-5'>開(kāi)發(fā)板</b>)

    風(fēng)火輪YY3568開(kāi)發(fā)板免費(fèi)體驗(yàn)】04.FFMPEG API編程

    在上一篇,我們已經(jīng)成功使用FFMPEG通過(guò)命令行的方式進(jìn)行了RTMP的直播,其實(shí)FFMPEG還可以通過(guò)API的方式進(jìn)行編程,并且使用API的方式,那么擁有著更多的靈活性,這也是為什么要自編譯ffmpeg,而不是直接使用APT命令安裝的方式來(lái)運(yùn)行它。我們最終的目標(biāo)是使用RKMPP來(lái)將視頻進(jìn)行編碼,然后通過(guò)FFMPEG發(fā)送到RTMP服務(wù)器上進(jìn)行直播,那么方案有兩種,一種就是修改FFMPEG源碼進(jìn)行編譯,第二種方式就只能通過(guò)API編程來(lái)進(jìn)行了。 那么這一篇的任務(wù)有兩方面: 1.因?yàn)槲覀円褂胒fmpeg推RTMP流,那么我們先不繼承RKMPP,先從RTSP進(jìn)行拉流,然后使用軟解軟編后進(jìn)行推流,使用純C編寫(xiě)。 2.在Linux下面的軟件編譯,gcc hello.c -o hello一般只用來(lái)編譯hello world,但是在實(shí)際編譯過(guò)程中我們常常需要引入其他的庫(kù)來(lái)進(jìn)行編譯,所以需要增加一些參數(shù)。 廢話(huà)就說(shuō)到這里吧,上代碼: #include <stdio.h> #include <unistd.h> #include <string.h> #include \"libavcodec/avcodec.h\" #include \"libavformat/avformat.h\" #include \"libavfilter/avfilter.h\" #include \"libavfilter/buffersink.h\" #include \"libavfilter/buffersrc.h\" #include \"libavutil/avutil.h\" #include \"libavdevice/avdevice.h\" #include \"libavutil/audio_fifo.h\" #include \"libavutil/mathematics.h\" #include \"libswscale/swscale.h\" #include \"libavutil/imgutils.h\" #include \"libavutil/time.h\" #include \"libswresample/swresample.h\" const char input_link[] = \"rtsp://admin:a1234567@192.168.1.66:554/h264/ch1/sub/av_stream\"; const char output_link[] = \"rtmp://192.168.1.103:8910/rtmplive/cctv\"; const int width = 640, height = 480, fps = 25; int main(int argc, char* argv[]) { inti_video_output_stream = -1; int64_t i_video_frame = 0; avformat_network_init(); avdevice_register_all(); AVFrame *p_frame = av_frame_alloc(); AVPacket *packet = (AVPacket *)av_malloc(sizeof(AVPacket)); AVDictionary* options = NULL; av_dict_set(&options, \"buffer_size\", \"33554432\", 0); av_dict_set(&options, \"max_delay\", \"800000\", 0); av_dict_set(&options, \"stimeout\", \"20000000\", 0);//設(shè)置超時(shí)斷開(kāi)連接時(shí)間 av_dict_set(&options, \"rtsp_transport\", \"tcp\", 0);//tcp方式打開(kāi) AVFormatContext *p_video_input_format_ctx = avformat_alloc_context(); AVStream *p_video_input_stream = NULL; if (avformat_open_input(&p_video_input_format_ctx, input_link, NULL, &options) != 0) { printf(\"error: input stream open fail!\"); return -1; } if (avformat_find_stream_info(p_video_input_format_ctx, NULL) < 0) { printf(\"error: couldn\'t find stream information.\\\\n\"); return -1; } for (int i = 0; i < p_video_input_format_ctx->nb_streams; i++) { if (p_video_input_format_ctx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { p_video_input_stream = p_video_input_format_ctx->streams[i]; break; } } if (p_video_input_stream == NULL) { printf(\"error: couldn\'t find video stream.\\\\n\"); return -1; } const AVCodec *p_video_input_codec = avcodec_find_decoder(p_video_input_stream->codecpar->codec_id); AVCodecContext *p_video_input_codec_ctx = avcodec_alloc_context3(p_video_input_codec); if (avcodec_open2(p_video_input_codec_ctx, p_video_input_codec, NULL) < 0) { printf(\"error: couldn\'t open codec.\\\\n\"); return -1; } printf(\"----------Video Input Information----------\\\\n\"); av_dump_format(p_video_input_format_ctx, 0, NULL, 0); printf(\"-------------------------------------------\\\\n\"); AVFormatContext *p_output_format_ctx; if (avformat_alloc_output_context2(&p_output_format_ctx, 0, \"flv\", output_link) != 0) { printf(\"error: avformat_alloc_output_context2!\\\\n\"); return -1; } const AVCodec *p_video_output_codec = avcodec_find_encoder_by_name(\"libx264\"); if (!p_video_output_codec){ printf(\"error: couldn\'t find encoder!\\\\n\"); return -1; } AVCodecContext *p_video_output_codec_ctx = avcodec_alloc_context3(p_video_output_codec); if (!p_video_output_codec_ctx) { printf(\"error: avcodec_alloc_context3 failed!\\\\n\"); return -1; } p_video_output_codec_ctx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER; //全局參數(shù) p_video_output_codec_ctx->codec_id = p_video_output_codec->id; p_video_output_codec_ctx->bit_rate = 512 * 1024;//比特率 p_video_output_codec_ctx->width = width; p_video_output_codec_ctx->height = height; p_video_output_codec_ctx->time_base.num = 1; p_video_output_codec_ctx->time_base.den = fps; p_video_output_codec_ctx->framerate.num = fps; p_video_output_codec_ctx->framerate.den = 1; p_video_output_codec_ctx->gop_size = 50; p_video_output_codec_ctx->max_b_frames = 0; p_video_output_codec_ctx->pix_fmt = AV_PIX_FMT_YUV420P; // Set H264 preset and tune AVDictionary *param = 0; if (p_video_output_codec_ctx->codec_id == AV_CODEC_ID_H264) { // 這個(gè)非常重要,如果不設(shè)置延時(shí)非常的大 ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo 是x264編碼速度的選項(xiàng) av_dict_set(&param, \"preset\", \"superfast\", 0); av_dict_set(&param, \"tune\", \"zerolatency\", 0); } if (avcodec_open2(p_video_output_codec_ctx, p_video_output_codec, &param) < 0){ printf(\"error: couldn\'t open encoder!\\\\n\"); return -1; } //添加視頻流 AVStream *p_video_output_stream = avformat_new_stream(p_output_format_ctx, p_video_output_codec); if (!p_video_output_stream) { printf(\"error: avformat_new_stream failed!\\\\n\"); return -1; } //附加標(biāo)志,這個(gè)一定要設(shè)置 p_video_output_stream->codecpar->codec_tag = 0; //從編碼器復(fù)制參數(shù) avcodec_parameters_from_context(p_video_output_stream->codecpar, p_video_output_codec_ctx); ///打開(kāi)rtmp 的網(wǎng)絡(luò)輸出IOAVIOContext:輸入輸出對(duì)應(yīng)的結(jié)構(gòu)體,用于輸入輸出(讀寫(xiě)文件,RTMP協(xié)議等)。 if (avio_open(&p_output_format_ctx->pb, output_link, AVIO_FLAG_WRITE) != 0) { printf(\"error: avio_open failed!\\\\n\"); return -1; } //寫(xiě)入封裝頭 if (avformat_write_header(p_output_format_ctx, NULL) != 0) { printf(\"error: avformat_write_header failed!\\\\n\"); return -1; } for (int i = 0; i<p_output_format_ctx->nb_streams; i++) { if (p_output_format_ctx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { i_video_output_stream = i; } } printf(\"----------Output Information----------\\\\n\"); av_dump_format(p_output_format_ctx, 0, output_link, 1); printf(\"-------------------------------------------\\\\n\"); //int iVideoFrameSize = avpicture_get_size(pVideoOutputCodecCtx->pix_fmt, pVideoOutputCodecCtx->width, pVideoOutputCodecCtx->height); //uint8_t *pPictureBuf = new uint8_t[iVideoFrameSize]; int video_duration = (p_output_format_ctx->streams[i_video_output_stream]->time_base.den / p_output_format_ctx->streams[i_video_output_stream]->time_base.num) / fps; while (1) { if (av_read_frame(p_video_input_format_ctx, packet) >= 0){ if (avcodec_send_packet(p_video_input_codec_ctx, packet) < 0 || avcodec_receive_frame(p_video_input_codec_ctx, p_frame) < 0) { printf(\"error: decode video failed!\\\\n\"); continue; } av_packet_unref(packet); packet = av_packet_alloc(); //packet->data = NULL; //packet->size = 0; if (avcodec_send_frame(p_video_output_codec_ctx, p_frame) != 0) { printf(\"error: send frame failed!\\\\n\"); continue; } av_frame_unref(p_frame); if (avcodec_receive_packet(p_video_output_codec_ctx, packet) != 0 || packet->size <= 0) { printf(\"error: avcodec_receive_packet failed!\\\\n\"); continue; } packet->stream_index = i_video_output_stream; packet->pts = i_video_frame * video_duration; packet->dts = i_video_frame * video_duration; packet->duration = video_duration; if (av_interleaved_write_frame(p_output_format_ctx, packet) < 0) { printf(\"error: av_interleaved_write_frame failed!\\\\n\"); } av_packet_unref(packet); i_video_frame++; av_frame_unref(p_frame); av_packet_unref(packet); } usleep(10000); } return 0; } 然后,我們進(jìn)行編譯,編譯的命令放在下面,注意的是鏈接庫(kù)最好按照我的順序來(lái),不然可能會(huì)出問(wèn)題的。 可以看到,甚至連一個(gè)警告都沒(méi)有,完美! 接下來(lái)我們就開(kāi)始運(yùn)行吧: 運(yùn)行到這里可以看到我們讓輸出input信息和output信息還有編碼器的信息已經(jīng)成功輸出了,但是輸出后就好像卡死了,但是其實(shí)是它在正常工作,咱們沒(méi)有繼續(xù)讓他進(jìn)行輸出啊,所以如果希望改進(jìn)的話(huà),你可以讓他增加一些統(tǒng)計(jì)信息,但是可以50幀左右,也就是2秒輸出一下就可以了,一方面這樣看起來(lái)整潔容易看出問(wèn)題,另外一方面也可以減輕CPU的負(fù)擔(dān)。 使用top命令看一下CPU的使用率,不過(guò)才76%,如果滿(mǎn)載的話(huà)將會(huì)是400%,可以說(shuō)是即使是軟編,那么也處理640x480的視頻很輕松了。 實(shí)際測(cè)試效果圖如上,為了隱私我打上了馬賽克,不過(guò)可以看到時(shí)間的。 視頻信息如上,可以看到軟件已經(jīng)推流成功了,完美! 說(shuō)明 在這個(gè)程序中直接把鏈接寫(xiě)死在程序里了,其實(shí)相對(duì)來(lái)講,我更建議大家通過(guò)啟動(dòng)時(shí)通過(guò)命令行后面的參數(shù)進(jìn)行傳入,在程序里直接就可以通過(guò)argv就可以進(jìn)行讀取了,這個(gè)是支持的,我已經(jīng)寫(xiě)好在main里面了。 這個(gè)程序是可以讀取本地文件,也可以生成本地文件,還可以讀本地文件推流RTMP,也可以讀RTSP生成本地文件,例如要生成本地文件的話(huà),可以將代碼中的第20行修改為:const char output_link[] = \"cctv.flv\";. 本程序只做了視頻部分,因?yàn)橐曨l部分比較占用CPU資源,音頻部分占用小,而且視頻部分代碼比較簡(jiǎn)單好理解,后期增加音頻流也基本一致,但是需要注意的有可能frame和packet并不是一一對(duì)應(yīng)的,發(fā)送出去以后一定要用while來(lái)收回,還有就是注意時(shí)間軸的同步。 本程序使用的是純C來(lái)進(jìn)行編寫(xiě)的,主要是程序比較小,而且ffmpeg也是使用純C寫(xiě)的,可以看到文件也都寫(xiě)在了一起,如果做的功能比較多,還是建議使用C++使用面向?qū)ο髞?lái)完成,引入頭文件時(shí)記的添加extern \"C\",而且要用到多線(xiàn)程,包括視頻解碼線(xiàn)程,音頻解碼線(xiàn)程以及編碼線(xiàn)程等等。 要使用音視頻的緩存AVFifoBuffer。 增加QT界面,同時(shí)最好使用QT的項(xiàng)目管理,這樣不用每次都輸入那么多的參數(shù)了。如果不適用QT,不做界面,那么建議使用Makefile來(lái)管理項(xiàng)目。
    發(fā)表于 09-25 15:33