魔力宝贝怀旧柯村法师:Android oepncore H264拍传demo

来源:百度文库 编辑:九乡新闻网 时间:2024/05/02 17:51:01

Android oepncore H264拍传demo [复制链接]

ShouYanWang
  • 发短消息
  • 加为好友
ShouYanWang 当前离线
注册时间
2011-3-15 
最后登录
2011-10-5 
阅读权限
200 
积分
1354 
精华
帖子
366 

楼主 发表于 2011-5-13 14:10 |只看该作者 |倒序浏览 |打印 .pcb{margin-right:0}今天非常的开心,从opencore里面提取出了H264的编解码库,大概琢磨了1-2天的样子才明白里面的编解码库是怎么玩的。

然后顺手写了一个demo,手机自编自解,用自己的手机三星i9000测试,效果是非常的好.

给大家截取个效果图:
2011-5-13 14:02 上传下载附件 (36.24 KB)

左上角是预览图像,右下角是解码显示的图像,大家对比下,效果如何,最主要的是编码的效率和解码的效率得到了保证

176*144的每秒20帧左右的效率完成没有问题.

编解码都是从opencore里面提取出来的,中途改动的过程比较的大。收藏0 分享0 支持0 反对0 点评回复 引用

举报 返回顶部

dkr
  • 发短消息
  • 加为好友
dkr 当前离线
注册时间
2011-5-2 
最后登录
2011-6-25 
阅读权限
20 
积分
85 
精华
帖子

, 积分 85, 距离下一级还需 115 积分 沙发 发表于 2011-5-16 10:32 |只看该作者 所以這邊你的作法是用 opencore 裡面 software 的 encoding/decodig 來作? 我想知道為何樓主不試著採用硬件編解碼的原因?最近也在作相關的研究,由於想要做的解析度比較高,所以單純用 software encoding/decoding 應該沒辦法達到理想的結果,還是硬體編碼比較有力。点评回复 引用

举报 返回顶部

ShouYanWang
  • 发短消息
  • 加为好友
ShouYanWang 当前离线
注册时间
2011-3-15 
最后登录
2011-10-5 
阅读权限
200 
积分
1354 
精华
帖子
366 

板凳 发表于 2011-5-16 13:09 |只看该作者 回复 dkr 的帖子

你的意思是从MediaRecorder中提取出H264的帧?很希望结交下朋友,共同探讨下相关的实现点评回复 引用

举报 返回顶部

dkr
  • 发短消息
  • 加为好友
dkr 当前离线
注册时间
2011-5-2 
最后登录
2011-6-25 
阅读权限
20 
积分
85 
精华
帖子

, 积分 85, 距离下一级还需 115 积分 地板 发表于 2011-5-16 14:25 |只看该作者 對, 我現在想要朝的方向主要是參考 http://blog.csdn.net/zblue78/archive/2010/12/18/6083374.aspx 這篇的作法來提出 h264 的 frame. 不過相同的作法在 decoding 則沒辦法,Android 目前 MediaPlayer 不提供類似的作法. 當然除了這之外還有不少問題,不過現在想先來解決 decoding 的問題.

或是你所移植的 opencore 有可能可以利用硬體編解碼嗎? 如果你是用 i9000, 那用的 cpu 應該是 s5pc110 這顆.

底下的這個連結
http://dev.odroid.com/sigong/nf_file_board/nfile_board.php

當中, 有 odroid-7 的 Android source code, 這是一個用 s5pc110 的開發平板。代碼當中當中有 s5pc110 利用他的 Multi Format Codec 來作 encoding/decoding 的部份,不知道對你目前有沒有幫助. 希望有機會多多交流!点评回复 引用

举报 返回顶部

androidTan
  • 发短消息
  • 加为好友
androidTan 当前离线
注册时间
2011-5-16 
最后登录
2011-8-3 
阅读权限
10 
积分
33 
精华
帖子

, 积分 33, 距离下一级还需 17 积分 5# 发表于 2011-5-16 16:01 |只看该作者 顶一个,楼主。希望有时间和你一起探讨点评回复 引用

举报 返回顶部

ShouYanWang
  • 发短消息
  • 加为好友
ShouYanWang 当前离线
注册时间
2011-3-15 
最后登录
2011-10-5 
阅读权限
200 
积分
1354 
精华
帖子
366 

6# 发表于 2011-5-16 16:21 |只看该作者 回复 dkr 的帖子

恩,good,那篇帖子的核心其实在于哪里呢,在于如何知道Slice Nalude长度,然后自己在添加H264的SPS,和PPS就是一个I帧呢,后面的帧就没有必要添加SPS和PPS,那个还真是一个非常麻烦的事情,因为最后一个Nale的有很多片,不知道片得长度是多少
点评回复 引用

举报 返回顶部

ShouYanWang
  • 发短消息
  • 加为好友
ShouYanWang 当前离线
注册时间
2011-3-15 
最后登录
2011-10-5 
阅读权限
200 
积分
1354 
精华
帖子
366 

7# 发表于 2011-5-16 16:32 |只看该作者 回复 dkr 的帖子

硬编获取H264数据的法子,MediaRecorder借住localsocket获取H264那块编码出来的数据源跟opencore里面的H264编码部分有很多相似之处点评回复 引用

举报 返回顶部

dkr
  • 发短消息
  • 加为好友
dkr 当前离线
注册时间
2011-5-2 
最后登录
2011-6-25 
阅读权限
20 
积分
85 
精华
帖子

, 积分 85, 距离下一级还需 115 积分 8# 发表于 2011-5-20 10:23 |只看该作者 不好意思今天才回, 這幾天有其他事情要忙. 我自己對 h264 的編碼還不是很熟悉,所以現在也正在分析 h264 的檔案當中. 希望這幾天會有個結果來. 本業不是作跟視訊有關的實在是有但麻煩, 可不可以請你來分享一下你本身在做 h264 方面的研究時有哪些比較有系統的方法呢?点评回复 引用

举报 返回顶部

ShouYanWang
  • 发短消息
  • 加为好友
ShouYanWang 当前离线
注册时间
2011-3-15 
最后登录
2011-10-5 
阅读权限
200 
积分
1354 
精华
帖子
366 

9# 发表于 2011-5-20 10:48 |只看该作者 回复 dkr 的帖子

看那个新一代视频压缩标准和X264的源码,我也是看了好长的时候才弄明白怎么去看新一代视频压缩标准这本书,写的非常的经典,就是非常的杂乱,而且我也看了下,代码人生写的那个用本地存储的方式来实现,感觉实现的可行性不是很大,或者耗费的时间非常的长,因为中间的码流表现的很无序,都没有NALU的起始码和相关的一些信息。

还有就是看我提供的opencore的编码的源码,那里面的源码我已经完成了语法上的移植了,在外面再多加一层使用接口就可以直接使用了,我就是在那层基础上弄出来的,下载地址是:

http://www.shouyanwang.org/thread-152-1-1.html

点评回复 引用

举报 返回顶部

dkr
  • 发短消息
  • 加为好友
dkr 当前离线
注册时间
2011-5-2 
最后登录
2011-6-25 
阅读权限
20 
积分
85 
精华
帖子

, 积分 85, 距离下一级还需 115 积分 10# 发表于 2011-5-20 14:28 |只看该作者 本帖最后由 dkr 于 2011-5-20 18:20 编辑

早上再研究了一下 h264 的資訊, 如果是用 MediaRecorder 的作法, 其實那篇文章已經點出大概,不過很多人的問題可能還是在於 SPS 以及 PPS 到底要怎樣得到。這部份就比較模糊,所以不得已只好來去分析一下 mp4 的檔案格式,發現沒那麼困難. 主要是參照 ISO/IEC 14496-15 這部份. 在 mp4 的檔案之中, 找到 avcC 這個字串, 之後就是接上 AVCDecoderConfigurationRecord. AVCDecoderConfigurationRecord 的 format 如下:

aligned(8) class AVCDecoderConfigurationRecord {
   unsigned int(8) configurationVersion = 1;
   unsigned int(8) AVCProfileIndication;
   unsigned int(8) profile_compatibility;
   unsigned int(8) AVCLevelIndication;

   bit(6) reserved = '111111'b;
   unsigned int(2) lengthSizeMinusOne;

   bit(3) reserved = '111'b;
   unsigned int(5) numOfSequenceParameterSets;

   for (i=0; i< numOfSequenceParameterSets; i++) {
      unsigned int(16) sequenceParameterSetLength ;
      bit(8*sequenceParameterSetLength) sequenceParameterSetNALUnit;
   }
   unsigned int(8) numOfPictureParameterSets;
   for (i=0; i< numOfPictureParameterSets; i++) {
      unsigned int(16) pictureParameterSetLength;
      bit(8*pictureParameterSetLength) pictureParameterSetNALUnit;
   }
}