1. 程式人生 > >EasyRTMP之MP4檔案進行rtmp點播直播推送(三)

EasyRTMP之MP4檔案進行rtmp點播直播推送(三)

前面已經介紹過EasyRTMP,這裡不再多說,可以網上搜索相關內容。

本文講述下基於libEasyRTMP推送庫實現的MP4檔案的直播推送。Github中Demo的下載地址https://github.com/EasyDarwin/EasyRTMP。Demo中EasyRTMP_FILE的工程是將MP4檔案進行解析推送。主要使用MP4Demux進行解析,分別獲取到音訊流和視訊流,再利用libEasyRTMP進行RTMP推送,這樣就可以達到直播或者點播的效果了。

首先獲取音視訊編碼資訊,判斷MP4檔案是否儲存音訊軌和視訊軌

    //從MP4檔案獲取音視訊編碼資訊,填入pusher媒體資訊結構中
    CMp4_avcC_box videoInfo;
    memset
(&videoInfo, 0x00, sizeof(CMp4_avcC_box)); CMp4_mp4a_box audioInfo; memset(&audioInfo, 0x00, sizeof(CMp4_mp4a_box)); int nVideoTrackId = get_video_info_in_moov(g_root, videoInfo ); int nAudioTrackId = get_audio_info_in_moov(g_root, audioInfo );

如果存在音訊軌、視訊軌就起執行緒進行資料流獲取並傳給libEasyRTMP進行推送

    //視訊軌存在
    if (nVideoTrackId>-1)
    {
        mediainfo.u32VideoCodec =   EASY_SDK_VIDEO_CODEC_H264;
        mediainfo.u32VideoFps = 25;
        mediainfo.u32H264SpsLength = videoInfo.sps->sequenceParameterSetLength;
        mediainfo.u32H264PpsLength = videoInfo.pps->pictureParameterSetLength;
if (videoInfo.sps->sequenceParameterSetNALUnit && videoInfo.sps->sequenceParameterSetLength>0 ) { memcpy(mediainfo.u8H264Sps, videoInfo.sps->sequenceParameterSetNALUnit, mediainfo.u32H264SpsLength); } if (videoInfo.pps->pictureParameterSetNALUnit && videoInfo.pps->pictureParameterSetLength>0 ) { memcpy(mediainfo.u8H264Pps, videoInfo.pps->pictureParameterSetNALUnit, mediainfo.u32H264PpsLength ); } g_mp4TrackThread[nVideoTrackId] = (HANDLE)_beginthreadex(NULL, 0, VideoThread, (void*)nVideoTrackId,0,0); g_bThreadLiving[nVideoTrackId] = true; } //音訊軌存在 if (nAudioTrackId>-1) { mediainfo.u32AudioCodec = EASY_SDK_AUDIO_CODEC_AAC; mediainfo.u32AudioSamplerate = audioInfo.samplerate; mediainfo.u32AudioChannel = audioInfo.channelcount; //Create thread to push mp4 demux data( aac) g_mp4TrackThread[nAudioTrackId] = (HANDLE)_beginthreadex(NULL, 0, AudioThread, (void*)nAudioTrackId,0,0); g_bThreadLiving[nAudioTrackId] = true; }

主要的部分就是MP4Demux的使用,Demo中提供了程式碼,可自行學習。

獲取更多資訊

Copyright © EasyDarwin.org 2012-2016

EasyDarwin

相關推薦

EasyRTMPMP4檔案進行rtmp點播直播

前面已經介紹過EasyRTMP,這裡不再多說,可以網上搜索相關內容。 本文講述下基於libEasyRTMP推送庫實現的MP4檔案的直播推送。Github中Demo的下載地址https://github.com/EasyDarwin/EasyRTMP。Demo中

iOS RTMP 視訊直播開發筆記1----- 採集攝像頭影象

這裡簡單說下 iOS 的攝像頭採集。 首先初始化AVCaptureSession,說到Session,有沒有人想到AVAudioSession呢? 12// 初始化 AVCaptureSession_session=[[AVCaptureSession

spring原始碼學習路---深度分析IOC容器初始化過程

分析FileSystemXmlApplicationContext的建構函式,到底都做了什麼,導致IOC容器初始化成功。 public FileSystemXmlApplicationContext(String[] configLocations, boolean ref

Django模型層,單,多表操作

一:多表操作之增、刪、改   1.1:增:   一對多:   方式1:     publish_obj=Publish.objects.get(nid=1)     book_obj=Book.objects.create(title="海爾兄弟",publi

配置專案構建完成後檔案移動---- Jenkins自動化部署學習筆記

  在前兩篇文章中,跟大家分享了在 Windows 系統上安裝 Jenkins 和使用 Jenkins 進行 Android 專案的編譯打包;相信可能會有人疑問,打包完成之後,我需要將 apk 檔案放入指定位置怎麼辦。   其實,Jenkins 功能很強大,它可以配置在打包完成之後將

iOS --工作餘小總結聊天APNS原理

最近有人問我關於推送的原理,正好有時間就做一下整理。 公司需要,最近用環信和BMOB伺服器寫了一個簡單的聊天Demo,其中在離線接收聊天資訊的時候,用到了蘋果的推送功能,藉此機會,我簡單說一下推送的原理。 有使用者A和使用者B兩個使用者之間通訊,其實並不是兩個使用者之間相互通訊,而是

【Kaggle-MNIST路】CNN+改進過的損失函式

簡述 在上一個版本上的家裡CNN的框架。 呼叫了上面的框架。 目前: 分數:0.9160 排名:2400+ 框架程式碼 import pandas as pd import torch.utils

SpringMVCWeb引入靜態資源與規範請求字尾

1.Spring3+以上的版本可以直接在springmvc-servlet.xml裡面直接設定:     <mvc:annotation-driven />        <mvc

Android 使用Rtmp音視訊002

前言 本文介紹的是使用Android攝像頭、麥克風採集的音、視訊進行編碼。然後通過librtmp推送到流媒體伺服器上的功能。  我所使用的環境:Android Studio 2.2.3 、NDK13。 流程 使用到的Api 音視訊採集用到的api有:Camera、AudioRecord編

1小時學會:最簡單的iOS直播yuv、pcm資料的介紹和獲取

最簡單的iOS 推流程式碼,視訊捕獲,軟編碼(faac,x264),硬編碼(aac,h264),美顏,flv編碼,rtmp協議,陸續更新程式碼解析,你想學的知識這裡都有,願意懂直播技術的同學快來看!! 前面介紹瞭如何通過相機實時獲取音視訊資

1小時學會:最簡單的iOS直播h264/aac 硬編碼

最簡單的iOS 推流程式碼,視訊捕獲,軟編碼(faac,x264),硬編碼(aac,h264),美顏,flv編碼,rtmp協議,陸續更新程式碼解析,你想學的知識這裡都有,願意懂直播技術的同學快來看!! 前面已經介紹瞭如何從硬體裝置獲取到音視

1小時學會:最簡單的iOS直播flv 編碼與音視訊時間戳同步

最簡單的iOS 推流程式碼,視訊捕獲,軟編碼(faac,x264),硬編碼(aac,h264),美顏,flv編碼,rtmp協議,陸續更新程式碼解析,你想學的知識這裡都有,願意懂直播技術的同學快來看!! 前文介紹瞭如何獲取音視訊的aac/h2

android訊息——XMPP協議

XMPP協議 XMPP協議,中文名為可擴充套件通訊和表示協議,是一種以XML為基礎的開放式實時通訊協議,它將需要實時通訊的訊息嵌入到XML結構體中,不僅具有很好的可擴充套件性,還有較強的可讀性。 XM

spring boot 整合activemq 進行服務端訊息web頁面

最近公司的專案裡有需要服務端向web端實時推送訊息的需求,網上搜索了一番,有前端頁面通過定時任務向後臺傳送ajax請求重新整理,有使用第三方提供的訊息服務(GoEasy),前者因為會有很多請求是無用的,容易加大伺服器負荷造成宕機,後者現在收費了(免費的也只能用一

【黑馬程式設計師】Objective-C語言學習筆記物件的建立、使用和方法呼叫

--------------------------------------------IOS期待與您交流!-------------------------------------------- 一、物件的建立 物件是由類建立,我們使用上一文章用到的類來建立物件。 說明:

nginx-rtmp-module的缺陷分析

VHOST(虛擬主機)就是一址多域的意思,主流的Web伺服器都有這個功能,它解決了執行Web的主機在同一個IP地址情況下可以為不同

WPF Binding 對資料的校驗與轉換

# 一、前言 ​ Binding 的作用就是架在 **Source** 和 **Target** 之間的橋樑,資料可以在這座橋樑的幫助下來流通。就像現實中的橋樑會設定一些關卡進行安檢一樣,Binding 這座橋上也可以設定關卡對資料的有效性進行校驗。不僅如此,當兩端要求使用不同的資料型別時,我

Android平臺使用EasyRTMP將RTSP轉RTMP進行RTMP直播

介紹 目前安防行業很多IP Camera只提供了RTSP播放地址,不支援RTMP協議,很難接入目前流行的網際網路直播中來。就需要一個程式或工具能夠將實時RTSP流轉成RTMP推送。EasyDarwin團隊提供過EasyRTMP_RTSP的Demo(下載地址ht

EasyRTMP手機直播rtmp流flash無法正常播放問題

問題簡介 EasyRTMP是EasyDarwin團隊開發的一套簡單易用的RTMP推送SDK。本文想講述下開發過程中遇到的一個問題。問題的現象是使用EasyRTMP推送音視訊流到自己搭建的nginx-rtmp伺服器,使用ffplay和vlc播放器都

網頁視訊MP4檔案解析

為了研究如何把H264打包成fMp4檔案,今天先開始研究如何從fMp4中解析出H264資料。fMP4包括ftype+moov+(moof+mdat)*N這種格式組成。Box的定義:ftyp格式:上碼流:size:00 00 00 1C  ===>28type: 66 7