日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
創(chuàng)新互聯(lián)鴻蒙OS教程:鴻蒙OS視頻編解碼開發(fā)指導(dǎo)

場(chǎng)景介紹

成都創(chuàng)新互聯(lián)長(zhǎng)期為近千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為子長(zhǎng)企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)、網(wǎng)站制作,子長(zhǎng)網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

視頻編解碼的主要工作是將視頻進(jìn)行編碼和解碼。

接口說明

接口名 功能描述
createDecoder() 創(chuàng)建解碼器Codec實(shí)例。
createEncoder() 創(chuàng)建編碼器Codec實(shí)例。
registerCodecListener(ICodecListener listener) 注冊(cè)偵聽器用來異步接收編碼或解碼后的數(shù)據(jù)。
setSource(Source source, TrackInfo trackInfo) 根據(jù)解碼器的源軌道信息設(shè)置數(shù)據(jù)源,對(duì)于編碼器trackInfo無效。
setSourceFormat(Format format) 編碼器的管道模式下,設(shè)置編碼器編碼格式。
setCodecFormat(Format format) 普通模式設(shè)置編/解碼器參數(shù)。
setVideoSurface(Surface surface) 設(shè)置解碼器的Surface。
getAvailableBuffer(long timeout) 普通模式獲取可用ByteBuffer。
writeBuffer(ByteBuffer buffer, BufferInfo info) 推送源數(shù)據(jù)給Codec。
getBufferFormat(ByteBuffer buffer) 獲取輸出Buffer數(shù)據(jù)格式。
start() 啟動(dòng)編/解碼。
stop() 停止編/解碼。
release() 釋放所有資源。

普通模式開發(fā)步驟

在普通模式下進(jìn)行編解碼,應(yīng)用必須持續(xù)地傳輸數(shù)據(jù)到 Codec 實(shí)例。

編碼的具體開發(fā)步驟如下

  1. 創(chuàng)建編碼 Codec 實(shí)例,可調(diào)用 createEncoder() 創(chuàng)建。
   final Codec encoder = Codec.createEncoder();

  1. 構(gòu)造數(shù)據(jù)源格式,并設(shè)置給 Codec 實(shí)例,調(diào)用 setCodecFormat(),代碼示例如下:
   Format fmt = new Format();
   fmt.putStringValue(Format.MIME, Format.VIDEO_AVC);
   fmt.putIntValue(Format.WIDTH, 1920);
   fmt.putIntValue(Format.HEIGHT, 1080);
   fmt.putIntValue(Format.BIT_RATE, 392000);
   fmt.putIntValue(Format.FRAME_RATE, 30);
   fmt.putIntValue(Format.FRAME_INTERVAL, -1);
   codec.setCodecFormat(fmt);

  1. 如果需要編碼過程中,檢測(cè)是否讀取到 Buffer 數(shù)據(jù)以及是否發(fā)生異常,可以構(gòu)造 ICodecListener, ICodecListener 需要實(shí)現(xiàn)兩個(gè)方法,實(shí)現(xiàn)讀到 Buffer 數(shù)據(jù)時(shí)、編碼發(fā)生異常時(shí)做相應(yīng)的操作。舉例中讀到 buffer 時(shí),獲取 buffer 的 format 格式,異常時(shí)拋出運(yùn)行時(shí)異常,代碼示例如下:
   Codec.ICodecListener listener = new Codec.ICodecListener() {
       @Override
       public void onReadBuffer(ByteBuffer byteBuffer, BufferInfo bufferInfo, int trackId) {
           Format fmt = codec.getBufferFormat(byteBuffer);
       }

    
       @Override
       public void onError(int errorCode, int act, int trackId) {
           throw new RuntimeException();
       }
   };

  1. 調(diào)用 start() 方法開始編碼。
  1. 調(diào)用 getAvailableBuffer() 取到一個(gè)可用的 ByteBuffer,把數(shù)據(jù)填入 ByteBuffer 里,然后再調(diào)用 writeBuffer() 把 ByteBuffer 寫入編碼器實(shí)例。
  1. 調(diào)用 stop() 方法停止編碼。
  1. 編碼任務(wù)結(jié)束后,調(diào)用 release() 釋放資源。

解碼的具體開發(fā)步驟如下:

  1. 創(chuàng)建解碼 Codec 實(shí)例,可調(diào)用 createDecoder() 創(chuàng)建。
  1. 構(gòu)造數(shù)據(jù)源格式,并設(shè)置給 Codec 實(shí)例,調(diào)用 setCodecFormat(),代碼示例如下:
   Format fmt = new Format();
   fmt.putStringValue(Format.MIME, Format.VIDEO_AVC);
   fmt.putIntValue(Format.WIDTH, 1920);
   fmt.putIntValue(Format.HEIGHT, 1080);
   fmt.putIntValue(Format.BIT_RATE, 392000);
   fmt.putIntValue(Format.FRAME_RATE, 30);
   fmt.putIntValue(Format.FRAME_INTERVAL, -1);
   codec.setCodecFormat(fmt);

  1. (可選)如果需要解碼過程中,檢測(cè)是否讀取到 Buffer 數(shù)據(jù)以及是否發(fā)生異常,可以構(gòu)造 ICodecListener,ICodecListener 需要實(shí)現(xiàn)兩個(gè)方法,實(shí)現(xiàn)讀到 Buffer 數(shù)據(jù)時(shí)、解碼發(fā)生異常時(shí)做相應(yīng)的操作。舉例中讀到 buffer 時(shí),獲取 buffer 的 format 格式,異常時(shí)拋出運(yùn)行時(shí)異常,代碼示例如下:
   Codec.ICodecListener listener = new Codec.ICodecListener() {
       @Override
       public void onReadBuffer(ByteBuffer byteBuffer, BufferInfo bufferInfo, int trackId) {
           Format fmt = codec.getBufferFormat(byteBuffer);
       }

    
       @Override
       public void onError(int errorCode, int act, int trackId) {
           throw new RuntimeException();
       }
   };

  1. 調(diào)用 start() 方法開始解碼。
  1. 調(diào)用 getAvailableBuffer 取到一個(gè)可用的 ByteBuffer,把數(shù)據(jù)填入 ByteBuffer 里,然后再調(diào)用 writeBuffer 把 ByteBuffer 寫入解碼器實(shí)例。
  1. 調(diào)用 stop() 方法停止解碼。
  1. 解碼任務(wù)結(jié)束后,調(diào)用 release() 釋放資源。

管道模式開發(fā)步驟

管道模式下應(yīng)用只需要調(diào)用 Source 類的 setSource() 方法,數(shù)據(jù)會(huì)自動(dòng)解析并傳輸給 Codec 實(shí)例。管道模式編碼支持視頻流編碼和音頻流編碼。

編碼的具體開發(fā)步驟如下:

  1. 調(diào)用 createEncoder() 創(chuàng)建編碼 Codec 實(shí)例。
  1. 調(diào)用 setSource() 設(shè)置數(shù)據(jù)源,支持設(shè)定文件路徑或者文件 File Descriptor。
  1. 構(gòu)造數(shù)據(jù)源格式或者從 Extractor 中讀取數(shù)據(jù)源格式,并設(shè)置給 Codec 實(shí)例,調(diào)用 setSourceFormat(),構(gòu)造數(shù)據(jù)原格式代碼示例如下:
   Format fmt = new Format();
   fmt.putStringValue(Format.MIME, Format.VIDEO_AVC);
   fmt.putIntValue(Format.WIDTH, 1920);
   fmt.putIntValue(Format.HEIGHT, 1080);
   fmt.putIntValue(Format.BIT_RATE, 392000);
   fmt.putIntValue(Format.FRAME_RATE, 30);
   fmt.putIntValue(Format.FRAME_INTERVAL, -1);
   codec.setSourceFormat(fmt);

  1. (可選)如果需要編碼過程中,檢測(cè)是否讀取到 Buffer 數(shù)據(jù)以及是否發(fā)生異常,可以構(gòu)造 ICodecListener,ICodecListener 需要實(shí)現(xiàn)兩個(gè)方法,實(shí)現(xiàn)讀到 Buffer 數(shù)據(jù)時(shí)、編碼發(fā)生異常時(shí)做相應(yīng)的操作。舉例中讀到 buffer 時(shí),獲取 buffer 的 format 格式,異常時(shí)拋出運(yùn)行時(shí)異常,代碼示例如下:
   Codec.ICodecListener listener = new Codec.ICodecListener() {
       @Override
       public void onReadBuffer(ByteBuffer byteBuffer, BufferInfo bufferInfo, int trackId) {
           Format fmt = codec.getBufferFormat(byteBuffer);
       }

    
       @Override
       public void onError(int errorCode, int act, int trackId) {
           throw new RuntimeException();
       }
   };

  1. 調(diào)用 start() 方法開始編碼。
  1. 調(diào)用 stop() 方法停止編碼。
  1. 編碼任務(wù)結(jié)束后,調(diào)用 release() 釋放資源。

解碼的具體開發(fā)步驟如下:

  1. 調(diào)用 createDecoder()創(chuàng)建解碼 Codec 實(shí)例。
  1. 調(diào)用 setSource()設(shè)置數(shù)據(jù)源,支持設(shè)定文件路徑或者文件 File Descriptor。
  1. (可選)如果需要解碼過程中,檢測(cè)是否讀取到 Buffer數(shù)據(jù)以及是否發(fā)生異常,可以構(gòu)造 ICodecListener,ICodecListener 需要實(shí)現(xiàn)兩個(gè)方法,實(shí)現(xiàn)讀到 Buffer 數(shù)據(jù)時(shí)、解碼發(fā)生異常時(shí)做相應(yīng)的操作。舉例中讀到 buffer 時(shí),獲取 buffer 的 format 格式,異常時(shí)拋出運(yùn)行時(shí)異常,代碼示例如下:
   Codec.ICodecListener listener = new Codec.ICodecListener() {
       @Override
       public void onReadBuffer(ByteBuffer byteBuffer, BufferInfo bufferInfo, int trackId) {
           Format fmt = codec.getBufferFormat(byteBuffer);
       }

    
       @Override
       public void onError(int errorCode, int act, int trackId) {
           throw new RuntimeException();
       }
   };

  1. 調(diào)用 start() 方法開始解碼。
  1. 調(diào)用 stop() 方法停止解碼。
  1. 解碼任務(wù)結(jié)束后,調(diào)用 release() 釋放資源。

名稱欄目:創(chuàng)新互聯(lián)鴻蒙OS教程:鴻蒙OS視頻編解碼開發(fā)指導(dǎo)
路徑分享:http://www.5511xx.com/article/cddeiho.html