原创 pjmedia系列之媒體傳輸pjmedia_transport

媒體傳輸封裝了網絡收發細節,pjmedia_transport可以是udp、srtp、ice等,這裏以udp爲例。 結構體pjmedia_transport /** * This structure declares media tr

原创 pjlib系列之線程thread及同步對象

操作系統抽象的API可以屏蔽操作系統特有的操作,使業務代碼方便在不同平臺移植。這部分實現主要是os_開頭的幾個文件,其中最重要的是os_core_unix.c(這裏選擇Linux平臺)。我把這些分拆3類:1、線程Thread和本地線程存儲

原创 pjlib系列之時間time

Linux下的幾種時間 1、精確到秒級 time_t本質上是一個long型 time_t time(time_t *t); //此函數會返回從公元1970年1月1日的UTC時間從0時0分0秒算起到現在所經過的秒數。如果t 並非空指針的話

原创 pjlib系列之數據結構fifobuf

fifobuf是個先進先出的隊列,使用結構體pj_fifobuf_t表示。該結構體四個指針,其中first和last表示緩衝區的起始和結束,這兩個指針初始化一次就不再改變,ubegin和uend指向數據的開始和結束,入隊列時,uend後移

原创 pjlib系列之複用io隊列ioqueue

ioqueue是pjlib的一個精華部分,實現基於Proactor模式的IO複用模型,關於Proactor與Reactor模式,可以參考IO模型。簡單來講,Reactor是監控到事件後,應用自己去讀寫;Proactor模式是檢測到事件後,

原创 pjlib系列之時間戳timestamp

時間戳結構體定義在types.h,本質上是兩個32位加上一個64位。根據宏PJ_HAS_INT64來決定是用一個64位存儲還是用2個32位存儲,該結構體存儲的單位是系統頻率,比如系統頻率是納秒,則pj_timestamp.u32.lo =

原创 pjlib系列之錯誤errno

pjlib提供了一套統一的錯誤碼,都是正數,並且屏蔽各系統的錯誤碼。pjlib的錯誤在文件errno.h errno.c compat/errno.h os_core_unix.c。 錯誤碼範圍分段 /** * PJ_ERRNO_S

原创 pjmedia系列開篇

pjlib系列完結後,開始進入pjmedia系列。pjmedia是多媒體棧,可以把它按照抽象的分解大小分解爲幾個對象,下面通過simpleua.c示例代碼解析這些對象和數據流。 從對象關係來看: 1、 pjmedia_endpt,代表一個

原创 pjlib系列之定時器timer

pjlib的定時器簡介 pjlib定時器是從ACE網絡庫移植過來的。實現在timer.h和timer.c,定時器的原理是有個將來的超時時間,這個時間就是現在時間加上定時器時長。 pjlib定時器使用 1、pj_timer_heap_cre

原创 pjlib系列之網絡ip_helper

本地接口和ip 枚舉本地接口和ip在ip_helper.h和ip_helper_generic.c /** * Enumerate the local IP interfaces currently active in the hos

原创 pjmedia系列之媒體流pjmedia_stream

前面講過,一個會話可以有多個流,比如音頻流、視頻流,這裏講一個音頻流有哪些東西。 媒體流 struct pjmedia_stream { pjmedia_endpt *endpt; /**< Media endp

原创 pjmedia系列之媒體端點pjmedia_endpt

simpleua.c在進行媒體相關初始化時,首先創建媒體端點,看看媒體端點的數據結構和創建流程。 #if PJ_HAS_THREADS status = pjmedia_endpt_create(&cp.factory, NUL

原创 pjmedia系列之媒體設備pjmedia_snd_port

在simpleua.c文件,當協商成功call_on_media_update中,會創建音頻設備對象。 static pjmedia_snd_port *g_snd_port; /* Sound device. */

原创 mini2440系統移植篇之kernel鏈接

鏈接文件在arch/arm/kernel中,由vmlinux.S生成vmlinux.lds SECTIONS { 1、代碼起始段,head段對應arch/arm/kernel/head.o arm/arch/kernel/init_tas

原创 mini2440系統移植篇之kernel啓動流程

1.1. 第1階段 arch/arm/kernel/vmlinux.lds --------------------Makefile   2.1 arch/arm/boot/compressed/start.S 解壓代碼   2.2 a