最简单的基于FFmpeg的移动端样例附件:Android 自带播放器
=====================================================
最简单的基于FFmpeg的移动端样例系列文章列表:
最简单的基于FFmpeg的移动端样例:Android HelloWorld
最简单的基于FFmpeg的移动端样例:Android 视频解码器
最简单的基于FFmpeg的移动端样例:Android 视频解码器-单个库版
最简单的基于FFmpeg的移动端样例:Android 推流器
最简单的基于FFmpeg的移动端样例:Android 视频转码器
最简单的基于FFmpeg的移动端样例附件:Android 自带播放器
最简单的基于FFmpeg的移动端样例附件:SDL Android HelloWorld
最简单的基于FFmpeg的移动端样例:IOS HelloWorld
最简单的基于FFmpeg的移动端样例:Windows Phone HelloWorld
=====================================================
前几篇文章记录的都是安卓平台下基于FFmpeg的多媒体程序。作为对照,本文记录一个基于安卓自带多媒体框架OpenCore的视频播放器。
安卓自带的多媒体框架的用法相对移植FFmpeg来说简单太多了,仅仅须要调用几个接口函数就能控制视频的播放。不再过多记录它的用法。
源码
项目的文件夹结构如图所看到的。
Java源码位于src文件夹。
Android程序Java端代码位于src\com\leixiaohua1020\sandroidplayer\MainActivity.java。例如以下所看到的。
/**
*
* 最简单的安卓视频播放器
* Simplest Android Player
*
* 雷霄骅 Lei Xiaohua
* leixiaohua1020@126.com
* 中国传媒大学/数字电视技术
* Communication University of China / Digital TV Technology
* http://blog.csdn.net/leixiaohua1020
*
* 本程序是基于安卓接口的视频播放器。 *
* Video player based on Android API.
*
*/
package com.leixiaohua1020.sandroidplayer; import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.VideoView; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); final VideoView videoView = (VideoView) findViewById(R.id.videoView1); Button setButton = (Button) this.findViewById(R.id.button_set);
Button startButton = (Button) this.findViewById(R.id.button_start);
Button pauseButton = (Button) this.findViewById(R.id.button_pause);
Button stopButton = (Button) this.findViewById(R.id.button_stop);
final EditText urlEdittext= (EditText) this.findViewById(R.id.input_url); setButton.setOnClickListener(new OnClickListener() {
public void onClick(View arg0){
String folderurl=Environment.getExternalStorageDirectory().getPath();
String urltext=urlEdittext.getText().toString();
//Small FIX, Avoid '/'
if(urltext.charAt(0)=='/'){
urltext=urltext.substring(1);
}
String inputurl=folderurl+"/"+urltext;
Log.e("url",inputurl); videoView.setVideoPath(inputurl);
//videoView.setMediaController(new MediaController(MainActivity.this));
}
}); startButton.setOnClickListener(new OnClickListener() {
public void onClick(View arg0){
videoView.start();
}
}); pauseButton.setOnClickListener(new OnClickListener() {
public void onClick(View arg0){
videoView.pause();
}
}); stopButton.setOnClickListener(new OnClickListener() {
public void onClick(View arg0){
videoView.stopPlayback();
}
}); } @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} }
执行结果
App在手机上执行后的结果例如以下图所看到的。单击“Set”、“Start”、“Pause”、“Stop”几个按钮能够对视频做不同的操作。
注意须要把等待播放的视频文件拷贝至存储卡对应的文件夹中。比如对于以下截图的情况。须要将sintel.mp4拷贝至存储卡的根文件夹中。
下载
simplest ffmpeg mobile
项目主页
Github:https://github.com/leixiaohua1020/simplest_ffmpeg_mobile
开源中国:https://git.oschina.net/leixiaohua1020/simplest_ffmpeg_mobile
SourceForge:https://sourceforge.net/projects/simplestffmpegmobile/
CSDN工程下载地址:http://download.csdn.net/detail/leixiaohua1020/8924391
本解决方式包括了使用FFmpeg在移动端处理多媒体的各种样例:
[Android]
simplest_android_player: 基于安卓接口的视频播放器
simplest_ffmpeg_android_helloworld: 安卓平台下基于FFmpeg的HelloWorld程序
simplest_ffmpeg_android_decoder: 安卓平台下最简单的基于FFmpeg的视频解码器
simplest_ffmpeg_android_decoder_onelib: 安卓平台下最简单的基于FFmpeg的视频解码器-单库版
simplest_ffmpeg_android_streamer: 安卓平台下最简单的基于FFmpeg的推流器
simplest_ffmpeg_android_transcoder: 安卓平台下移植的FFmpeg命令行工具
simplest_sdl_android_helloworld: 移植SDL到安卓平台的最简单程序
[IOS]
simplest_ios_player: 基于IOS接口的视频播放器
simplest_ffmpeg_ios_helloworld: IOS平台下基于FFmpeg的HelloWorld程序
simplest_ffmpeg_ios_decoder: IOS平台下最简单的基于FFmpeg的视频解码器
simplest_ffmpeg_ios_streamer: IOS平台下最简单的基于FFmpeg的推流器
simplest_ffmpeg_ios_transcoder: IOS平台下移植的ffmpeg.c命令行工具
simplest_sdl_ios_helloworld: 移植SDL到IOS平台的最简单程序
最简单的基于FFmpeg的移动端样例附件:Android 自带播放器的更多相关文章
- 最简单的基于FFmpeg的移动端样例:Android 视频转码器
===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:A ...
- 最简单的基于FFmpeg的移动端样例:Android 视频解码器-单个库版
===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:A ...
- 最简单的基于FFmpeg的移动端样例附件:SDL Android HelloWorld
===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:A ...
- 最简单的基于FFmpeg的移动端样例:IOS 视频转码器
===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:A ...
- 最简单的基于FFmpeg的移动端样例:Android HelloWorld
===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:A ...
- 最简单的基于FFmpeg的移动端样例:IOS 视频解码器
===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:A ...
- 最简单的基于FFmpeg的移动端样例:Windows Phone HelloWorld
===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:A ...
- 最简单的基于FFmpeg的移动端样例:IOS 推流器
===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:A ...
- 最简单的基于FFmpeg的移动端样例:IOS HelloWorld
===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:A ...
随机推荐
- 中国大陆无法访问Steve Purcell的emacs配置解决办法
因为大陆网络问题,没办法访问Steve Purcell的emacs配置中的melpa.org,所以我们更改目录即可. 1.删除自己的配置. $ rm ~/.emacs $ rm -rf ~/.emac ...
- tomcat 异常:Caused by: org.apache.catalina.LifecycleException: The connector cannot start since the specified port value of [-1] is invalid
启动tomcat时出现异常: org.apache.catalina.LifecycleException: Failed to start component [Connector[AJP/1.3- ...
- ectouch 微信支付成功后订单状态未改变的解决办法 (转载)
原文地址: 微信支付支付成功后,返回到mobile/wx_native_callback.php 之前代码 define('IN_ECS', true); require(dirname(__FILE ...
- android 调用系统相机崩溃的解决方案
解决方案: 1.(推荐)7.0之后你的app就算有权限,给出一个URI之后手机也认为你没有权限. 不用修改原有代码,在Application的oncreate方法中: if (Build.VERSIO ...
- Http与RPC通信协议的比较
OSI网络结构的七层模型 各层的具体描述如下: 第七层:应用层 定义了用于在网络中进行通信和数据传输的接口 - 用户程式:提供标准服务,比如虚拟终端.文件以及任务的传输 和处理: 第六层:表 ...
- 51nod 1202 不同子序列个数 [计数DP]
1202 子序列个数 题目来源: 福州大学 OJ 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 子序列的定义:对于一个序列a=a[1],a[2],.. ...
- Codeforces Round #446 (Div. 2) A. Greed【模拟】
A. Greed time limit per test 2 seconds memory limit per test 256 megabytes input standard input outp ...
- 你也许还不知道const_cast,static_cast,dynamic_cast,reinterpret_cast的区别吧?
[QQ群: 189191838,对算法和C++感兴趣可以进来] 开篇立意: C++中各种转换令人眼花缭乱,看似差不多,实际差很多,而且在当今时间,做一个"差不多先生"其 ...
- 实现微信朋友圈点击评论按钮时cell上移
实现场景:微信朋友圈TableView(BigTableView)的每一行cell都包含一个SmallTableView(显示所有点赞及评论) 实现思路: //BigTableView的content ...
- EF for oracle中无法读取配置 显示无法open问题解决方式
1.更新以上设置为 非注销部分 弄了很久很久哈.