1. 程式人生 > >FFMEPG 平臺移植,介面簡化和外部模組接入 (四)ffmpeg android移植(ffmpeg 視訊編碼)

FFMEPG 平臺移植,介面簡化和外部模組接入 (四)ffmpeg android移植(ffmpeg 視訊編碼)

FFMPEG 視訊編碼最常見的H264,H265需要X264,X265外部模組支援,可以從我們開源平臺的FFMPEG編譯專案裡面獲取程式碼和配置進行一鍵式編譯:https://github.com/Car-eye-team/Car-eye-FFMPEG,我們下面的程式碼主要是為了簡化程式碼呼叫結構。只需要配置引數,輸入資料就可以進行視訊編碼,不多說,貼上程式碼:

  1. /* 
  2.  * Car eye 車輛管理平臺: www.car-eye.cn 
  3.  * Car eye 開源網址: https://github.com/Car-eye-team 
  4.  * CarEyeEncoderAPI.h 
  5.  * 
  6.  * Author: Wgj 
  7.  * Date: 2018-04-29 20:01 
  8.  * Copyright 2018 
  9.  * 
  10.  * CarEye 媒體編碼庫介面宣告 
  11.  */
  12. #ifndef __CAREYE_ENCODER_H__
  13. #define __CAREYE_ENCODER_H__
  14. #include "public.h"
  15.  // 編碼器物件控制代碼定義
  16. #define CarEye_Encoder_Handle void*
  17.  // 最大音訊幀大小 1 second of 48khz 32bit audio
  18. #define MAX_AUDIO_FRAME_SIZE 192000
  19.  // 媒體編碼型別定義 與FFMPEG中一一對應,H265定義與其他庫定義需要轉換
  20.   enum
     CarEye_CodecType  
  21. {  
  22.     // 不進行編碼
  23.     CAREYE_CODEC_NONE = 0,  
  24.     // H264編碼
  25.     CAREYE_CODEC_H264 = 0x1C,  
  26.     // H265編碼
  27.     CAREYE_CODEC_H265 = 0xAE,  
  28.     // MJPEG編碼
  29.     CAREYE_CODEC_MJPEG = 0x08,  
  30.     // MPEG4編碼
  31.     CAREYE_CODEC_MPEG4 = 0x0D,  
  32.     // AAC編碼
  33.     CAREYE_CODEC_AAC = 0x15002,  
  34.     // G711 Ulaw編碼 對應FFMPEG中的AV_CODEC_ID_PCM_MULAW定義
  35.     CAREYE_CODEC_G711U = 0x10006,  
  36.     // G711 Alaw編碼 對應FFMPEG中的AV_CODEC_ID_PCM_ALAW定義
  37.     CAREYE_CODEC_G711A = 0x10007,  
  38.     // G726編碼 對應FFMPEG中的AV_CODEC_ID_ADPCM_G726定義
  39.     CAREYE_CODEC_G726 = 0x1100B,  
  40. };  
  41. // YUV視訊流格式定義,與FFMPEG中一一對應
  42. enum CarEye_AVType  
  43. {  
  44.     CAREYE_FMT_YUV420P = 0,  
  45.     CAREYE_FMT_YUV422P = 4,  
  46.     CAREYE_FMT_YUV444P = 5,  
  47.     CAREYE_FMT_YUV410P = 6,  
  48.     CAREYE_FMT_YUV411P = 7,  
  49. };  
  50. // 原始流結構定義
  51. typedefstruct CarEye_OriginalStream  
  52. {  
  53.     // 視訊輸入流格式
  54.     enum CarEye_AVType InVideoType;  
  55.     // 期望輸出的視訊流格式,不期望輸出可設定為CAREYE_CODEC_NONE
  56.     enum CarEye_CodecType OutVideoType;  
  57.     // 期望輸出的音訊流格式,不期望輸出可設定為CAREYE_CODEC_NONE
  58.     enum CarEye_CodecType OutAudioType;  
  59.     // 視訊幀率(FPS),推薦值:25
  60.     unsigned char   FramesPerSecond;  
  61.     // 視訊寬度畫素
  62.     unsigned short  Width;  
  63.     // 視訊的高度畫素
  64.     unsigned short  Height;  
  65.     // 一組圖片中的圖片數量,推薦值:10
  66.     int             GopSize;  
  67.     // 非B幀之間的B幀的最大數量,推薦值:1
  68.     int             MaxBFrames;  
  69.     // 視訊位元速率,越高視訊越清楚,相應體積也越大 如:4000000
  70.     float           VideoBitrate;  
  71.     // 音訊取樣率 如:44100
  72.     unsigned int    SampleRate;  
  73.     // 音訊位元率 如:64000,越高聲音越清楚,相應體積也越大
  74.     float           AudioBitrate;  
  75. }CarEye_OriginalStream;  
  76. // YUV媒體流結構定義
  77. #ifdef __cplusplus
  78. extern"C"
  79. {  
  80. #endif
  81.     /* 
  82.     * Comments: 建立一個編碼器物件 
  83.     * Param aInfo: 要編碼的媒體資訊 
  84.     * @Return CarEye_Encoder_Handle 成功返回編碼器物件,否則返回NULL 
  85.     */
  86.     CE_API CarEye_Encoder_Handle CE_APICALL CarEye_EncoderCreate( CarEye_OriginalStream aInfo);  
  87.     /* 
  88.     * Comments: 釋放編碼器資源 
  89.     * Param aEncoder: 要釋放的編碼器 
  90.     * @Return None 
  91.     */
  92.     CE_API void CE_APICALL CarEye_EncoderRelease(CarEye_Encoder_Handle aEncoder);  
  93.     /* 
  94.     * Comments: 將輸入YUV視訊編碼為設定好的格式資料輸出 
  95.     * Param aEncoder: 申請到的有效編碼器 
  96.     * Param aYuv: 要編碼的YUV資料 
  97.     * Param aPts: 當前視訊幀序號 
  98.     * Param aBytes: [輸出]編碼後的視訊流 
  99.     * @Return int < 0編碼失敗,> 0為編碼後資料位元組個數 ==0表示引數無效 
  100.     */
  101.     CE_API int CE_APICALL CarEye_EncoderYUV(CarEye_Encoder_Handle aEncoder,  
  102.                                     CarEye_YUVFrame *aYuv, int aPts,  
  103.                                     unsigned char *aBytes);  
  104.     /* 
  105.     * Comments: 獲取PCM編碼時接受的最大位元組數 
  106.     * Param aEncoder: 申請到的有效編碼器 
  107.     * @Return PCM編碼緩衝區最大位元組數 
  108.     */
  109.     CE_API int CE_APICALL CarEye_GetPcmMaxSize(CarEye_Encoder_Handle aEncoder);  
  110.     /* 
  111.     * Comments: 將輸入的PCM音訊編碼為指定資料格式輸出 
  112.     * Param aEncoder: 申請到的有效編碼器 
  113.     * Param aPcm: 要編碼的PCM資料 
  114.     * Param aSize: 要編碼音訊流位元組數 
  115.     * Param aBytes: [輸出] 編碼後的音訊流 
  116.     * Param aPts: 當前編碼幀的序號 
  117.     * @Return int < 0編碼失敗,> 0為編碼後PCM的位元組個數 ==0表示引數無效 
  118.     */
  119.     CE_API int CE_APICALL CarEye_EncoderPCM(CarEye_Encoder_Handle aEncoder,  
  120.                                     unsigned char *aPcm, int aSize, int aPts,  
  121.                                     unsigned char *aBytes);  
  122. #ifdef __cplusplus
  123. }  
  124. #endif
  125. #endif
  1. /* 
  2.  * Car eye 車輛管理平臺: www.car-eye.cn 
  3. 相關推薦

    FFMEPG 平臺移植介面簡化外部模組接入 ffmpeg android移植(ffmpeg 視訊編碼)

    FFMPEG 視訊編碼最常見的H264,H265需要X264,X265外部模組支援,可以從我們開源平臺的FFMPEG編譯專案裡面獲取程式碼和配置進行一鍵式編譯:https://github.com/Car-eye-team/Car-eye-FFMPEG,我們下面的程式碼主要是為了簡化程式碼呼叫結構。只需要配置

    FFMEPG 平臺移植介面簡化外部模組接入 ffmpeg android移植(ndk 編譯)

    Car-eye-FFMPEG專案是Car-eye 開源平臺的一個新專案,目的是在FFMPEG專案和其外部模組,如freetype,X264的基礎上建立一個多平臺編譯,介面呼叫簡單的工具集。本部落格是一個連載,首先從android開始寫吧。因為FFMPEG本身對android編譯

    STM32 標準韌體庫的下載檔案介紹工程的建立綜合

    前言 博文基於ARM Cortex-M3核心的STM32F103ZET6晶片和標準3.5.0庫; 博文介紹標準庫中個資料夾的含義和以及一個簡單工程的建立; 如有不足之處還請博友多多指教; 標準庫的下

    不要慫就是GAN (生成式對抗網路) :訓練測試 GAN

    在 /home/your_name/TensorFlow/DCGAN/ 下新建檔案 train.py,同時新建資料夾 logs 和資料夾 samples,前者用來儲存訓練過程中的日誌和模型,後者用來儲存訓練過程中取樣器的取樣圖片,在 train.py 中輸入如下程式碼:

    基於Ubuntu Server 16.04 LTS版本安裝部署Django之:安裝MySQL數據庫

    ins cli 遠程訪問 lib root 版本 連接 str ibm 1.安裝mysql以及插件: sudo apt-get install mysql-server mysql-client sudo apt-get install libmysqld-devsud

    ASP.NET Core MVC Visual Studio入門新增模型

    ASP.NET Core MVC 和 Visual Studio入門(四)新增模型   Rick Anderson 和Tom Dykstra   在要節中將新增一些在資料庫中管理電影的類,這些類將成為MVC應用的“Model(模型)”部分。 這些類將與Enti

    Fluentd日誌處理-插件使用調試問題

    logstash health grep have gin data mdb eth -i fluentd一些插件的使用 geoip的配置模版 <filter request> @type geoip geoip_lookup_keys ip bac

    人臉驗證--CenterLoss損失函式改進原因 人臉驗證--CenterLoss

    轉 人臉驗證(四)--CenterLoss 2017年12月10日 11:44:31 EasonApp 閱讀數:918

    SpringCloud微服務雲架構構建B2B2C電子商務平臺之-企業分散式微服務雲架構構建

    今天正式給大家介紹了Spring Cloud - 企業分散式微服務雲架構構建,我這邊結合了當前大部分企業的通用需求,包括技術的選型比較嚴格、苛刻,不僅要用業界最流行的技術,還要和國際接軌,在未來的5~10年內不能out。作為公司的架構師,也要有一種放眼世界的眼光,不僅要給公司做好的技術選型,而且還要快速響應企

    Apache Kafka入門教程輕鬆學-第章 Kafka核心元件流程-設計-原理副本管理器

    本入門教程,涵蓋Kafka核心內容,通過例項和大量圖表,幫助學習者理解,任何問題歡迎留言。 目錄: 本章簡單介紹了副本管理器,副本管理器負責分割槽及其副本的管理。副本管理器具體的工作流程可以參考牟大恩所著的《Kafka入門與實踐》。 副本管理器 副本機制使得kafka

    領域驅動設計讓程式設計師心中有碼

    #領域驅動設計,讓程式設計師心中有碼(四) ----------------------追憶有關分層的古老往事          我一直認為,程式設計師也是藝術家,他們撰寫的每一行程式碼,是獻給這大好世界的優美詩篇。不同的人,寫的程式碼也許風格迥

    安裝Centos7 、 Mysql8 叢集實現讀寫分離 高可用-- MyCat讀寫分離

    零、說在前面    先吐個槽,這點東西折騰了我四五天,最後還是一條告警拯救了我,下面進入正文    看了幾個MySQL的讀寫分離的中介軟體,貌似這個是比較流行的一個,雖然我不是BAT的粉絲,但是有好用的

    我所理解的Android模組——常見問題注意事項

       關於Android模組化,前面已經寫了三篇文章,沒有了解的大家可以先去看一下,附上鍊接地址:   下面主要來說一下Android模組化過程中的常見問題和注意事項: 注意事項   記得在一篇技術部落格中看到微信Tinker的開發人員說過一句話

    百度地圖openlayers融合封裝之demo展示

    2018.5.28 --11:31 wmap的目的是減少地圖開發的成本和時間。  如果你需要進行地圖開發,覺的百度地圖和openlayers的api文件晦澀難懂(主要是openlayers的api很難懂,百度api入門很簡單),可以使用wmap。你不需要去學習百度地圖api

    小程式成長之路_引入小程式自帶icon 引用阿里圖示

    上篇我們已經成功填加tabBar,那麼我們這篇就講解一下 引用圖示icon,小程式裡有自己的圖示供大家使用,但是圖示有限,有很多都滿足不了我們的需求。這次呢 給大家介紹一下阿里圖示,裡面有大量的圖示供你選擇, 下面我就給大家介紹兩種引用icon的方法 , 引用小程式自帶

    OpenStackkilo介面dashboard的二次開發-國際化

    openstack介面支援英語、簡體中文、繁體中文等多種語言。使用者可以在使用者設定中進行設定。如果要對openstack進行二次開發,那麼就一定要對介面上的標題、提示的內容等進行修改。 國際化 國際化 看下面兩幅圖,分別是簡體中文、

    【Oracle 叢集】ORACLE DATABASE 11G RAC 知識圖文詳細教程之快取融合技術主要後臺程序

          前面已經介紹了 RAC 的後臺程序,為了更深入的瞭解這些後臺程序的工作原理,先了解一下 RAC 中多節點對共享資料檔案訪問的管理是如何進行的。要了解 RAC 工作原理的中心,需要知道 Cache Fusion 這個重要的概念,要發揮 Cache Fusion 的作用,要有一個前提條件,那就

    不要急我與你一起學習JSP——JSP的基礎語法【二】

    近幾天,我的 ADSL 上不了網了。幾乎在家裡,只能買碟看片。世界上有什麼大事,論壇中有多少 MM 灌水我都不知道。本來說,這帖要在週三時發出來。沒想到的是,昨天聯通公司才把網解決。10010的客服,我從回家開始打,一直打到夜裡12點,都沒人理。哎。。。 上次我們講到了

    Spring原始碼深度解析總結6—— 配置檔案的讀取Bean的載入

    經過前面的分析,我們終於結束了對XML配置檔案的解析,接下來將會面對更大的挑戰,就是對bean載入的探索。bean載入的功能的實現遠比bean的解析複雜的多,同樣,我們還是以最簡單的示例為基礎,對於bean的功能,在Spring中的呼叫方式為:MyTestBean bean

    玩轉extjs5之Ext.data.ModelExt.data.Store

    一、Ext.data.Model        (1)Model代表應用程式管理的一些物件。例如,我們可能會為 我們想在系統中建模的現實世界中的一些物體像使用者、產品和汽車等定義一個Model。這些Model在 模型管理器中註冊,被Store使用, 而這些Store又被許多