最简单的基于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 ...
随机推荐
- C++ DLL导出类 知识大全
在公司使用C++ 做开发,公司的大拿搭了一个C++的跨平台开发框架.在C++开发领域我还是个新手,有很多知识要学,比如Dll库的开发. 参考了很多这方面的资料,对DLL有一个基本全面的了解.有一个问题 ...
- picker(拖拽上下拉动的选项)
[b]新版本更新:鼠标上下拖动选择内容:http://hiuman.iteye.com/blog/2353563[/b] (如有错敬请指点,以下是我工作中遇到并且解决的问题) 一开始搜这个内容的时候, ...
- 【C语言】32位,64位机器sizeof区别
float, double : 采用IEEE标准浮点数格式,格式固定 float 32bit, double 64bit int一般和CPU寄存器长度有关,不过也和编译器,汇编器有关 由于C ,C++ ...
- tkinter 表格
import tkinter from tkinter import ttk root = tkinter.Tk() tree = ttk.Treeview(root, show="head ...
- [BZOJ4756][Usaco2017 Jan]Promotion Counting 树状数组
4756: [Usaco2017 Jan]Promotion Counting Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 305 Solved: ...
- Codeforces Round #306 (Div. 2) A. Two Substrings【字符串/判断所给的字符串中是否包含不重叠的“BA” “AB”两个字符串】
A. Two Substrings time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- 洛谷——P1348 Couple number
P1348 Couple number 题目描述 任何一个整数N都能表示成另外两个整数a和b的平方差吗?如果能,那么这个数N就叫做Couple number.你的工作就是判断一个数N是不是Couple ...
- kong的preserve_host和strip_uri解析
preserve_host:当代理的时候,k代理时,Kong的默认行为是将上游请求的Host头设置为API的upstream_url属性的主机名.这个参数接受一个boolean值. 当为FALSE时, ...
- CSS背景属性background
background属性是所有背景属性的缩写: 以下是这些背景属性: background-color:背景颜色 你可以通过颜色名称(red/green/blue)来设置 也可以用十六进制(#fff/ ...
- 死磕 Fragment 的生命周期
死磕 Fragment 的生命周期 本文原创,转载请注明出处.欢迎关注我的 简书 ,关注我的专题 Android Class 我会长期坚持为大家收录简书上高质量的 Android 相关博文.本篇文章已 ...