91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

OpenHarmony 3.2 Beta多媒體系列——音視頻播放框架

OpenAtom OpenHarmony ? 來源:未知 ? 2022-11-21 21:35 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

點(diǎn)擊藍(lán)字 ╳ 關(guān)注我們


開源項(xiàng)目 OpenHarmony
是每個(gè)人的 OpenHarmony

巴延興

深圳開鴻數(shù)字產(chǎn)業(yè)發(fā)展有限公司

資深OS框架開發(fā)工程師


以下內(nèi)容來自嘉賓分享,不代表開放原子開源基金會(huì)觀點(diǎn)

一、簡(jiǎn)介

媒體子系統(tǒng)為開發(fā)者提供一套接口,方便開發(fā)者使用系統(tǒng)的媒體資源,主要包含音視頻開發(fā)、相機(jī)開發(fā)、流媒體開發(fā)等模塊。每個(gè)模塊都提供給上層應(yīng)用對(duì)應(yīng)的接口,本文會(huì)對(duì)音視頻開發(fā)中的音視頻播放框架做一個(gè)詳細(xì)的介紹。

二、目錄

foundation/multimedia/media_standard
├── frameworks                        #框架代碼
│ ├── js
│ │ ├── player
│ ├── native
│ │ ├── player #native實(shí)現(xiàn)
│ └── videodisplaymanager #顯示管理
│ ├── include
│ └── src
├── interfaces
│ ├── inner_api #內(nèi)部接口
│ │ └── native
│ └── kits #外部JS接口
├── sa_profile #服務(wù)配置文件
└── services
├── engine #engine代碼
│ └── gstreamer
├── etc #服務(wù)配置文件
├── include #頭文件
└── services
├── sa_media #media服務(wù)
│ ├── client #media客戶端
│ ├── ipc #media ipc調(diào)用
│ └── server #media服務(wù)端
├── factory #engine工廠
└── player #player服務(wù)
├── client #player客戶端
├── ipc #player ipc調(diào)用
└──server#player服務(wù)端

三、播放的總體流程



四、Native接口使用

OpenHarmony系統(tǒng)中,音視頻播放通過N-API接口提供給上層JS調(diào)用,N-API相當(dāng)于是JS和Native之間的橋梁,在OpenHarmony源碼中,提供了C++直接調(diào)用的音視頻播放例子,在foundation/multimedia/player_framework/test/nativedemo/player目錄中。
void PlayerDemo::RunCase(const string &path)
{
player_ = OHOS::CreatePlayer();
if (player_ == nullptr) {
cout << "player_ is null" << endl;
return;
}
RegisterTable();
std::shared_ptr cb = std::make_shared();
cb->SetBufferingOut(SelectBufferingOut());


int32_t ret = player_->SetPlayerCallback(cb);
if (ret != 0) {
cout << "SetPlayerCallback fail" << endl;
}
if (SelectSource(path) != 0) {
cout << "SetSource fail" << endl;
return;
}
sptr producerSurface = nullptr;
producerSurface = GetVideoSurface();
if (producerSurface != nullptr) {
ret = player_->SetVideoSurface(producerSurface);
if (ret != 0) {
cout << "SetVideoSurface fail" << endl;
}
}
SetVideoScaleType();
if (SelectRendererMode() != 0) {
cout << "set renderer info fail" << endl;
}
ret = player_->PrepareAsync();
if (ret != 0) {
cout << "PrepareAsync fail" << endl;
return;
}
cout << "Enter your step:" << endl;
DoNext();
}
首先根據(jù)RunCase可以大致了解一下播放音視頻的主要流程,創(chuàng)建播放器,設(shè)置播放源,設(shè)置回調(diào)方法(包含播放過程中的多種狀態(tài)的回調(diào)),設(shè)置播放顯示的Surface,這些準(zhǔn)備工作做好之后,需要調(diào)用播放器的PrepareASync方法,這個(gè)方法完成后,播放狀態(tài)會(huì)變成Prepared狀態(tài),這時(shí)就可以調(diào)用播放器的play接口,進(jìn)行音視頻的播放了。
RegisterTable()方法中,將字符串和對(duì)應(yīng)的方法映射到Map中,這樣后續(xù)的DoNext會(huì)根據(jù)輸入的命令,來決定播放器具體的操作。
void PlayerDemo::DoNext()
{
std::string cmd;
while (std::cin, cmd)) {
auto iter = playerTable_.find(cmd);
if (iter != playerTable_.end()) {
auto func = iter->second;
if (func() != 0) {
cout << "Operation error" << endl;
}
if (cmd.find("stop") != std::npos && dataSrc_ != nullptr) {
dataSrc_->Reset();
}
continue;
} else if (cmd.find("quit") != std::npos || cmd == "q") {
break;
} else {
DoCmd(cmd);
continue;
}
}
}


void PlayerDemo::RegisterTable()
{
(void)playerTable_.emplace("prepare", std::bind(&Player::Prepare, player_));
(void)playerTable_.emplace("prepareasync", std::bind(&Player::PrepareAsync, player_));
(void)playerTable_.emplace("", std::bind(&Player::Play, player_)); // ENTER -> play
(void)playerTable_.emplace("play", std::bind(&Player::Play, player_));
(void)playerTable_.emplace("pause", std::bind(&Player::Pause, player_));
(void)playerTable_.emplace("stop", std::bind(&Player::Stop, player_));
(void)playerTable_.emplace("reset", std::bind(&Player::Reset, player_));
(void)playerTable_.emplace("release", std::bind(&Player::Release, player_));
(void)playerTable_.emplace("isplaying", std::bind(&PlayerDemo::GetPlaying, this));
(void)playerTable_.emplace("isloop", std::bind(&PlayerDemo::GetLooping, this));
(void)playerTable_.emplace("speed", std::bind(&PlayerDemo::GetPlaybackSpeed, this));
}
以上的DoNext方法中核心的代碼是func()的調(diào)用,這個(gè)func就是之前注冊(cè)進(jìn)Map中字符串對(duì)應(yīng)的方法,在RegisterTable方法中將空字符串""和"play"對(duì)綁定為Player::Play方法,默認(rèn)不輸入命令參數(shù)時(shí),是播放操作。

五、調(diào)用流程

左右滑動(dòng)查看更多


本段落主要針對(duì)媒體播放的框架層代碼進(jìn)行分析,所以在流程中涉及到了IPC調(diào)用相關(guān)的客戶端和服務(wù)端,代碼暫且分析到調(diào)用gstreamer引擎。
首先Sample通過PlayerFactory創(chuàng)建了一個(gè)播放器實(shí)例(PlayerImpl對(duì)象),創(chuàng)建過程中調(diào)用Init函數(shù)。
int32_t PlayerImpl::Init()
{
playerService_ = MediaServiceFactory::GetInstance().CreatePlayerService();
CHECK_AND_RETURN_RET_LOG(playerService_ != nullptr, MSERR_UNKNOWN, "failed to create player service");
return MSERR_OK;
}
MediaServiceFactory::GetInstance()返回的是MediaClient對(duì)象,所以CreateplayerService函數(shù)實(shí)際上是調(diào)用了MediaClient對(duì)應(yīng)的方法。
std::shared_ptr MediaClient::CreatePlayerService()
{
std::lock_guard lock(mutex_);
if (!IsAlived()) {
MEDIA_LOGE("media service does not exist.");
return nullptr;
}


sptr object = mediaProxy_->GetSubSystemAbility(
IStandardMediaService::MEDIA_PLAYER, listenerStub_->AsObject());
CHECK_AND_RETURN_RET_LOG(object != nullptr, nullptr, "player proxy object is nullptr.");


sptr playerProxy = iface_cast(object);
CHECK_AND_RETURN_RET_LOG(playerProxy != nullptr, nullptr, "player proxy is nullptr.");


std::shared_ptr player = PlayerClient::Create(playerProxy);
CHECK_AND_RETURN_RET_LOG(player != nullptr, nullptr, "failed to create player client.");


playerClientList_.push_back(player);
return player;
}
這個(gè)方法中主要通過PlayerClient::Create(playerProxy)方法創(chuàng)建了PlayerClient實(shí)例,并且將該實(shí)例一層層向上傳,最終傳給了PlayerImpl的playerService_變量,后續(xù)對(duì)于播放器的操作,PlayerImpl都是通過調(diào)用PlayerClient實(shí)例實(shí)現(xiàn)的。
int32_t PlayerImpl::Play()
{
CHECK_AND_RETURN_RET_LOG(playerService_ != nullptr, MSERR_INVALID_OPERATION, "player service does not exist..");
MEDIA_LOGW("KPI-TRACE: PlayerImpl Play in");
return playerService_->Play();
}


int32_t PlayerImpl::Prepare()
{
CHECK_AND_RETURN_RET_LOG(playerService_ != nullptr, MSERR_INVALID_OPERATION, "player service does not exist..");
MEDIA_LOGW("KPI-TRACE: PlayerImpl Prepare in");
return playerService_->Prepare();
}


int32_t PlayerImpl::PrepareAsync()
{
CHECK_AND_RETURN_RET_LOG(playerService_ != nullptr, MSERR_INVALID_OPERATION, "player service does not exist..");
MEDIA_LOGW("KPI-TRACE: PlayerImpl PrepareAsync in");
return playerService_->PrepareAsync();
}
對(duì)于PlayerImpl來說,playerService_指向的PlayerClient就是具體的實(shí)現(xiàn),PlayerClient的實(shí)現(xiàn)是通過IPC的遠(yuǎn)程調(diào)用來實(shí)現(xiàn)的,具體地是通過IPC中的proxy端向遠(yuǎn)端服務(wù)發(fā)起遠(yuǎn)程調(diào)用請(qǐng)求。
我們以播放Play為例:
int32_t PlayerClient::Play()
{
std::lock_guard lock(mutex_);
CHECK_AND_RETURN_RET_LOG(playerProxy_ != nullptr, MSERR_NO_MEMORY, "player service does not exist..");
return playerProxy_->Play();
}
int32_t PlayerServiceProxy::Play()
{
MessageParcel data;
MessageParcel reply;
MessageOption option;


if (!data.WriteInterfaceToken(PlayerServiceProxy::GetDescriptor())) {
MEDIA_LOGE("Failed to write descriptor");
return MSERR_UNKNOWN;
}


int error = Remote()->SendRequest(PLAY, data, reply, option);
if (error != MSERR_OK) {
MEDIA_LOGE("Play failed, error: %{public}d", error);
return error;
}
return reply.ReadInt32();
}
proxy端發(fā)送調(diào)用請(qǐng)求后,對(duì)應(yīng)的Stub端會(huì)在PlayerServiceStub::OnRemoteRequest接收到請(qǐng)求,根據(jù)請(qǐng)求的參數(shù)進(jìn)行對(duì)應(yīng)的函數(shù)調(diào)用。播放操作對(duì)應(yīng)的調(diào)用Stub的Play方法。
int32_t PlayerServiceStub::Play()
{
MediaTrace Trace("binder::Play");
CHECK_AND_RETURN_RET_LOG(playerServer_ != nullptr, MSERR_NO_MEMORY, "player server is nullptr");
return playerServer_->Play();
}
這里最終是通過playerServer_調(diào)用Play函數(shù)。playerServer_在Stub初始化的時(shí)候通過PlayerServer::Create()方式來獲取得到。也就是PlayerServer。
std::shared_ptr PlayerServer::Create()
{
std::shared_ptr server = std::make_shared();
CHECK_AND_RETURN_RET_LOG(server != nullptr, nullptr, "failed to new PlayerServer");


(void)server->Init();
return server;
}
最終我們的Play調(diào)用到了PlayerServer的Play()。在媒體播放的整個(gè)過程中會(huì)涉及到很多的狀態(tài),所以在Play中進(jìn)行一些狀態(tài)的判讀后調(diào)用OnPlay方法。這個(gè)方法中發(fā)起了一個(gè)播放的任務(wù)。
int32_t PlayerServer::Play()
{
std::lock_guard lock(mutex_);


if (lastOpStatus_ == PLAYER_PREPARED || lastOpStatus_ == PLAYER_PLAYBACK_COMPLETE ||
lastOpStatus_ == PLAYER_PAUSED) {
return OnPlay();
} else {
MEDIA_LOGE("Can not Play, currentState is %{public}s", GetStatusDescription(lastOpStatus_).c_str());
return MSERR_INVALID_OPERATION;
}
}


int32_t PlayerServer::OnPlay()
{
auto playingTask = std::make_shared>([this]() {
MediaTrace::TraceBegin("PlayerServer::Play", FAKE_POINTER(this));
auto currState = std::static_pointer_cast(GetCurrState());
(void)currState->Play();
});


int ret = taskMgr_.LaunchTask(playingTask, PlayerServerTaskType::STATE_CHANGE);
CHECK_AND_RETURN_RET_LOG(ret == MSERR_OK, ret, "Play failed");


lastOpStatus_ = PLAYER_STARTED;
return MSERR_OK;
}
在播放任務(wù)中調(diào)用了PlayerServer::Play()
int32_t PlayerServer::Play()
{
return server_.HandlePlay();
}
在Play里面直接調(diào)用PlayerServer的HandlePlay方法,HandlePlay方法通過playerEngine_調(diào)用到了gstreamer引擎,gstreamer是最終播放的實(shí)現(xiàn)。
int32_t PlayerServer::HandlePlay()
{
int32_t ret = playerEngine_->Play();
CHECK_AND_RETURN_RET_LOG(ret == MSERR_OK, MSERR_INVALID_OPERATION, "Engine Play Failed!");


return MSERR_OK;
}

六、總結(jié)

本文主要對(duì)OpenHarmony 3.2 Beta多媒體子系統(tǒng)的媒體播放進(jìn)行介紹,首先梳理了整體的播放流程,然后對(duì)播放的主要步驟進(jìn)行了詳細(xì)地分析。
媒體播放主要分為以下幾個(gè)層次:

(1)提供給應(yīng)用調(diào)用的Native接口,這個(gè)實(shí)際上通過OHOS::CreatePlayer()調(diào)用返回PlayerImpl實(shí)例。

(2)PlayerClient,這部分通過IPC的proxy調(diào)用,向遠(yuǎn)程服務(wù)發(fā)起調(diào)用請(qǐng)求。

(3)PlayerServer,這部分是播放服務(wù)的實(shí)現(xiàn)端,提供給Client端調(diào)用。

(4)Gstreamer,這部分是提供給PlayerServer調(diào)用,真正實(shí)現(xiàn)媒體播放的功能。





原文標(biāo)題:OpenHarmony 3.2 Beta多媒體系列——音視頻播放框架

文章出處:【微信公眾號(hào):OpenAtom OpenHarmony】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

    關(guān)注

    60

    文章

    2963

    瀏覽量

    45898
  • OpenHarmony
    +關(guān)注

    關(guān)注

    33

    文章

    3952

    瀏覽量

    21102

原文標(biāo)題:OpenHarmony 3.2 Beta多媒體系列——音視頻播放框架

文章出處:【微信號(hào):gh_e4f28cfa3159,微信公眾號(hào):OpenAtom OpenHarmony】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    從 “卡脖子” 到 “自主可控”,音視頻分布式系統(tǒng)國(guó)產(chǎn)化實(shí)踐之路

    持續(xù)升級(jí),導(dǎo)致國(guó)內(nèi)音視頻領(lǐng)域面臨核心器件供應(yīng)不穩(wěn)定、技術(shù)迭代受限、信息安全存在隱患等多重挑戰(zhàn)。在此背景下,國(guó)內(nèi)領(lǐng)先的音視頻技術(shù)企業(yè)主動(dòng)突破,率先完成全系列分布式產(chǎn)品的國(guó)產(chǎn)化替代升級(jí),為國(guó)內(nèi)音視
    的頭像 發(fā)表于 03-02 11:18 ?51次閱讀
    從 “卡脖子” 到 “自主可控”,<b class='flag-5'>音視頻</b>分布式系統(tǒng)國(guó)產(chǎn)化實(shí)踐之路

    基于FFmpeg解封裝WMV和M4V格式

    開源鴻蒙具備多格式音視頻播放能力,其播放器需依次完成解協(xié)議、解封裝、解碼、渲染四大核心步驟,方可將音視頻內(nèi)容完整呈現(xiàn)給用戶;其中,解封裝作為銜接協(xié)議解析與
    的頭像 發(fā)表于 01-21 12:57 ?347次閱讀

    HT1001EK音視頻編碼器——高清傳輸.穩(wěn)定無憂,全場(chǎng)景音視頻解決方案

    參數(shù),老師、行政人員都能操作。支持音頻分離和獨(dú)立輸入,線上課程錄播、會(huì)議發(fā)言都清晰,1080P高清畫面+低延時(shí)傳輸,拼接屏、投影機(jī)都能適配。而且兼容RTSP協(xié)議,VLC播放器直接拉流,不管是教室、會(huì)議室還是遠(yuǎn)程培訓(xùn),一臺(tái)設(shè)備就能搞定所有音視頻傳輸需求?!?
    發(fā)表于 12-30 15:26

    洲明科技榮獲2025年度音視頻行業(yè)品牌評(píng)選九項(xiàng)大獎(jiǎng)

    2025年12月20日,由DAV數(shù)字音視工程網(wǎng)與《數(shù)字音視工程》雜志聯(lián)合主辦的第17屆音視頻行業(yè)品牌評(píng)選結(jié)果正式揭曉。
    的頭像 發(fā)表于 12-28 11:45 ?670次閱讀

    打破國(guó)外壟斷!自主分布式音視頻方案筑牢行業(yè)安全根基

    了全系列國(guó)產(chǎn)化的替代升級(jí),為國(guó)內(nèi)音視頻行業(yè)的安全、快速發(fā)展提供了強(qiáng)大的支持。 分布式可視化綜合管理系統(tǒng)是一種由多個(gè)擁有獨(dú)立運(yùn)算能力的節(jié)點(diǎn)組成的去中心化音視頻可視化綜合管理系統(tǒng),具有高可靠性、高可擴(kuò)展性和高靈活性等
    的頭像 發(fā)表于 12-19 11:28 ?372次閱讀
    打破國(guó)外壟斷!自主分布式<b class='flag-5'>音視頻</b>方案筑牢行業(yè)安全根基

    音視頻編解碼封裝解封裝部件介紹

    是否有探索開源鴻蒙音視頻編解碼技術(shù)的欲望?是否對(duì)開源鴻蒙音視頻編解碼格式支持有訴求?別急——今天這份開源鴻蒙AVCodec Kit介紹文章,就是解答疑惑的指南!參考這份指南,可以使用開源鴻蒙的音視頻編解碼能力,進(jìn)行應(yīng)用開發(fā);也可
    的頭像 發(fā)表于 10-31 09:15 ?499次閱讀
    <b class='flag-5'>音視頻</b>編解碼封裝解封裝部件介紹

    音視頻開發(fā)全棧解析

    Media Kit 讓開發(fā)者可以調(diào)用系統(tǒng)的音視頻能力,涵蓋播放、錄制、錄屏、元數(shù)據(jù)提取與轉(zhuǎn)碼六大核心功能模塊,支撐系統(tǒng)應(yīng)用與第三方應(yīng)用在視頻播放、內(nèi)容創(chuàng)作、教學(xué)錄屏、直播互動(dòng)等典型場(chǎng)景
    的頭像 發(fā)表于 09-18 14:42 ?847次閱讀
    <b class='flag-5'>音視頻</b>開發(fā)全棧解析

    一款面向便攜式多媒體應(yīng)用的高品質(zhì)立體聲數(shù)模轉(zhuǎn)換器 (DAC) 芯片

    便攜式多媒體播放器(Portable Media Player),簡(jiǎn)稱PMP,是集音視頻播放、圖片瀏覽與數(shù)據(jù)存儲(chǔ)功能于一體的手持設(shè)備。
    的頭像 發(fā)表于 09-04 10:00 ?968次閱讀
    一款面向便攜式<b class='flag-5'>多媒體</b>應(yīng)用的高品質(zhì)立體聲數(shù)模轉(zhuǎn)換器 (DAC) 芯片

    花椒直播首次開源推流器組件 為鴻蒙開發(fā)者提供高性能推流解決方案

    器。該工具基于花椒直播自主通用多媒體框架HJMedia打造而來,采用創(chuàng)新的通用多媒體框架設(shè)計(jì),以高度模塊化、可擴(kuò)展的插件化架構(gòu),極大提升了音視頻
    的頭像 發(fā)表于 09-04 09:52 ?685次閱讀
    花椒直播首次開源推流器組件 為鴻蒙開發(fā)者提供高性能推流解決方案

    千視電子受邀亮相2025音視頻產(chǎn)業(yè)鏈研討會(huì),引領(lǐng)全鏈路音視頻IP化新趨勢(shì)

    2025年8月22日,由中國(guó)電子音響行業(yè)協(xié)會(huì)和湖南省工業(yè)和信息化廳聯(lián)合主辦的“2025音視頻產(chǎn)業(yè)鏈發(fā)展研討暨對(duì)接會(huì)”在長(zhǎng)沙舉行?;顒?dòng)匯聚音視頻產(chǎn)業(yè)鏈上下游企業(yè),以及長(zhǎng)沙市相關(guān)政府領(lǐng)導(dǎo)與行業(yè)
    的頭像 發(fā)表于 08-27 11:33 ?1347次閱讀
    千視電子受邀亮相2025<b class='flag-5'>音視頻</b>產(chǎn)業(yè)鏈研討會(huì),引領(lǐng)全鏈路<b class='flag-5'>音視頻</b>IP化新趨勢(shì)

    泰芯半導(dǎo)體推出星閃音視頻無線SOC芯片TXW828

    在短距離無線通信技術(shù)加速迭代的浪潮中,珠海泰芯半導(dǎo)體有限公司全球首先發(fā)布支持星閃(NearLink)標(biāo)準(zhǔn)的音視頻無線SOC芯片——TXW828。這款集WiFi/藍(lán)牙BLE/星閃三模融合音視頻無線芯片
    的頭像 發(fā)表于 06-20 15:51 ?2756次閱讀

    樂鑫ESP-RTC實(shí)時(shí)音視頻通信方案

    ESP-RTC樂鑫科技推出ESP-RTC(Real-TimeCommunication)音視頻通信方案,能夠?qū)崿F(xiàn)穩(wěn)定流暢、超低延時(shí)的語(yǔ)音和視頻實(shí)時(shí)通信。ESP-RTC以樂鑫
    的頭像 發(fā)表于 05-26 18:07 ?1616次閱讀
    樂鑫ESP-RTC實(shí)時(shí)<b class='flag-5'>音視頻</b>通信方案

    達(dá)辰威執(zhí)法音視頻管理平臺(tái)全新升級(jí)

    在傳統(tǒng)執(zhí)法場(chǎng)景中,海量音視頻數(shù)據(jù)的存儲(chǔ)、分析和監(jiān)管一直是難題——無效視頻堆積如山、關(guān)鍵信息難以快速提取、執(zhí)法規(guī)范性缺乏實(shí)時(shí)監(jiān)督……在科技賦能執(zhí)法的時(shí)代背景下,達(dá)辰威科技集團(tuán)推出全新升級(jí)的執(zhí)法音視頻
    的頭像 發(fā)表于 05-20 15:06 ?975次閱讀

    中國(guó)音視頻產(chǎn)業(yè)邁向高質(zhì)量發(fā)展

    隨著超高清先鋒計(jì)劃的逐步推進(jìn),截至2024年底,中國(guó)音視頻產(chǎn)業(yè)規(guī)模超5萬億,包括個(gè)人消費(fèi)電子、家庭影音娛樂、行業(yè)多媒體應(yīng)用及車載視聽產(chǎn)業(yè)和相關(guān)衍生應(yīng)用等行業(yè)企業(yè)超過百萬家,音視頻產(chǎn)業(yè)已經(jīng)成為國(guó)家數(shù)字經(jīng)濟(jì)發(fā)展的重要支柱。
    的頭像 發(fā)表于 04-24 11:10 ?1276次閱讀

    音視頻一體化解決方案

    。在應(yīng)急指揮中心、多媒體會(huì)議室、移動(dòng)指揮車、多媒體教室、數(shù)字法庭等場(chǎng)景中,用戶亟需一套高度集成、智能管控、互聯(lián)互通的一體化解決方案,以實(shí)現(xiàn)音視頻信號(hào)的綜合調(diào)度與高效協(xié)作。
    的頭像 發(fā)表于 04-24 09:14 ?1139次閱讀