提交 c77ab8e4 authored 作者: kongdywang's avatar kongdywang

fix android play error in some cases & fix player bug

上级 cef8db36
......@@ -189,9 +189,6 @@ public class FTXVodPlayer extends FTXBasePlayer implements MethodChannel.MethodC
if (mSurfaceTextureEntry != null && mSurfaceTextureEntry.surfaceTexture() != null) {
SurfaceTexture surfaceTexture = mSurfaceTextureEntry.surfaceTexture();
surfaceTexture.setDefaultBufferSize(width, height);
if (mSurface != null) {
mSurface.release();
}
mSurface = new Surface(surfaceTexture);
mVodPlayer.setSurface(mSurface);
}
......
// Copyright (c) 2022 Tencent. All rights reserved.
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:super_player/super_player.dart';
import 'package:superplayer_widget/demo_superplayer_lib.dart';
import 'shortvideo/demo_short_video_lib.dart';
class DemoShortVideoPlayer extends StatefulWidget {
@override
_DemoShortVideoPlayerState createState() => _DemoShortVideoPlayerState();
}
......@@ -19,7 +19,7 @@ class _DemoShortVideoPlayerState extends State<DemoShortVideoPlayer> with Widget
@override
void initState() {
super.initState();
ShortVideoDataLoader loader = ShortVideoDataLoader();
ShortVideoDataLoader loader = ShortVideoDataLoader();
loader.getPageListDataOneByOneFunction((dataModels) {
setState(() {
superPlayerModelList = dataModels;
......@@ -33,21 +33,39 @@ class _DemoShortVideoPlayerState extends State<DemoShortVideoPlayer> with Widget
List<Widget> widgetList = [];
for (int i = 0; i < superPlayerModelList.length; i++) {
widgetList.add(ShortVideoPageWidget(
position: i,
videoUrl: superPlayerModelList[i].videoURL,
coverUrl: superPlayerModelList[i].coverUrl));
position: i, videoUrl: superPlayerModelList[i].videoURL, coverUrl: superPlayerModelList[i].coverUrl));
}
return PageView(
scrollDirection: Axis.vertical,
onPageChanged: (int index) {
LogUtils.i(TAG,"[onPageEndChanged] outside ${_currentIndex.toString()} ——》 ${index.toString()}");
_stopAndPlay(index);
},
children: widgetList,
return Stack(
children: [
PageView(
scrollDirection: Axis.vertical,
onPageChanged: (int index) {
LogUtils.i(TAG, "[onPageEndChanged] outside ${_currentIndex.toString()} ——》 ${index.toString()}");
_stopAndPlay(index);
},
children: widgetList,
),
SafeArea(
child: Positioned(
left: 0,
top: 0,
child: InkWell(
onTap: _onBackTap,
child: const Image(
width: 40,
height: 40,
image: AssetImage("images/superplayer_btn_back_play.png", package: StringResource.PKG_NAME),
),
))),
],
);
}
void _onBackTap() {
Navigator.of(context).pop();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
......@@ -63,7 +81,6 @@ class _DemoShortVideoPlayerState extends State<DemoShortVideoPlayer> with Widget
}
}
_stopAndPlay(int index) async {
EventBusUtils.getInstance().fire(new StopAndResumeEvent(index));
_currentIndex = index;
......
......@@ -202,23 +202,22 @@ class _DemoSuperPlayerState extends State<DemoSuperPlayer> with TXPipPlayerResto
model.appId = appId;
if (url.isNotEmpty) {
model.videoURL = url;
playCurrentModel(model, 0);
} else if (appId != 0 && fileId.isNotEmpty) {
model.videoId = new SuperPlayerVideoId();
model.videoId!.fileId = fileId;
if (pSign.isNotEmpty) {
model.videoId!.psign = pSign;
}
loader.getVideoData(model, (resultModel) {
setState(() {
videoModels.add(resultModel);
});
playCurrentModel(resultModel, 0);
});
} else {
EasyLoading.showError("请输入播放地址!");
return;
}
loader.getVideoData(model, (resultModel) {
setState(() {
videoModels.add(resultModel);
});
playCurrentModel(resultModel, 0);
});
},
needPisgn: !isLive,
showFileEdited: !isLive,
......
......@@ -24,7 +24,7 @@ class _DemoTXVodPlayerState extends State<DemoTXVodPlayer>
int _volume = 100;
List _supportedBitrates = [];
int _curBitrateIndex = 0;
String _url = "http://1400329073.vod2.myqcloud.com/d62d88a7vodtranscq1400329073/59c68fe75285890800381567412/adp.10.m3u8";
String _url = "http://1500005830.vod2.myqcloud.com/43843ec0vodtranscq1500005830/48d0f1f9387702299774251236/adp.10.m3u8";
int _appId = 0;
String _fileId = "";
double _rate = 1.0;
......
......@@ -6,10 +6,7 @@ class ShortVideoPageWidget extends StatefulWidget {
String coverUrl;
int position;
ShortVideoPageWidget(
{required this.position,
required this.videoUrl,
required this.coverUrl});
ShortVideoPageWidget({required this.position, required this.videoUrl, required this.coverUrl});
@override
State<StatefulWidget> createState() {
......@@ -33,11 +30,10 @@ class _TXVodPlayerPageState extends State<ShortVideoPageWidget> {
TXVodPlayerController _controller;
_TXVodPlayerPageState() : _controller = TXVodPlayerController(){
_txPlayerVideo = new TXPlayerVideo(controller: _controller);
_TXVodPlayerPageState() : _controller = TXVodPlayerController() {
_txPlayerVideo = new TXPlayerVideo(controller: _controller);
}
@override
void initState() {
super.initState();
......@@ -47,7 +43,8 @@ class _TXVodPlayerPageState extends State<ShortVideoPageWidget> {
_init() async {
await _controller.initialize();
_controller.setConfig(FTXVodPlayConfig());
LogUtils.i(TAG, " [init] ${widget.position.toString()} ${this.hashCode.toString()} ${_controller.hashCode.toString()}");
LogUtils.i(
TAG, " [init] ${widget.position.toString()} ${this.hashCode.toString()} ${_controller.hashCode.toString()}");
_setPlayerListener();
_setEventBusListener();
if (widget.position == 0) {
......@@ -73,16 +70,13 @@ class _TXVodPlayerPageState extends State<ShortVideoPageWidget> {
_playEventSubscription?.cancel();
await _stop();
_controller.dispose();
LogUtils.i(TAG, " [dispose] ${widget.position.toString()} ${this.hashCode.toString()} ${_controller.hashCode.toString()}");
LogUtils.i(
TAG, " [dispose] ${widget.position.toString()} ${this.hashCode.toString()} ${_controller.hashCode.toString()}");
}
Widget _getTXVodPlayerMainPage() {
return Stack(
children: <Widget>[
_getGestureDetectorView(),
_getPreviewImg(),
_getSeekBarView()
],
children: <Widget>[_getGestureDetectorView(), _getPreviewImg(), _getSeekBarView()],
);
}
......@@ -103,18 +97,21 @@ class _TXVodPlayerPageState extends State<ShortVideoPageWidget> {
_onTapPageView() {
_controller.isPlaying().then((value) {
value ? _pause() :_resume();
value ? _pause() : _resume();
});
LogUtils.i(TAG, "tap ${_isVideoPlaying.toString()}");
}
Widget _getSeekBarView() {
return Positioned(
child: VideoSliderView(_controller, _progressSliderKey),
bottom: 20,
right: 0,
left: 0,
);
return SafeArea(
child: Stack(children: [
Positioned(
child: VideoSliderView(_controller, _progressSliderKey),
bottom: 20,
right: 0,
left: 0,
)
],));
}
Widget _getPauseView() {
......@@ -122,7 +119,8 @@ class _TXVodPlayerPageState extends State<ShortVideoPageWidget> {
offstage: _isVideoPlaying,
child: Align(
child: Container(
child: Image(image: AssetImage("images/superplayer_ic_vod_play_normal.png", package:StringResource.PKG_NAME)),
child: Image(
image: AssetImage("images/superplayer_ic_vod_play_normal.png", package: StringResource.PKG_NAME)),
height: 50,
width: 50),
alignment: Alignment.center,
......@@ -144,7 +142,7 @@ class _TXVodPlayerPageState extends State<ShortVideoPageWidget> {
)));
}
_pause() async{
_pause() async {
LogUtils.i(TAG, "[_pause]");
await _controller.pause();
setState(() {
......@@ -152,7 +150,7 @@ class _TXVodPlayerPageState extends State<ShortVideoPageWidget> {
});
}
_resume() async{
_resume() async {
LogUtils.i(TAG, "[_resume]");
await _controller.resume();
setState(() {
......@@ -161,11 +159,12 @@ class _TXVodPlayerPageState extends State<ShortVideoPageWidget> {
}
_stopLastAndPlayCurrent(StopAndResumeEvent event) {
LogUtils.i(TAG, " [received at not current outside] ${widget.position.toString()} ${this.hashCode.toString()} ${widget.hashCode.toString()} ${_controller.hashCode.toString()}");
event.index != widget.position ? _stop() :_startPlay();
LogUtils.i(TAG,
" [received at not current outside] ${widget.position.toString()} ${this.hashCode.toString()} ${widget.hashCode.toString()} ${_controller.hashCode.toString()}");
event.index != widget.position ? _stop() : _startPlay();
}
Future<void> _stop() async{
Future<void> _stop() async {
if (!mounted) return;
LogUtils.i(TAG, " [stop] ${widget.position.toString()} ${widget.hashCode.toString()}");
_isVideoPrepared = false;
......@@ -173,8 +172,6 @@ class _TXVodPlayerPageState extends State<ShortVideoPageWidget> {
_controller.stop();
}
_startPlay() async {
LogUtils.i(TAG, " [_startPlay]");
setState(() {
......@@ -198,11 +195,11 @@ class _TXVodPlayerPageState extends State<ShortVideoPageWidget> {
});
_streamSubscriptionApplicationResume = EventBusUtils.getInstance().on<ApplicationResumeEvent>().listen((event) {
_resume();
_resume();
});
_streamSubscriptionApplicationPause = EventBusUtils.getInstance().on<ApplicationPauseEvent>().listen((event) {
_pause();
_pause();
});
}
......
......@@ -26,6 +26,7 @@ class SuperVodDataLoader {
var request = await httpClient.getUrl(Uri.parse(url));
var response = await request.close();
if (response.statusCode != HttpStatus.ok) {
callback(model);
return;
}
var json = await response.transform(utf8.decoder).join();
......@@ -35,6 +36,7 @@ class SuperVodDataLoader {
String warning = root['warning'];
LogUtils.d(TAG, "_getVodListData,code=($code, ${PlayInfoProtocol.getV4ErrorCodeDescription(code)}),message=$message,warning=$warning");
if (code != 0) {
callback(model);
return;
}
int version = root['version'];
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论